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程序中解析并修改XML内容的方法
Nov 16 Python
深入解析Python设计模式编程中建造者模式的使用
Mar 02 Python
python中redis的安装和使用
Dec 04 Python
python实现自动登录
Sep 17 Python
浅谈django三种缓存模式的使用及注意点
Sep 30 Python
利用Python实现kNN算法的代码
Aug 16 Python
Django中提示消息messages的设置方式
Nov 15 Python
python绘制随机网络图形示例
Nov 21 Python
Python Celery多队列配置代码实例
Nov 22 Python
Tensorflow:转置函数 transpose的使用详解
Feb 11 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
Apr 27 Python
virtualenv介绍及简明教程
Jun 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
PHP MYSQL乱码问题,使用SET NAMES utf8校正
2009/11/30 PHP
PHP中extract()函数的定义和用法
2012/08/17 PHP
php教程之phpize使用方法
2014/02/12 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
php mysql_list_dbs()函数用法示例
2017/03/29 PHP
PHP实现负载均衡下的session共用功能
2018/04/17 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
2018/06/01 PHP
php基于协程实现异步的方法分析
2019/07/17 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
2019/12/13 PHP
google地图的路线实现代码
2009/08/20 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
2014/05/19 Javascript
jQuery响应鼠标事件并隐藏与显示input默认值
2014/08/24 Javascript
使用yeoman构建angular应用的方法
2017/08/14 Javascript
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
vue-cli axios请求方式及跨域处理问题
2018/03/28 Javascript
vue加载完成后的回调函数方法
2018/09/07 Javascript
vue在自定义组件中使用v-model进行数据绑定的方法
2019/03/25 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
学习python (1)
2006/10/31 Python
Python ORM框架SQLAlchemy学习笔记之关系映射实例
2014/06/10 Python
Python编程实现生成特定范围内不重复多个随机数的2种方法
2017/04/14 Python
python合并同类型excel表格的方法
2018/04/01 Python
Python数据可视化教程之Matplotlib实现各种图表实例
2019/01/13 Python
python3-flask-3将信息写入日志的实操方法
2019/11/12 Python
Scrapy框架基本命令与settings.py设置
2020/02/06 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
详解HTML5常用的语义化标签
2019/09/27 HTML / CSS
数以千计的折扣工业产品:ESE Direct
2018/05/20 全球购物
大学生年度自我鉴定
2013/10/31 职场文书
实习协议书范本
2014/04/22 职场文书
还款承诺书范文
2014/05/20 职场文书
个人贷款收入证明
2014/10/26 职场文书
写给同学的新学期寄语
2015/02/27 职场文书
2016年社会主义核心价值观心得体会
2016/01/21 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL