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 Web程序部署到Ubuntu服务器上的方法
Feb 22 Python
Python使用xlwt模块操作Excel的方法详解
Mar 27 Python
python中datetime模块中strftime/strptime函数的使用
Jul 03 Python
基于python实现聊天室程序
Jul 27 Python
Python实现将Excel转换成xml的方法示例
Aug 25 Python
Python函数中参数是传递值还是引用详解
Jul 02 Python
Django中的静态文件管理过程解析
Aug 01 Python
python字典通过值反查键的实现(简洁写法)
Sep 30 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
Nov 18 Python
python3处理word文档实例分析
Dec 01 Python
python中count函数知识点浅析
Dec 17 Python
Python使用scapy模块发包收包
May 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
php5 and xml示例
2006/11/22 PHP
php一些公用函数的集合
2008/03/27 PHP
php记录代码执行时间(实现代码)
2013/07/05 PHP
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
2017/04/19 PHP
PHP substr()函数参数解释及用法讲解
2017/11/23 PHP
JavaScript Event学习第二章 Event浏览器兼容性
2010/02/07 Javascript
document.getElementById方法在Firefox与IE中的区别
2010/05/18 Javascript
node+express+ejs制作简单页面上手指南
2014/11/26 Javascript
javascript使用正则表达式检测IP地址
2014/12/03 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
2015/03/13 Javascript
js中利用tagname和id获取元素的方法
2016/01/03 Javascript
js+css实现select的美化效果
2016/03/24 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
js中window.open的参数及注意注意事项
2016/07/06 Javascript
Google 地图API Map()构造器详解
2016/08/06 Javascript
IntersectionObserver API 详解篇
2016/12/11 Javascript
js仿小米手机上下滑动效果
2017/02/05 Javascript
微信扫码支付零云插件版实例详解
2017/04/26 Javascript
Angular 4依赖注入学习教程之简介(一)
2017/06/04 Javascript
ExtJs使用自定义插件动态保存表头配置(隐藏或显示)
2018/09/25 Javascript
Vue项目查看当前使用的elementUI版本的方法
2018/09/27 Javascript
layui前端时间戳转化实例
2019/11/15 Javascript
node.js事件轮询机制原理知识点
2019/12/22 Javascript
用Python展示动态规则法用以解决重叠子问题的示例
2015/04/02 Python
python使用WMI检测windows系统信息、硬盘信息、网卡信息的方法
2015/05/15 Python
Python自动化运维和部署项目工具Fabric使用实例
2016/09/18 Python
使用python爬虫实现网络股票信息爬取的demo
2018/01/05 Python
Python使用SQLite和Excel操作进行数据分析
2018/01/20 Python
keras自定义损失函数并且模型加载的写法介绍
2020/06/15 Python
使用keras内置的模型进行图片预测实例
2020/06/17 Python
python3中TQDM库安装及使用详解
2020/11/18 Python
sort命令的作用和用法
2012/11/04 面试题
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
2016/01/12 面试题
群教班子对照检查材料
2014/08/26 职场文书
学术研讨会主持词
2015/07/04 职场文书
课文《燕子》教学反思
2016/02/17 职场文书