分别用numpy和pandas划分数据集以完成交叉验证_numpy实现机器学习交叉验证的数据划分-程序员宅基地

技术标签: 机器学习  python数据分析与挖掘  

先说个结论:使用numpy和pandas都可方便的使用sklearn的交叉验证函数cross_validation_score,但是pandas更好,可以用于更多的适应情况,比如自己写评估函数等。

一、numpy版本

# np.loadtxt读取label.csv(跳过表头),作为tmp_data
tmp_data = np.loadtxt("data.csv", delimiter=',', skiprows=1).astype(float)

如果你想提取一个同等列宽的表头,可以像下面这样做,但是我还没想到这样能做什么。所以,看看就好,下面与它无关。

# 提取表头
headLine = ["Unnamed"]
headLine.extend(pd.read_csv("data.csv", index_col=[0]).columns.tolist())
print(f"headLine:{headLine}")

此时打乱数据集比较随便,np.random.shuffle、sklearn.utils.shuffle都可以。

# 打乱数据集
from sklearn import utils
tmp_data = utils.shuffle(tmp_data)
print(f"tmp_data:\n{tmp_data}\nlen of tmp_data:{len(tmp_data)}")

k = 4  # k折
k_sample_count = tmp_data.shape[0] // k  # 每折多少行数据(这里使用整除)

# 根据k折,划分数据集
for fold in range(k):
    validation_begin = k_sample_count * fold
    validation_end = k_sample_count * (fold + 1)

    validation_data = tmp_data[validation_begin:validation_end]

    # np.vstack 沿着垂直的方向堆叠数据,拼接得到训练集
    train_data = np.vastack([
        tmp_data[:validation_begin],
        tmp_data[validation_end:]
    ])

二、pandas版本

1、自己手动划分数据集(好处是可以了解过程,以及适合自己写评估函数等)
(1)读取数据
# pandas读取
tmp_data  = pd.read_csv("data.csv", index_col=[0])	# 将data.csv的第一列作为索引
print(f"len of tmp_data:{len(tmp_data)}")
(2)打乱数据集

此时要 使用sklearn.utils.shuffle打乱数据集,用pandas自带的sample也可。但不能使用numpy.random.shuffle(),因为其不能用于处理string类型,但表头columns含有string类型!

from sklearn import utils
tmp_data = utils.shuffle(tmp_data)
print(f"tmp_data:\n{tmp_data}\nlen of tmp_data:{len(tmp_data)}")
(3)K折划分(划分之后比较自由,你既可以选择使用sklearn库,也可以自己写评估函数进行cross_validation)
k = 4  # k折
k_sample_count = tmp_data.shape[0] // k  # 每折多少行数据(这里使用整除)

# 根据k折,划分数据集
for fold in range(k):
    validation_begin = k_sample_count * fold
    validation_end = k_sample_count * (fold + 1)
	# 验证集(或者叫测试集)
    validation_data = tmp_data[validation_begin:validation_end]

    # 训练集,pd.concat 沿着垂直的方向堆叠数据,拼接得到训练集
    train_data = pd.concat([
        tmp_data[:validation_begin],
        tmp_data[validation_end:]
    ])
	# 重新索引(这一步可有可不有,看你自己情况,需要索引重新降序排列你就加)
    train_data.index = np.arange(len(train_data))
    validation_data.index = np.arange(len(validation_data))


    print(f"第{fold}折")  # f 代表format
    print(f"train_data:\n{train_data}, \nvalidation_data:\n{validation_data}")
    
	# 继续你的表演,你可以在这里写自己的评估函数
# 或者在这里使用sklearn.metrics.cross_validation_score处理你上面划分好的数据集。

2、sklearn.cross_validation.KFold划分数据集(好处是适合sklearn的cross_validation_score一条龙服务)

