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 自动化表单提交实例代码
Jun 08 Python
在Python中执行系统命令的方法示例详解
Sep 14 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
Nov 23 Python
通过Python模块filecmp 对文件比较的实现方法
Jun 29 Python
python3转换code128条形码的方法
Apr 17 Python
python实现月食效果实例代码
Jun 18 Python
python卸载后再次安装遇到的问题解决
Jul 10 Python
Django中celery执行任务结果的保存方法
Jul 12 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
Sep 04 Python
将labelme格式数据转化为标准的coco数据集格式方式
Feb 17 Python
Python图像处理库PIL的ImageFilter模块使用介绍
Feb 26 Python
Python 中如何使用 virtualenv 管理虚拟环境
Jan 21 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
修改destoon会员公司的伪静态中的com目录的方法
2014/08/21 PHP
PHP中的替代语法简介
2014/08/22 PHP
PHP使用mysqli操作MySQL数据库的简单方法
2017/02/04 PHP
php中Swoole的热更新实现代码实例
2021/03/04 PHP
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
浅析用prototype定义自己的方法
2013/11/14 Javascript
jquery超简单实现手风琴效果的方法
2015/06/05 Javascript
对象题目的一个坑 理解Javascript对象
2015/12/22 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
2016/04/28 Javascript
Javascript对象字面量的理解
2016/06/22 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
JS 验证密码 不能为空,必须含有数字、字母、特殊字符,长度在8-12位
2017/06/21 Javascript
微信小程序canvas拖拽、截图组件功能
2018/09/04 Javascript
解决vuecli3.0热更新失效的问题
2018/09/19 Javascript
jQuery+ThinkPHP实现图片上传
2020/07/23 jQuery
基于vue hash模式微信分享#号的解决
2020/09/07 Javascript
将Python的Django框架与认证系统整合的方法
2015/07/24 Python
python爬虫爬取快手视频多线程下载功能
2018/02/28 Python
python如何求解两数的最大公约数
2018/09/27 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
python多线程扫描端口(线程池)
2019/09/04 Python
django实现模板中的字符串文字和自动转义
2020/03/31 Python
如何利用Python 进行边缘检测
2020/10/14 Python
Nixon手表英国官网:美国尼克松手表品牌
2020/02/10 全球购物
工作时间上网检讨书
2014/02/03 职场文书
祖国在我心中演讲稿600字
2014/05/04 职场文书
优秀员工评优方案
2014/06/13 职场文书
党员应该树立反腐倡廉的坚定意识思想汇报
2014/09/12 职场文书
交通事故和解协议书
2014/09/25 职场文书
安全员岗位职责范本
2015/04/11 职场文书
2015年大班保育员工作总结
2015/05/18 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书
mysql 直接拷贝data 目录下文件还原数据的实现
2021/07/25 MySQL
关于JS中的作用域中的问题思考分享
2022/04/06 Javascript
sql server偶发出现死锁的解决方法
2022/04/10 SQL Server