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 09 Python
python中OrderedDict的使用方法详解
May 05 Python
Python版名片管理系统
Nov 30 Python
Python3 修改默认环境的方法
Feb 16 Python
python制作简单五子棋游戏
Jun 18 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
Aug 08 Python
django实现支付宝支付实例讲解
Oct 17 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
Jan 18 Python
pygame实现弹球游戏
Apr 14 Python
Python获取浏览器窗口句柄过程解析
Jul 25 Python
python利用 keyboard 库记录键盘事件
Oct 16 Python
7个关于Python的经典基础案例
Nov 07 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数组函数序列 之shuffle()和array_rand() 随机函数使用介绍
2011/10/29 PHP
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
2014/08/25 PHP
php中数组最简单的使用方法
2020/12/27 PHP
比较全的JS checkbox全选、取消全选、删除功能代码
2008/12/19 Javascript
javascript IFrame 强制刷新代码
2009/07/23 Javascript
JavaScript中也使用$美元符号来代替document.getElementById
2010/06/19 Javascript
jquery表格内容筛选实现思路及代码
2013/04/16 Javascript
JQuery 获取json数据$.getJSON方法的实例代码
2013/08/02 Javascript
js跑步算法的实现代码
2013/12/04 Javascript
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
2014/01/07 Javascript
深入浅析AngularJS中的module(模块)
2016/01/04 Javascript
js实现股票实时刷新数据案例
2017/05/14 Javascript
AngularJS实现图片上传和预览功能的方法分析
2017/11/08 Javascript
Vue shopCart 组件开发详解
2018/01/26 Javascript
微信小程序icon组件使用详解
2018/01/31 Javascript
基于js中的存储键值对以及注意事项介绍
2018/03/30 Javascript
Vue使用Proxy监听所有接口状态的方法实现
2019/06/07 Javascript
JavaScript学习教程之cookie与webstorage
2019/06/23 Javascript
JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法
2021/01/29 Javascript
python中set()函数简介及实例解析
2018/01/09 Python
python实现word 2007文档转换为pdf文件
2018/03/15 Python
在pycharm中python切换解释器失败的解决方法
2018/10/29 Python
python 实现查找文件并输出满足某一条件的数据项方法
2019/06/12 Python
python多线程共享变量的使用和效率方法
2019/07/16 Python
Python使用type关键字创建类步骤详解
2019/07/23 Python
基于Python和PyYAML读取yaml配置文件数据
2020/01/13 Python
警校毕业生自我评价
2014/04/06 职场文书
《风娃娃》教学反思
2014/04/19 职场文书
环保志愿者活动总结
2014/06/27 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
2019求职信大礼包
2019/05/15 职场文书
经典法律座右铭(50句)
2019/08/15 职场文书
Vue实现跑马灯样式文字横向滚动
2021/11/23 Vue.js
《总之就是很可爱》新作短篇动画《总之就是很可爱~制服~》将于2022年夏天播出
2022/04/07 日漫
SQL Server的存储过程与触发器以及系统函数和自定义函数
2022/04/10 SQL Server