机器学习数据划分笔记(train_test_split)

文章详细介绍了在拆分数据集为训练集和测试集时如何使用train_test_split函数,强调了保持数据分布一致性和随机种子的作用。random_state用于控制随机性,确保同样的设置能产生相同的数据分割。stratify参数用于处理类别不平衡问题,确保训练集和测试集中各类别的比例与原始数据相同。此外,文章还提出了将数据分为训练、交叉验证和测试集的建议,以更好地选择和评估模型。
摘要由CSDN通过智能技术生成

将数据集拆分为训练/测试集(一次)
抽样时要尽可能保持数据分布的一致性,避免引入额外的偏差。

X_train, X_test, y_train, y_test = model_selection.train_test_split(data, target, test_size, train_size, random_state, shuffle, stratify)

将列表、数组、矩阵或DataFrame随机拆分为训练集和测试集构成的元组(X_train, X_test, y_train, y_test)(若输入是稀疏的则返回scipy.sparse.csr_matrix,否则数据类型同输入)。
data、target是位置参数,分别为特征数组或矩阵、目标数组或矩阵。

test_size指定测试集的大小,小数则表示占比,整数表示样本量,缺失默认0.25。train_size指定训练集的大小。random_state指定随机数种子。

shuffle是否在拆分前先打乱原数据,为False时stratify必须为None。stratify是用来标识分层的数组作为分层抽样依据,为None时将按顺序拆分为训练和测试集。
一般将训练样本和测试样本分为8:2或7:3。更好的方式是将数据分为3份:训练集:交叉验证数据集:测试集=6:2:2(交叉验证数据集用于选择模型,测试集用于测试准确性,使选择模型与评价预测性能分开)。
原文链接:https://blog.csdn.net/fengsuiwoxing/article/details/87918035

1.random_state:随机数种子——其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如每次都为1,其他参数一样的情况下你得到的随机数组是一样的。当为None时,产生的随机数组也会是随机的。

随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:种子不同,产生不同的随机数;种子相同,即使实例不同也产生相同的随机数。

下面我们通俗的解释一下就是:

参数test_size:如果是浮点数,在0-1之间,表示test set的样本占比;如果是整数的话就表示test set样本数量。

test_size只是确定training set于test set的各自所占比例或者数量,并没有确定数据的划分规则。比如我们有数据集[1,2,3,4,5,6,7,8,9],我们确定test_size=3,那问题是我们应该取哪三个数作为test set呢,这时候就应该使用random_state来确定我们的划分规则,假设我们取random_state=1,它按一定的规则去取出我们的数据,当我们random_state=2时,它又换成另一种规则去取我们的数据,random_state的取值范围为0-2^32。当random_state=None时,可以理解为随机分配一个整数给random_state,这样就导致每次运行的结果都可能不同。

其他函数中的random_state参数功能是类似的。
原文链接:https://blog.csdn.net/perfect_accepted/article/details/81151952

结论: random_state的值相当于一种规则,通过设定为相同的数,每次分割的结果都是相同的

2.stratify:是为了保持split前类的分布。比如有100个数据,80个属于A类,20个属于B类。如果train_test_split(... test_size=0.25, stratify = y_all), 那么split之后数据如下: 
training: 75个数据,其中60个属于A类,15个属于B类。 
testing: 25个数据,其中20个属于A类,5个属于B类。 

用了stratify参数,training集和testing集的类的比例是 A:B= 4:1,等同于split前的比例(80:20)。通常在这种类分布不平衡的情况下会用到stratify。

将stratify=X就是按照X中的比例分配 

将stratify=y就是按照y中的比例分配

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值