(参考链接:https://blog.csdn.net/weixin_38536057/article/details/78702564)

# K-fold进行数据分割
from sklearn.model_selection import KFold

kf = KFold(25, n_folds=5, shuffle=False)
# X是大的数据集
kf.split(X)
# print 每个训练集和测试集的内容
print '{} {:^61} {}'.format('Iteration', 'Training set observations', 'Testing set observations')
for iteration, (train, test) in enumerate(kf, start=1):
    print '{:^9} {} {:^25}'.format(iteration, train, test)
Iteration                   Training set observations                   Testing set observations
    1     [ 5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]        [0 1 2 3 4]       
    2     [ 0  1  2  3  4 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]        [5 6 7 8 9]       
    3     [ 0  1  2  3  4  5  6  7  8  9 15 16 17 18 19 20 21 22 23 24]     [10 11 12 13 14]     
    4     [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 20 21 22 23 24]     [15 16 17 18 19]     
    5     [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]     [20 21 22 23 24]     
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43469047/article/details/105092853

智能推荐

TSD相关的 4 个函数: pthread_key_create(); pthread_key_delete(); pthread_getspecific(); pthread_sets_pthread_key_delete pthread_key_create-程序员宅基地

文章浏览阅读1.4k次。在多线程程序中,经常要用全局变量来实现多个函数间的数据共享。由于数据空间是共享的,因此全局变量也为所有进程共有。但有时应用程序设计中必要提供线程私有的全局变量,这个变量仅在线程中有效,但却可以跨过多个函数访问。比如在程序里可能需要每个线程维护一个链表,而会使用相同的函数来操作这个链表,最简单的方法就是使用同名而不同变量地址的线程相关数据结构。这样的数据结构可以由 Posix 线程库维护,成_pthread_key_delete pthread_key_create

Traits技术-程序员宅基地

文章浏览阅读1.7k次。Traits技术traits=特性提取不同类的共性,统一处理依靠显示模板特殊化,把代码中因不同类型发生变化的片段提取出,用统一的接口来包装接口可以为c++类所能包含的任何东西客户通过traits模板类公开的接口来间接访问代码示例#include <iostream>using namespace std;class CIntArray{..._traits技术

使用python出现错误 urlopen error unknown url type: https 的解决办法-程序员宅基地

文章浏览阅读1.7w次。分析 这个错误和python的中ssl (Secure Sockets Layer,一种国际标准的加密与身份认证通讯协议)模块有一定关系,成功安装了ssl模块,就可以解决这个问题。解决方法 Windows系统和其他类Unix系统略有不同,但是都可以确认一下使用的python版本中是否安装了ssl模块,在python环境中使用以下命令查看已安装的模块..._urlopen error unknown url type

chrome浏览器88版本隐藏webdriver方法_哪个软件可以让webdriver不显示浏览器-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏2次。隐藏webdriver最近不小心把chrome浏览给升级了,然后前几天有用到selenium去访问某宝。就除了一些问题,,,然后找了半天原因,说是要把selenium中的webdriver属性给隐藏才行。然后跟着其他大佬的教程改了一下,大部分都是说在访问之前添加这句代码Object.defineProperty(navigator, 'webdriver', { get: () =>undefined })然后我跟着做,结果发现还是不能隐藏。然后我在虚拟机中尝试了一下,发现可以,结果是un_哪个软件可以让webdriver不显示浏览器

python123第三周答案_Python123第二周自由练习-程序员宅基地

文章浏览阅读490次,点赞2次,收藏3次。一、画五角星描述画一个五角星,画笔用黄色,用红色填充,效果如下所示。 ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬代码如下:#画五角星import turtleturtle.pensize(5)turtle.pencolor("yellow")turt..._绘制一组同心圆,如下图所示。三个圆的半径依次为20、40、60。画笔粗细为5,颜色为

软件测试工程师学习笔记8 - 入门篇-程序员宅基地

文章浏览阅读391次,点赞3次,收藏4次。软件测试工程师学习笔记 -8入门必读1. 测试基础2. 测试设计3. 缺陷管理4. 项目实战1) 项目介绍2) 项目功能测试3) 明确需求后如何开测4)案例编写入门必读基础入门目标五天结束,能独立完成功能测试过程。1. 测试基础详见软件测试工程师学习笔记 -42. 测试设计详见软件测试工程师学习笔记 -43. 缺陷管理详见软件测试工程师学习笔记 -5详见软件测试工程师学习笔记 -64. 项目实战HTML部分详见软件测试工程师学习笔记 -71) 项目介绍项目背

