API详解:sklearn.model_selection.train_test_split

试想现在收手拿到了数据集,希望做有监督训练。 需要将数据集分成训练集和测试集。 你会怎么做?

rand一个不重复的序列,然后按照比例截断。按照序列找到对应的行数作为训练集或者数据集。好吧,你是按照np array的格式写的。万一来了个dataframe的格式。 嗯把他转换一下,要么就用iloc定个位。 可是万一数据集格式不确定呢?来了个list。 想想都烦躁是不是。

这时候,你需要一个划分数据集的好帮手。sklearn.model_selection.train_test_split
有了它,朋友们注意了:什么np.array,scipy-sparse matrices 或者 pd.dataframe 统统搞定

其调用方式为sklearn.model_selection.train_test_split(*arrays, options)

*arrays: 可以是lists, np.array,scipy-sparse matrices 或者pd.dataframe(很全有没有)

下面就是option里的内容

test_size: float 代表比例必须是[0,1]之间,代表测试集占总数据集的比例。也可以是int 代表测试集的实际数量。如果给的是None, 所有的集合都是训练集。 默认为0.25。 但是朋友们注意了在版本0.21之后,只有在train_size(下面会说明这个参数) 不确定的情况下是0.25,不然的话会用全部的集合当成训练集。

train_size:和上面的参数一样,只是这里设置的是训练集的比例或者数量

random_state: 个人理解是随机数种子,必须是int或则None, 指定相同的随机数种子可以确保每次划分的口径一致

shuffle: 是否重新洗牌,这个参数很有意思,默认为True,在这个情况下,你上面定义的随机数种子才会有用。随机的打乱数据排列, 然后选择。当用False的时候,就是按照数据输入的顺序划分。开头是训练集,末尾是测试集。如果shuffle=False,参数stratify必须是None

stratify: 时候按照一定的比例抽取样本,这个参数很神奇。默认的情况是None, 给值得时候是也很神奇,给的是一个标签序列。比如说,你将原数据集的y标签给入超参。那么随机抽取的样本是按照y标签内样本分布抽取的

举几个例子
通常调用

import sklearn 
import numpy as np
x=np.arange(10).reshape(5,2)
y=[1,0,0,0,1]
x_train,y_train,x_test,y_test=sklearn.model_selection.train_test_split(x,y,test_size= 0.3,random_state=2)
print(x_train)

结果是
array([[2, 3],
[6, 7],
[0, 1]])

如果使用shuffle

x_train,y_train,x_test,y_test=sklearn.model_selection.train_test_split(x,y,test_size= 0.3,random_state=2,shuffle=False)
print(x_train)

array([[0, 1],
[2, 3],
[4, 5]])
在这里random_state不起作用了

如果要求划分的集合按照输入y值得分布

x_train,y_train,x_test,y_test=sklearn.model_selection.train_test_split(x,y,test_size= 0.3,random_state=2,stratify=y)
print(x_train)

array([[4, 5],
[0, 1],
[6, 7]])

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值