Python sklearn KFold 生成交叉验证数据集的方法
源起:
1.我要做交叉验证,需要每个训练集和测试集都保持相同的样本分布比例,直接用sklearn提供的KFold并不能满足这个需求。
2.将生成的交叉验证数据集保存成CSV文件,而不是直接用sklearn训练分类模型。
3.在编码过程中有一的误区需要注意:
这个sklearn官方给出的文档
>>>importnumpyasnp >>>fromsklearn.model_selectionimportKFold >>>X=["a","b","c","d"] >>>kf=KFold(n_splits=2) >>>fortrain,testinkf.split(X): ...print("%s%s"%(train,test)) [23][01] [01][23]
我之前犯的一个错误是将train,test理解成原数据集分割成子数据集之后的子数据集索引。而实际上,它就是原始数据集本身的样本索引。
源码:
#-*-coding:utf-8-*- #得到交叉验证数据集,保存成CSV文件 #输入是一个包含正常恶意标签的完整数据集,在读数据的时候分开保存到datasetBenign,datasetMalicious #分别对两个数据集进行KFold,最后合并保存 fromsklearn.model_selectionimportKFold importcsv defwriteInFile(benignKFTrain,benignKFTest,maliciousKFTrain,maliciousKFTest,i,datasetBenign,datasetMalicious): newTrainFilePath="E:\\hadoopExperimentResult\\5KFold\\AllDataSetIIR10\\dataset\\ImbalancedAllTraffic-train-%s.csv"%i newTestFilePath="E:\\hadoopExperimentResult\\5KFold\\AllDataSetIIR10\\dataset\\IImbalancedAllTraffic-test-%s.csv"%i newTrainFile=open(newTrainFilePath,"wb")#wb为防止空行 newTestFile=open(newTestFilePath,"wb") writerTrain=csv.writer(newTrainFile) writerTest=csv.writer(newTestFile) forindexinbenignKFTrain: writerTrain.writerow(datasetBenign[index]) forindexinbenignKFTest: writerTest.writerow(datasetBenign[index]) forindexinmaliciousKFTrain: writerTrain.writerow(datasetMalicious[index]) forindexinmaliciousKFTest: writerTest.writerow(datasetMalicious[index]) newTrainFile.close() newTestFile.close() defgetKFoldDataSet(datasetPath): #CSV读取文件 #开始从文件中读取全部的数据集 datasetFile=file(datasetPath,'rb') datasetBenign=[] datasetMalicious=[] readerDataset=csv.reader(datasetFile) forlineinreaderDataset: iflen(line)>1: curLine=[] curLine.append(float(line[0])) curLine.append(float(line[1])) curLine.append(float(line[2])) curLine.append(float(line[3])) curLine.append(float(line[4])) curLine.append(float(line[5])) curLine.append(float(line[6])) curLine.append(line[7]) ifline[7]=="benign": datasetBenign.append(curLine) else: datasetMalicious.append(curLine) #交叉验证分割数据集 K=5 kf=KFold(n_splits=K) benignKFTrain=[];benignKFTest=[] fortrain,testinkf.split(datasetBenign): benignKFTrain.append(train) benignKFTest.append(test) maliciousKFTrain=[];maliciousKFTest=[] fortrain,testinkf.split(datasetMalicious): maliciousKFTrain.append(train) maliciousKFTest.append(test) foriinrange(K): print"========================"+str(i)+"========================" printbenignKFTrain[i],benignKFTest[i] printmaliciousKFTrain[i],maliciousKFTest[i] writeInFile(benignKFTrain[i],benignKFTest[i],maliciousKFTrain[i],maliciousKFTest[i],i,datasetBenign, datasetMalicious) datasetFile.close() if__name__=="__main__": getKFoldDataSet(r"E:\hadoopExperimentResult\5KFold\AllDataSetIIR10\dataset\ImbalancedAllTraffic-10.csv")
以上这篇PythonsklearnKFold生成交叉验证数据集的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。