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冒泡排序简单实现方法
Jul 09 Python
python通过socket查询whois的方法
Jul 18 Python
对Python的zip函数妙用,旋转矩阵详解
Dec 13 Python
Python Pillow Image Invert
Jan 22 Python
python的pyecharts绘制各种图表详细(附代码)
Nov 11 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
Mar 23 Python
解决pycharm下pyuic工具使用的问题
Apr 08 Python
Python API 操作Hadoop hdfs详解
Jun 06 Python
Python爬虫代理池搭建的方法步骤
Sep 28 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
Mar 04 Python
关于Numpy之repeat、tile的用法总结
Jun 02 Python
Python实现列表拼接和去重的三种方式
Jul 02 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 get_headers 判断URL是否有效的解决办法
2013/04/27 PHP
CentOS6.5 编译安装lnmp环境
2014/12/21 PHP
100行PHP代码实现socks5代理服务器
2016/04/28 PHP
jquery.qrcode在线生成二维码使用示例
2013/08/21 Javascript
eclipse导入jquery包后报错的解决方法
2014/02/17 Javascript
javascript实现图像循环明暗变化的方法
2015/02/25 Javascript
js实现防止被iframe的方法
2015/07/03 Javascript
JS实现灵巧的下拉导航效果代码
2015/08/25 Javascript
js实现跨域的几种方法汇总(图片ping、JSONP和CORS)
2015/10/25 Javascript
JavaScript中匿名函数的用法及优缺点详解
2016/06/01 Javascript
在JavaScript中调用Java类和接口的方法
2016/09/07 Javascript
js无提示关闭浏览器窗口的两种方法分析
2016/11/06 Javascript
Vue.js基础知识小结
2017/01/13 Javascript
canvas的神奇用法
2017/02/03 Javascript
微信小程序实战之轮播图(3)
2017/04/17 Javascript
JS 中使用Promise 实现红绿灯实例代码(demo)
2017/10/20 Javascript
layui获取选中行数据的实例讲解
2018/08/19 Javascript
JavaScript如何处理移动端拍摄图片旋转问题
2019/11/16 Javascript
[01:01:18]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#2COL VS LGD
2016/03/03 DOTA
python网络编程之数据传输UDP实例分析
2015/05/20 Python
使用Python设计一个代码统计工具
2018/04/04 Python
matplotlib subplots 调整子图间矩的实例
2018/05/25 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
python合并已经存在的sheet数据到新sheet的方法
2018/12/11 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
英国豪华家具和家居用品购物网站:Teddy Beau
2020/10/12 全球购物
平面设计师工作职责范文
2013/12/03 职场文书
工地例会施工汇报材料
2014/08/22 职场文书
青年岗位能手事迹材料
2014/12/23 职场文书
死亡赔偿协议书
2015/01/28 职场文书
投资公司董事长岗位职责
2015/04/16 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书
诚信教育主题班会
2015/08/13 职场文书
宣传部部长竞选稿
2015/11/21 职场文书
R9700摩机记
2022/04/05 无线电
NoSQL优缺点与MongoDB数据库简介
2022/06/05 MongoDB