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之使用Python查询更新数据库
Nov 25 Python
Python中的time模块与datetime模块用法总结
Jun 30 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
Feb 14 Python
Python实用工具FuckIt.py介绍
Jul 02 Python
python把ipynb文件转换成pdf文件过程详解
Jul 09 Python
Python如何读取文件中图片格式
Jan 13 Python
Python while循环使用else语句代码实例
Feb 07 Python
Python 实现一行输入多个数字(用空格隔开)
Apr 29 Python
python3.7+selenium模拟淘宝登录功能的实现
May 26 Python
Pycharm 跳转回之前所在页面的操作
Feb 05 Python
python的scipy.stats模块中正态分布常用函数总结
Feb 19 Python
pytorch--之halfTensor的使用详解
May 24 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
图书管理程序(一)
2006/10/09 PHP
ThinkPHP3.0略缩图不能保存到子目录的解决方法
2012/09/30 PHP
详解PHP实现执行定时任务
2015/12/21 PHP
php arsort 数组降序排序详细介绍
2016/11/17 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
2018/06/20 PHP
jQuery powerFloat万能浮动层下拉层插件使用介绍
2010/12/27 Javascript
一样的table?不一样的table(可编辑状态table)
2012/09/19 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
2014/08/15 Javascript
js实现跨域的方法实例详解
2015/06/24 Javascript
解决JavaScript数字精度丢失问题的方法
2015/12/03 Javascript
javascript每日必学之多态
2016/02/23 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
2016/10/27 Javascript
VueJs路由跳转——vue-router的使用详解
2017/01/10 Javascript
简单实现js放大镜效果
2017/07/24 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
2017/07/31 Javascript
React Native模块之Permissions权限申请的实例相机
2017/09/28 Javascript
JavaScript事件对象event用法分析
2018/07/27 Javascript
今天,小程序正式支持 SVG
2019/04/20 Javascript
vue-cli3使用 DllPlugin 实现预编译提升构建速度
2019/04/24 Javascript
Typescript 中的 interface 和 type 到底有什么区别详解
2019/06/18 Javascript
Python入门篇之函数
2014/10/20 Python
Python环境下搭建属于自己的pip源的教程
2016/05/05 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
2019/07/01 Python
python flask web服务实现更换默认端口和IP的方法
2019/07/26 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
2020/03/30 Python
Selenium 安装和简单使用的实现
2020/12/04 Python
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
Linux上比较文件的命令都有哪些
2012/02/24 面试题
电脑销售顾问自荐信
2014/01/29 职场文书
公司市场专员岗位职责
2014/06/29 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
步步惊心观后感
2015/06/12 职场文书
2019年大学推荐信
2019/06/24 职场文书
导游词之沈阳植物园
2019/11/30 职场文书
MySQL数据库如何给表设置约束详解
2022/03/13 MySQL
springboot 自定义配置 解决Boolean属性不生效
2022/03/18 Java/Android