[机器学习笔记] 将数据拆分成训练集和测试集的几种方法

本文介绍了在机器学习中如何合理地划分训练集和测试集,包括固定比例切分、设置random_state、使用哈希策略以及分层抽样的方法,以确保模型的泛化能力和样本代表性。
摘要由CSDN通过智能技术生成

问题描述:
一般情况下, 我们习惯将原始数据中的80% 作为训练集, 20% 作为测试集(当数据量足够大的时候,也可以将10% 作为测试集。 数据量较小时,如果每次都是随机划分训练集,执行多次训练后,模型可能就获取了完成是数据集。这是我们想要避免的。

解决上述的问题的方案有以下几种:

  1. 将第一次运行产生的测试集和训练集保存,后续训练时,先加载保存的训练集和测试集数据
  2. 设置 random_state, 保证每次分配的测试集相同
  3. 上述两种方法,当原始数据集增加后,仍然会出现测试数据和训练数据混合的问题,所以当原始数据集会不断增加时,可以将数据集中的某个字段转换成标识符,再将标识符转成哈希值,如果哈希值 < 最大哈希值 * 20%, 则将放入测试集

方法 2 对应代码如下:

from sklearn.model_selection import train_test_split
# 设置测试集大小为20%的原始数据, 设置random_state可以保证每次执行训练时,拆分得到的训练集和测试集都相同, random_state 可以设置成任意整数,只要每次训练使用的值相同即可
train_test_split(data, test_size=0.2, random_state=42)

或者使用numpy 生成随机的无序序列,来划分测试集和训练集

def split_train_test(data, test_ratio):
    np.random.seed(42)
    shuffled_indices = np.random.permutation(len(data))  # 生成和原数据等长的无序索引
    test_set_size = int(len(data) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值