Python sklearn KFold 生成交叉验证数据集的方法


Posted in Python onDecember 11, 2018

源起:

1.我要做交叉验证,需要每个训练集和测试集都保持相同的样本分布比例,直接用sklearn提供的KFold并不能满足这个需求。

2.将生成的交叉验证数据集保存成CSV文件,而不是直接用sklearn训练分类模型。

3.在编码过程中有一的误区需要注意:

这个sklearn官方给出的文档

>>> import numpy as np
>>> from sklearn.model_selection import KFold
 
>>> X = ["a", "b", "c", "d"]
>>> kf = KFold(n_splits=2)
>>> for train, test in kf.split(X):
...  print("%s %s" % (train, test))
[2 3] [0 1]
[0 1] [2 3]

我之前犯的一个错误是将train,test理解成原数据集分割成子数据集之后的子数据集索引。而实际上,它就是原始数据集本身的样本索引。

源码:

# -*- coding:utf-8 -*-
# 得到交叉验证数据集,保存成CSV文件
# 输入是一个包含正常恶意标签的完整数据集,在读数据的时候分开保存到datasetBenign,datasetMalicious
# 分别对两个数据集进行KFold,最后合并保存
 
from sklearn.model_selection import KFold
import csv
 
def writeInFile(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)
 for index in benignKFTrain:
  writerTrain.writerow(datasetBenign[index])
 for index in benignKFTest:
  writerTest.writerow(datasetBenign[index])
 for index in maliciousKFTrain:
  writerTrain.writerow(datasetMalicious[index])
 for index in maliciousKFTest:
  writerTest.writerow(datasetMalicious[index])
 newTrainFile.close()
 newTestFile.close()
 
 
def getKFoldDataSet(datasetPath):
 # CSV读取文件
 # 开始从文件中读取全部的数据集
 datasetFile = file(datasetPath, 'rb')
 datasetBenign = []
 datasetMalicious = []
 readerDataset = csv.reader(datasetFile)
 for line in readerDataset:
  if len(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])
   if line[7] == "benign":
    datasetBenign.append(curLine)
   else:
    datasetMalicious.append(curLine)
 
 # 交叉验证分割数据集
 K = 5
 kf = KFold(n_splits=K)
 benignKFTrain = []; benignKFTest = []
 for train,test in kf.split(datasetBenign):
  benignKFTrain.append(train)
  benignKFTest.append(test)
 maliciousKFTrain=[]; maliciousKFTest=[]
 for train,test in kf.split(datasetMalicious):
  maliciousKFTrain.append(train)
  maliciousKFTest.append(test)
 for i in range(K):
  print "======================== "+ str(i)+ " ========================"
  print benignKFTrain[i], benignKFTest[i]
  print maliciousKFTrain[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")

以上这篇Python sklearn KFold 生成交叉验证数据集的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python2.7删除文件夹和删除文件代码实例
Dec 18 Python
Python中的多重装饰器
Apr 11 Python
Python 实现文件的全备份和差异备份详解
Dec 27 Python
Python 自动刷博客浏览量实例代码
Jun 14 Python
Python实现的求解最大公约数算法示例
May 03 Python
Python中dict和set的用法讲解
Mar 28 Python
python 字典操作提取key,value的方法
Jun 26 Python
在python中实现求输出1-3+5-7+9-......101的和
Apr 02 Python
Django如何重置migration的几种情景
Feb 24 Python
基于Python实现的购物商城管理系统
Apr 27 Python
Python爬取某拍短视频
Jun 11 Python
Python OpenCV超详细讲解调整大小与图像操作的实现
Apr 02 Python
想学python 这5本书籍你必看!
Dec 11 #Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
Dec 11 #Python
Python3爬虫学习入门教程
Dec 11 #Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
Dec 11 #Python
python绘制散点图并标记序号的方法
Dec 11 #Python
pandas分别写入excel的不同sheet方法
Dec 11 #Python
使用Python横向合并excel文件的实例
Dec 11 #Python
You might like
PHP分多步骤填写发布信息的简单方法实例代码
2012/09/23 PHP
php中require和require_once的区别说明
2014/02/27 PHP
php+ajax实现无刷新的新闻留言系统
2020/12/21 PHP
PHP字符串中抽取子串操作实例分析
2019/06/22 PHP
JavaScript代码复用模式详解
2014/11/07 Javascript
封装好的js判断操作系统与浏览器代码分享
2015/01/09 Javascript
js判断空对象的实例(超简单)
2016/07/26 Javascript
H5移动端图片压缩上传开发流程
2016/11/09 Javascript
JavaScript实现星星等级评价功能
2017/03/22 Javascript
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
2017/09/22 Javascript
nodejs超出最大的调用栈错误问题
2017/12/27 NodeJs
用JS实现根据当前时间随机生成流水号或者订单号
2018/05/31 Javascript
JavaScript设计模式之缓存代理模式原理与简单用法示例
2018/08/07 Javascript
详解angular部署到iis出现404解决方案
2018/08/14 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
vue+webpack dev本地调试全局样式引用失效的解决方案
2019/11/12 Javascript
深入了解Vue.js 混入(mixins)
2020/07/23 Javascript
[46:28]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
python中遍历文件的3个方法
2014/09/02 Python
Python面向对象编程基础解析(一)
2017/10/26 Python
Python3简单实例计算同花的概率代码
2017/12/06 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
2018/05/18 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
2020/02/10 Python
CSS3选择器新增问题的实现
2021/01/21 HTML / CSS
理肤泉美国官网:La Roche-Posay
2018/01/17 全球购物
固特异美国在线轮胎店:Goodyear Tire
2019/02/23 全球购物
在线课程:Skillshare
2019/04/02 全球购物
State Cashmere官网:半零售价可持续蒙古羊绒
2020/02/26 全球购物
请解释接口的显式实现有什么意义
2012/05/26 面试题
银行实习生的自我评价
2013/12/09 职场文书
迟到检讨书1000字
2014/01/15 职场文书
机电一体化应届生求职信范文
2014/01/24 职场文书
厉行勤俭节约倡议书
2014/05/16 职场文书
2014单位领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
关于元旦的广播稿2016
2015/12/17 职场文书