【python|ML】k-fold/leave-one-out 方法在对率回归实现(西瓜书习题3.4,数据UCI-iris)
2016-12-19 21:22
706 查看
# 经验:梯度下降要让目标确实减小(或者增大),此程序tempsum需要减小,故要着重检查!! import numpy as np def dlhg(x, d): x = np.c_[x, np.ones(d.shape[0])] w = np.random.randn(x[0].shape[0]) miu = 0.01 temp_sum_old = np.inf count = 0 while True: tempsum = 0 dw = 0 for i in range(d.shape[0]): pdt = np.sum(w * x[i]) tempsum = tempsum + np.log(1 + np.exp(pdt)) - d[i] * pdt dw = dw + (np.exp(pdt) / (1 + np.exp(pdt)) - d[i]) * x[i] if np.abs(tempsum - temp_sum_old) < 0.01: break w = w - miu * dw temp_sum_old = tempsum count = count + 1 #print(tempsum) #print(count) #for i in range(d.shape[0]): # # i 为第i个样本 # if np.sum(w * x[i]) > 0: # print(1) #else: # print(0) #print(w) return w
import numpy as npdef load_iris():iris_data_file = "D:/WORKSPACE/ML/DATA/UCI/_iris.data"_x = np.genfromtxt(iris_data_file, delimiter=',', usecols=(0, 1, 2, 3))_y = np.genfromtxt(iris_data_file, delimiter=',', usecols=(4))return _x, _y
# 示例:from UCIdata import *from duilvhuigui import *x, d = load_iris()x = x[:100]d = d[:100]# 10-fold cross-validationerr_count = 0print("\td\t\ty")for k in range(10):xte = np.r_[x[5 * k:5 * (k + 1)], x[50+5 * k:50+5 * (k + 1)]]dte = np.r_[d[5 * k:5 * (k + 1)], d[50+5 * k:50+5 * (k + 1)]]xtr = np.r_[x[:5 * k], x[5 * (k + 1):50+5 * k], x[50+5 * (k + 1):]]dtr = np.r_[d[:5 * k], d[5 * (k + 1):50+5 * k], d[50+5 * (k + 1):]]w = dlhg(xtr, dtr)xte = np.c_[xte, np.ones(dte.shape[0])]print("{}-fold\t".format(k))for i in range(dte.shape[0]):if np.sum(w * xte[i]) > 0:y = 1else:y = 0print("\t{}\t{}".format(dte[i], y))if dte[i] != y:err_count += 1print("Total error:{}\t".format(err_count))# leave-one-outerr_count = 0print("Leave-one-out")for k in range(100):xte = x[k]dte = d[k]xtr = np.r_[x[:k], x[k+1:]]dtr = np.r_[d[:k], d[k+1:]]w = dlhg(xtr, dtr)# 特殊处理:只有一维情况下,这里了用np.c_[]会报错xte = np.r_[xte, 1]if np.sum(w * xte) > 0:y = 1else:y = 0print("\t{}\t{}".format(dte, y))if dte != y:err_count += 1print("Total error:{}\t".format(err_count))结语:error都是0,也没发现哪里不对。。。我的天此博客纯粹为记录,算是知识的积累。当然也欢迎交流批评等。
相关文章推荐
- python3.4用循环往mysql5.7中写数据并输出的实现方法
- Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
- python中plot实现即时数据动态显示方法
- Python实现将SQLite中的数据直接输出为CVS的方法示例
- python数据输入caffe实现回归
- Python使用shelve模块实现简单数据存储的方法
- IRIS数据采用Kmeans方法的C++实现
- 用对数几率回归实现周志华《机器学习》习题3.3西瓜分类,python编程
- python中json格式数据输出的简单实现方法
- 【LDA|ML】西瓜书习题3.4
- Python实现导出数据生成excel报表的方法示例
- python实现查找excel里某一列重复数据并且剔除后打印的方法
- Python操作Mongodb插入数据的两种方法:insert_one()与insert_many()
- Python使用shelve模块实现简单数据存储的方法
- python操作mongodb根据_id查询数据的实现方法
- 数据挖掘 关联规则的FP-growth-tree(FP增长树)的python实现 使用方法
- Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
- Python简单实现TCP包发送十六进制数据的方法
- Python实现向服务器请求压缩数据及解压缩数据的方法示例