随便推点

一文了解Linux内核-程序员宅基地

文章浏览阅读5.6k次,点赞15次,收藏136次。本文来自 [https://www.ssdfans.com]目录什么是操作系统OS操作系统的的组成什么是内核kernel内核的操作内核的分类Linux操作系统Linux内核内核源码结构Linux内核与硬件的关系是什么使Linux内核与其他经典Unix内核不同?Linux内核架构Linux内核接口Linux可加载内核模块 (The Linux Loadable Kernel Module (LKM) )什么是操作系统OS操作系统(简称..._linux内核

Android事件分发机制_setonlicklistener-程序员宅基地

文章浏览阅读228次。Android事件分发机制一、Android分发机制概述: Android如此受欢迎,就在于其优秀的交互性,这其中,Android优秀的事件分发机制功不可没,那么,作为一个优秀的程序员,要想做一个具有良好交互性的应用,必须透彻理解Android的事件分发机制。 要想充分理解android的分发机制,需要先对以下几个知识点有所了解: 1、View_setonlicklistener

45个值得收藏的 CSS 形状(总结)_css 矩形大全-程序员宅基地

文章浏览阅读242次。CSS能够生成各种形状。正方形和矩形很容易,因为它们是 web 的自然形状。添加宽度和高度,就得到了所需的精确大小的矩形。添加边框半径,你就可以把这个形状变成圆形,足够多的边框半径,你就可以把这些矩形变成圆形和椭圆形。我们还可以使用 CSS 伪元素中的::before和::after,这为我们提供了向原始元素添加另外两个形状的可能性。通过巧妙地使用定位、转换和许多其他技巧,我们可以只用一个 HTML 元素在 CSS 中创建许多形状。虽然我们现在大都使用字体图标或者svg图片,似乎使用 CSS ..._css 矩形大全

POJ二分匹配总结_匈牙利算法_poj f = 2*n + n*logn-程序员宅基地

文章浏览阅读3.2k次。二分匹配模板bool makepair(int t){ int i; for(i=1;i<=n;i++) { if(path[t][i]==1 && visited[i]==0) //i号男还没被需要并且和t号女互相喜欢 { visited[i]=1; //被t号女需要 if(match[i]==-1_poj f = 2*n + n*logn

JavaScript 输出--显示数据方式_js输出显示数字答案-程序员宅基地

文章浏览阅读2.3k次。1、使用 window.alert() 弹出警告框。例:&lt;script&gt;window.alert(5 + 6);&lt;/script&gt;2、使用 document.write() 方法将内容写到 HTML 文档中。例:&lt;script&gt;document.write(Date());&lt;/script&gt;3.使用 innerHTML 写入到 HTML 元..._js输出显示数字答案

IBM深陷云计算业务欺诈丑闻,遭股东集体诉讼-程序员宅基地

文章浏览阅读7.3k次。数据智能产业创新服务媒体——聚焦数智· 改变商业1997年,俄罗斯国际象棋大师加里·卡斯帕罗夫(Garry Kasparov)输给了人工智能深蓝(Deep Blue),人类不敌机器的消息迅速传播开来,公众震惊、恐慌之余,人工智能的新时代已然到来。深蓝背后的IBM,是美国标志性的科技企业,从机械制表机到个人计算机、人工智能,IBM曾多次引领技术革命,被外界冠以“蓝色巨人”..._ibm 数据 造假

推荐文章

热门文章

相关标签