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脚本实现统计日志文件中的ip访问次数代码分享
Aug 06 Python
python继承和抽象类的实现方法
Jan 14 Python
一个基于flask的web应用诞生(1)
Apr 11 Python
python计算auc指标实例
Jul 13 Python
分享一下如何编写高效且优雅的 Python 代码
Sep 07 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
Sep 24 Python
Python虚拟环境项目实例
Nov 20 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
Oct 23 Python
利用Pycharm断点调试Python程序的方法
Nov 29 Python
利用Pytorch实现简单的线性回归算法
Jan 15 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
Mar 01 Python
Python实现为PDF去除水印的示例代码
Apr 03 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
ThinkPHP之用户注册登录留言完整实例
2014/07/22 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
2014/12/22 PHP
PHP实现一维数组转二维数组的方法
2015/02/25 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
Javacript实现颜色梯度变化和渐变的效果代码
2013/05/31 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
jQuery实现的右下角广告窗体跟随效果示例
2016/09/16 Javascript
如何理解jQuery中的ajaxSubmit方法
2017/03/13 Javascript
JS实现简易换图时钟功能分析
2018/01/04 Javascript
浅谈Node 调试工具入门教程
2018/03/20 Javascript
vue + element-ui的分页问题实现
2018/12/17 Javascript
Layui选项卡制作历史浏览记录的方法
2019/09/28 Javascript
详解如何修改 node_modules 里的文件
2020/05/22 Javascript
微信小程序实现多选框功能的实例代码
2020/06/24 Javascript
[28:07]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第二场 12.13
2020/12/17 DOTA
numpy基础教程之np.linalg
2019/02/12 Python
python_mask_array的用法
2020/02/18 Python
Python换行与不换行的输出实例
2020/02/19 Python
python用tkinter实现一个gui的翻译工具
2020/10/26 Python
python3.8.3安装教程及环境配置的详细教程(64-bit)
2020/11/28 Python
boostrap modal 闪现问题的解决方法
2020/09/01 HTML / CSS
阿里巴巴国际站:Alibaba.com
2016/07/21 全球购物
瑞贝卡·泰勒官方网站:Rebecca Taylor
2016/09/24 全球购物
Spartoo荷兰:鞋子、包包和服装
2018/07/12 全球购物
Fresh馥蕾诗英国官网:法国LVMH集团旗下高端天然护肤品牌
2018/11/01 全球购物
如何写出高性能的JSP和Servlet
2013/01/22 面试题
上级检查欢迎词
2014/01/18 职场文书
房地产推广策划方案
2014/05/19 职场文书
运动会加油口号
2014/06/07 职场文书
2015年招聘工作总结
2014/12/12 职场文书
2015年党员承诺书
2015/01/21 职场文书
公司慰问信范文
2015/03/23 职场文书
小学体育课教学反思
2016/02/16 职场文书
拒绝盗图!教你怎么用python给图片加水印
2021/06/04 Python
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