问题描述:
一般情况下, 我们习惯将原始数据中的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) * test_ratio)test_indices = shuffled_indices[:test_set_size]train_indices = shuffled_indices[test_set_size:]return data.iloc[train_indices], data.iloc[test_indices]

方法3 对应代码如下:

# 划分训练集和测试集 - 方法三
# 目前被选为测试集的数据,再数据增加之后, 要保证也不会被选择为训练集
# 可以根据某个稳定的特征来创建唯一的标识符,比如id
def test_set_check(identifier, test_ratio):return crc32(np.int64(identifier)) & 0xffffffff < test_ratio * 2 ** 32def split_train_test_by_id(data, test_ratio, id_column):ids = data[id_column]in_test_set = ids.apply(lambda id_: test_set_check(id_, test_ratio))return data.loc[~in_test_set], data.loc[in_test_set]

问题描述:
比如我们想要做一次抽样调查,已知人口中男女比例为47% : 53%, 那么我们的抽样数据中的男女比例也需要保持这样的比例,上述的随机抽样方式显然不满满足这个需求。将人口划分为均匀子集,每个子集称为一层,然后从每层抽取正确的数据量,以确保测试集代表了总的人口比例,这个过程就是分层抽样

# 比如下面预测房价的例子,我们已知收入和房价强相关,但是收入是连续值,我们先将收入数据划分为5档。
from matplotlib import pyplot as plt
housing['income_cat'] = pd.cut(housing['median_income'], bins=[0., 1.5, 3.0, 4.5, 6., np.inf], labels=[1, 2, 3, 4, 5])  # 将收入数据划分为5档
housing['income_cat'].hist()  # 画出直方图
plt.show()# n_splits=1 表示分成1份, 测试集大小为20%, random_state=42 保证每次训练模型产生的测试集和训练集都不变
split = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
for train_index, test_index in split.split(housing, housing['income_cat']):  # 根据收入类别进行分类strat_train_set = housing.loc[train_index]strat_test_set = housing.loc[test_index]# 查看测试集中收入类别比例分布
print('分层抽样的收入类别比例分布:')
print(strat_test_set['income_cat'].value_counts() / len(strat_test_set))print('原数据中收入类别的比例分布:')
print(housing['income_cat'].value_counts() / len(housing))

可以看到执行分层抽样后各个收入类别的比例和原始数据一致

分层抽样的收入类别比例分布:
3    0.350533
2    0.318798
4    0.176357
5    0.114583
1    0.039729
Name: income_cat, dtype: float64
原数据中收入类别的比例分布:
3    0.350581
2    0.318847
4    0.176308
5    0.114438
1    0.039826
Name: income_cat, dtype: float64

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

  1. Scikit-learn API:train_test_split函数 将数据分割为训练集和测试集

    函数原型 sklearn.model_selection.train_test_split(*arrays, **options) 函数功能 将数组或矩阵随机的分割成训练集和测试集,注意这里是随机的. ...

  2. R语言实现数据抽样创建训练集和测试集

    主要参考<数据挖掘:R语言实战>(黄文,王正林编著) 在收集数据过程中,绝大多数情况下,并不采取普查的方式获取总体中所有样本的数据信息,而是以各类抽样方法抽取其中若干代表性样本来进行数据获 ...

  3. 处理训练集和测试集分布同的方法(对抗训练)

    https://www.kaggle.com/c/santander-value-prediction-challenge 在kaggle该题中,需要通过所给的匿名变量来预测target值 featu ...

  4. python机器学习 train_test_split()函数用法解析及示例 划分训练集和测试集 以鸢尾数据为例 入门级讲解

    文章目录 train_test_split()用法 获取数据 划分训练集和测试集 完整代码脚手架 train_test_split()用法 python机器学习中常用 train_test_split ...

  5. 机器学习中训练集和测试集归一化(matlab版)

    转载自   https://blog.csdn.net/lkj345/article/details/50352385 背景介绍: 归一化后加快了梯度下降求最优解的速度,归一化有可能提高精度. 训练集 ...

  6. 5.sklearn之转换器(划分训练集和测试集、以及标准化、归一化数据会用transform,独热编码也会用到)

    文章目录 1. 什么是转换器? 2. 测试集和训练集 2.1 训练集 .测试集.验证集 2.2 拆分训练集测试集有个问题 2.3 代码 3. 标准化 3.1 上离差标准化代码(举一反三就好了,其他几个 ...

  7. fgvc-aircraft-2013b飞机细粒度数据训练集和测试集划分python代码

    fgvc-aircraft-2013b是细粒度图像分类和识别研究中经典的benchmarks,它包含四种类型的标注: (1)按照manufacturer进行划分,可分为30个类别,例如ATR.Airb ...

  8. 31,32,33_过拟合、欠拟合的概念、L2正则化,Pytorch过拟合欠拟合,交叉验证-Train-Val-Test划分,划分训练集和测试集,K-fold,Regularization

    1.26.过拟合.欠拟合及其解决方案 1.26.1.过拟合.欠拟合的概念 1.26.1.1.训练误差和泛化误差 1.26.1.2.验证数据集与K-fold验证 1.26.1.3.过拟合和欠拟合 1.2 ...

  9. oxford5k和paris6k数据集介绍_sklearn函数:KFold(分割训练集和测试集)

    上一篇介绍了train_test_split函数: 橘猫吃不胖:sklearn函数:train_test_split(分割训练集和测试集)​zhuanlan.zhihu.com 主要场景是,我们想要将 ...

最新文章

  1. SpringBoot常见功能特性分析
  2. 阿里P7/P8学习路线图——技术封神之路
  3. Feign从配置文件中读取url
  4. 阿里云 centos mysql_在阿里云的CentOS环境中安装配置MySQL的教程
  5. 这就是数据分析之数据集成
  6. 嵌入式操作系统内核原理和开发(基础)
  7. Maven错误:“No goals have been specified for this build...”问题解决
  8. PHP连接MYSQL出现乱码的原因与解决方法
  9. IIS6.0系统日志中出现此错误Timer_MinBytesPerSecond,Timer_ConnectionIdle
  10. 爬虫python下载视频_利用python爬虫通过m3u8文件下载ts视频
  11. matlab怎样设置中文界面
  12. 【Redis 开发与运维】总结篇
  13. 超全!0基础程序员从入门到工作(持续更新...)
  14. 电压跟随器的问答汇总
  15. MarkText常用快捷键
  16. STM32+W25QXX实现模拟U盘-HAL库
  17. 中兴oltc320用户手册_中兴OLT常用命令
  18. Echarts图表及数据刷新问题
  19. 滚动条自动显示和隐藏
  20. iOS 冰与火之歌 - 利用 XPC 过 App 沙盒

热门文章

  1. 百度云盘API文件上传参数详解
  2. 轩小陌的Python笔记-day26 必备SQL语句、表关系及授权
  3. 华为云发布代码检查服务;微软向其美国雇员提供“无限制”休假时间;付费版 ChatGPT|极客头条
  4. MySQL如何配置环境
  5. 美容美发美甲店做活动效果提升30%的营销方案18个套路
  6. npm安装慢 ,卡在sill idealTree buildDeps不动
  7. 15 个 “高效实用” 的Python工具库!
  8. 3万元微型电动车,能否成为蔚来的“回港”利器?
  9. Linux根目录下各目录的作用
  10. 高通量测序数据分析:RNA-seq