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 相关文章推荐
全面解析Python的While循环语句的使用方法
Oct 13 Python
python安装mysql-python简明笔记(ubuntu环境)
Jun 25 Python
python获取list下标及其值的简单方法
Sep 12 Python
python 迭代器和iter()函数详解及实例
Mar 21 Python
Numpy数据类型转换astype,dtype的方法
Jun 09 Python
PyQt5 QTable插入图片并动态更新的实例
Jun 18 Python
使用OpenCV实现仿射变换—缩放功能
Aug 29 Python
Selenium基于PIL实现拼接滚动截图
Apr 10 Python
如何在django中实现分页功能
Apr 22 Python
Python打印特殊符号及对应编码解析
May 07 Python
Python爬虫中urllib3与urllib的区别是什么
Jul 21 Python
在 Python 中利用 Pool 进行多线程
Apr 24 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连mysql和oracle数据库性能比较
2006/10/09 PHP
php数组对百万数据进行排除重复数据的实现代码
2010/06/08 PHP
php中的PHP_EOL换行符详细解析
2013/10/26 PHP
PHP遍历并打印指定目录下所有文件实例
2014/02/10 PHP
php字符串操作常见问题小结
2016/10/11 PHP
FCK调用方法..
2006/12/21 Javascript
使用JS操作页面表格,元素的一些技巧
2007/02/02 Javascript
ExtJS 入门
2010/10/29 Javascript
JavaScript中valueOf函数与toString方法深入理解
2012/12/02 Javascript
JQuery与Ajax调用新浪API获取短网址的代码
2014/02/07 Javascript
什么是 AngularJS?AngularJS简介
2014/12/06 Javascript
有关easyui-layout中的收缩层无法显示标题的解决办法
2016/05/10 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
2016/08/24 Javascript
Boostrap基础教程之JavaScript插件篇
2016/09/08 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
2017/02/22 Javascript
JavaScript实现form表单的多文件上传
2020/03/27 Javascript
VUE2 前端实现 静态二级省市联动选择select的示例
2018/02/09 Javascript
JS同步、异步、延迟加载的方法
2018/05/05 Javascript
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
JQuery判断radio单选框是否选中并获取值的方法
2019/01/17 jQuery
js 获取扫码枪输入数据的方法
2020/06/10 Javascript
Python中用Descriptor实现类级属性(Property)详解
2014/09/18 Python
python检测某个变量是否有定义的方法
2015/05/20 Python
Python中的getopt函数使用详解
2015/07/28 Python
Python遍历目录中的所有文件的方法
2016/07/08 Python
Python实现判断并移除列表指定位置元素的方法
2018/04/13 Python
Python 实现引用其他.py文件中的类和类的方法
2018/04/29 Python
linux下python使用sendmail发送邮件
2018/05/22 Python
解决Django连接db遇到的问题
2019/08/29 Python
django 实现简单的插入视频
2020/04/07 Python
Django调用百度AI接口实现人脸注册登录代码实例
2020/04/23 Python
怎样写好自我鉴定
2013/12/04 职场文书
2014年超市工作总结
2014/11/19 职场文书
2015年语文教研组工作总结
2015/05/23 职场文书
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers
微软Win11 全新照片应用面向 Dev预览版推出 新版本上手体验图集
2022/09/23 数码科技