西瓜书《机器学习》课后编程题答案——3.4
3.4选择两个UCI数据集,比较0折交叉验证法和留一法所估计出的对率回归的错误率.
本文在上一篇3.3的基础上主要实现10折交叉验证法和留一法对数据集的划分,逻辑逻辑回归部分代码大多数不变,本文针对改动部分作说明。
UCI数据集下载地址,本文下载Lris数据集。
10折交叉验证法数据集
10折交叉验证将数据集划分为10个大小相似的互斥子集,选择9份作为训练集,剩下的作为测试集,进行10次计算平均误差。首先对数据集进行划分保存。
def kfolddata(k, dataMat):
import numpy as np
import random
numb = int(len(dataMat)/k) #整除,每类可分numb个样本
remainder = int(len(dataMat)%k) #余数,将其随机分给K个类别
index = random.sample(range(0, len(dataMat)), numb*k) #随机生成numb*k不重复数,作为样本索引
index = np.reshape(index,(k, numb)) #reshape成k,numb
for i in range(k):
file_name = 'data' + str(i) + '.txt'
file = open(file_name, 'a') #以a模式打开第i类样本
if numb>1: #将样本添加进第i类样本
for ind in index[i][:]:
file.write(str(dataMat[ind]))
file.write(str('\n'