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脚本获取操作系统版本信息
Dec 17 Python
Python线程创建和终止实例代码
Jan 20 Python
PyCharm设置护眼背景色的方法
Oct 29 Python
Python远程视频监控程序的实例代码
May 05 Python
python创建n行m列数组示例
Dec 02 Python
Python.append()与Python.expand()用法详解
Dec 18 Python
Python unittest工作原理和使用过程解析
Feb 24 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
Mar 06 Python
Python用类实现扑克牌发牌的示例代码
Jun 01 Python
keras绘制acc和loss曲线图实例
Jun 15 Python
快速了解Python开发环境Spyder
Jun 29 Python
Python按顺序遍历并读取文件夹中文件
Apr 29 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中array_rand函数的使用方法
2016/09/11 PHP
如何使用json在前后台进行数据传输实例介绍
2013/04/11 Javascript
javascript验证只能输入数字和一个小数点示例
2013/10/21 Javascript
javascript图片相似度算法实现 js实现直方图和向量算法
2014/01/14 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
jQuery on()方法示例及jquery on()方法的优点
2015/08/27 Javascript
JS中mouseover和mouseout多次触发问题如何解决
2016/06/06 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
JS 面向对象之继承---多种组合继承详解
2016/07/10 Javascript
概述如何实现一个简单的浏览器端js模块加载器
2016/12/07 Javascript
使用Angular缓存父页面数据的方法
2017/01/03 Javascript
原生js实现新闻列表展开/收起全文功能
2017/01/20 Javascript
swiper 解决动态加载数据滑动失效的问题
2018/02/26 Javascript
详解微信小程序调起键盘性能优化
2018/07/24 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
2020/06/02 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
vue+canvas实现拼图小游戏
2020/09/18 Javascript
Javascript文本框脚本实现方法解析
2020/10/30 Javascript
python用于url解码和中文解析的小脚本(python url decoder)
2013/08/11 Python
python编程实现12306的一个小爬虫实例
2017/12/27 Python
Django框架的使用教程路由请求响应的方法
2018/07/03 Python
基于DataFrame改变列类型的方法
2018/07/25 Python
python实现随机漫步算法
2018/08/27 Python
pycharm 实现显示project 选项卡的方法
2019/01/17 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
2020/02/11 Python
蔻驰法国官网:COACH法国
2018/11/14 全球购物
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
自我鉴定200字
2013/10/28 职场文书
会计专业毕业生求职信分享
2014/01/03 职场文书
企业法人授权委托书
2014/04/03 职场文书
行政执法作风整顿剖析材料
2014/10/11 职场文书
2014年党的群众路线整改措施思想汇报
2014/10/12 职场文书
2015年乡镇卫生院妇幼保健工作总结
2015/05/19 职场文书
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL
Python函数中apply、map、applymap的区别
2021/11/27 Python
Vue.js中v-bind指令的用法介绍
2022/03/13 Vue.js