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之从if开始语句的征程
Sep 14 Python
跟老齐学Python之不要红头文件(2)
Sep 28 Python
初步理解Python进程的信号通讯
Apr 09 Python
Python基于Tkinter的HelloWorld入门实例
Jun 17 Python
python画出三角形外接圆和内切圆的方法
Jan 25 Python
TensorFlow实现随机训练和批量训练的方法
Apr 28 Python
Django实战之用户认证(初始配置)
Jul 16 Python
Python3.5 处理文本txt,删除不需要的行方法
Dec 10 Python
python退出命令是什么?详解python退出方法
Dec 10 Python
python三引号输出方法
Feb 27 Python
Python 实现交换矩阵的行示例
Jun 26 Python
python实现横向拼接图片
Mar 23 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
文件上传之SWFUpload插件(代码)
2015/07/30 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
2017/10/13 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
用 Javascript 验证表单(form)中的单选(radio)值
2009/09/08 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
JavaScript编程中的Promise使用大全
2015/07/28 Javascript
jQuery版本升级踩坑大全
2016/01/12 Javascript
JS修改地址栏参数实例代码
2016/06/14 Javascript
javascript 动态样式添加的简单实现
2016/10/11 Javascript
Vue2.0父子组件传递函数的教程详解
2017/10/16 Javascript
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
webpack4+express+mongodb+vue实现增删改查的示例
2018/11/08 Javascript
jQuery实现倒计时功能完整示例
2020/06/01 jQuery
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
Python解析nginx日志文件
2015/05/11 Python
Python随机生成带特殊字符的密码
2016/03/02 Python
Python脚本实现Web漏洞扫描工具
2016/10/25 Python
Python利用BeautifulSoup解析Html的方法示例
2017/07/30 Python
python实现m3u8格式转换为mp4视频格式
2018/02/28 Python
超简单使用Python换脸实例
2019/03/27 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
2019/07/28 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
2021/01/05 Python
HTML5 CSS3给网站设计带来出色效果
2009/07/16 HTML / CSS
科沃斯机器人官网商城:Ecovacs
2016/08/29 全球购物
服装设计专业毕业生推荐信
2013/11/09 职场文书
大专应届生个人的自我评价
2013/11/21 职场文书
2014年国培研修感言
2014/03/09 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
2015年妇产科工作总结
2015/05/18 职场文书
离婚起诉书范本
2015/05/18 职场文书
郭明义电影观后感
2015/06/08 职场文书
董事长助理工作总结2015
2015/07/23 职场文书
python 三边测量定位的实现代码
2021/04/22 Python
超外差式晶体管收音机的组装与统调
2021/04/22 无线电
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python
python中的3种定义类方法
2021/11/27 Python