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代码真的很爽
Aug 26 Python
Python中非常实用的一些功能和函数分享
Feb 14 Python
十条建议帮你提高Python编程效率
Feb 16 Python
pycharm安装图文教程
May 02 Python
python实现各进制转换的总结大全
Jun 18 Python
Python Unittest自动化单元测试框架详解
Apr 04 Python
解决Python一行输出不显示的问题
Dec 03 Python
详解Python requests 超时和重试的方法
Dec 18 Python
python 实现矩阵上下/左右翻转,转置的示例
Jan 23 Python
Django框架 查询Extra功能实现解析
Sep 04 Python
Python读入mnist二进制图像文件并显示实例
Apr 24 Python
Python 中Operator模块的使用
Jan 30 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
解密ThinkPHP3.1.2版本之模板继承
2014/06/19 PHP
php通过前序遍历树实现无需递归的无限极分类
2015/07/10 PHP
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
php+js实现倒计时功能
2014/06/02 Javascript
jquery得到iframe src属性值的方法
2014/09/25 Javascript
jQuery实现数秒后自动提交form的方法
2015/03/05 Javascript
Angular 中 select指令用法详解
2016/09/29 Javascript
PHP获取当前页面完整URL的方法
2016/12/02 Javascript
使用Vue构建可重用的分页组件
2018/03/26 Javascript
vue cli升级webapck4总结
2018/04/04 Javascript
js实现文件上传功能 后台使用MultipartFile
2018/09/08 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
微信小程序Echarts覆盖正常组件问题解决
2019/07/13 Javascript
vue 页面跳转的实现方式
2021/01/12 Vue.js
[04:28]2014DOTA2国际邀请赛 采访小兔子LGD挺进钥匙体育馆
2014/07/14 DOTA
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
[57:28]2018DOTA2亚洲邀请赛 4.6 淘汰赛 TNC vs Liquid 第一场
2018/04/10 DOTA
python with statement 进行文件操作指南
2014/08/22 Python
在Python中操作字符串之startswith()方法的使用
2015/05/20 Python
在Python中处理列表之reverse()方法的使用教程
2015/05/21 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
2018/03/29 Python
python操作kafka实践的示例代码
2019/06/19 Python
使用Python实现跳一跳自动跳跃功能
2019/07/10 Python
HTML的form表单和django的form表单
2019/07/25 Python
命令行运行Python脚本时传入参数的三种方式详解
2019/10/11 Python
解析Python 偏函数用法全方位实现
2020/06/26 Python
python安装及变量名介绍详解
2020/12/12 Python
CSS3的first-child选择器实战攻略
2016/04/28 HTML / CSS
使用HTML5的链接预取功能(link prefetching)给网站提速
2012/12/13 HTML / CSS
伦敦著名的运动鞋综合商店:Footpatrol
2019/03/25 全球购物
教育学专业实习生的自我鉴定
2013/11/26 职场文书
秋季运动会广播稿大全
2014/02/17 职场文书
2014年机关党委工作总结
2014/12/11 职场文书
设备技术员岗位职责
2015/04/11 职场文书
丧事答谢词大全
2015/09/30 职场文书
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL