数据集划分办法基于sklearn

本文介绍了机器学习中数据集划分的三种方法:留出法、交叉验证法和自助法。强调了保持训练、测试集合分布一致的重要性,以及在划分过程中应注意的问题,如样本分布、随机种子和避免交集。最后提到了sklearn库中相关函数的应用。

机器学习中的一个必要问题就是模型评估。因此就需要划分训练集和测试集。

数据集划分有三种方式:留出法(hold-out)、交叉验证法(cross-validation)、自助法(bootstrapping)

留出法: 顾名思义单独留出一部分作为测试集合,并且两个集合互斥。极端情况就是留一法,在样本不足的时候可以考虑使用,否者计算开销太大。
实现 : sklearn.model_selection中的LeaveOneOut,LeavePOut

交叉验证法: 将训练集分成k折,每次取一折作为测试集,其余作为训练集。
实现 : sklearn.model_selection中的KFold,StratifiedKFold

自助法: 有放回的采样n个样本,n为数据集的大小。从概率上讲,大约会有三分一的样本未被采到,可以将未被采到的部分做为测试集,称之为”包外估计“。显然这种方法改变了数据分布,所以用的较少。
实现 : sklearn没有独立的划分实现,但是某些算法对bootstrap进行了支持,例如随机森林。

划分训练集和样本集合需要考虑的几个问题:

  • 通常都需要保持训练、测试集合的分布与数据分布相一致。原因之一:试想如果两者分布不一致,而算法采用的又是朴素贝叶斯之类的,这样做的估计都是有偏差的,效果自然不好。第二:如果正例样本相对反例样本来说,占比很少。再经过随机抽样,那么训练样本中的正例更是少的可怜,可能就被分类器忽略掉了。
  • 打散样本集合。为了避免训练顺序上某类样本总是先于其他类样本。
  • 有时会需要固定随机种子,以保证再次运行得到的样本集都是相同的。避免多次运行能看到所有的样本。
  • 训练集和测试集如果有交集,那么模型的评估就不可靠。可以看作是一种overfitting

最后引一下sklearn中关于数据划分的函数
在这里插入图片描述
在这里插入图片描述

  • 带Stratified表示分层抽样,即保持样本集合的分布一致。
  • 带Shuffle表示将会打乱样本顺序进行划分。
  • 带Group的表示划分以组为单位(要求组数大于折数),使用时需要传入样本集合的分组编号,组编号相同的一类样本将不会被拆分到两个集合中。(虽然我也不知道这个的需求在哪里)

参考:
1、西瓜书
2、scikit-learn官方文档(Release 0.20.1)

ps…作者认知有限,如有错误或者疑问请留言联系我,谢谢阅读。

### 如何在 Jupyter Notebook 中使用 sklearn 对鸢尾花数据集进行训练集和测试集的数据划分 要在 Jupyter Notebook 中完成对鸢尾花数据集的训练集和测试集划分,可以按照以下方法实现: #### 数据准备与导入 首先需要导入必要的模块并加载鸢尾花数据集。以下是具体的代码示例: ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # 加载鸢尾花数据集 iris = load_iris() X = iris.data # 特征矩阵 y = iris.target # 标签向量 ``` 上述代码通过 `load_iris()` 函数获取了鸢尾花数据集,并将其划分为特征矩阵 `X` 和标签向量 `y`[^1]。 #### 训练集与测试集划分 接着可以通过 `train_test_split` 方法来分割数据集为训练集和测试集。通常情况下会指定一个比例来进行划分,例如常见的 8:2 或者其他自定义的比例。下面展示了一个具体实例: ```python # 将数据按 8:2 的比例划分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) print(f"训练集大小:{len(X_train)}") print(f"测试集大小:{len(X_test)}") ``` 这里设置了参数 `test_size=0.2` 表明有 20% 的数据被分配到测试集中;同时设置 `random_state=42` 是为了保证每次运行程序时得到相同的结果以便于调试或验证模型性能的一致性。 以上就是在 Jupyter Notebook 环境下基于 sklearn 库完成鸢尾花数据集拆分操作的方法说明[^2]。 #### 完整代码示例 将前面提到的内容组合起来形成完整的脚本如下所示: ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # 加载鸢尾花数据集 iris = load_iris() X = iris.data y = iris.target # 划分数据集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 输出各部分尺寸信息 print(f"原始数据集大小:{len(iris.data)}") print(f"训练集大小:{len(X_train)}") print(f"测试集大小:{len(X_test)}") ``` 此段代码不仅实现了基本功能还增加了额外的信息打印语句帮助理解整个过程中的各个阶段所涉及的数据规模变化情况[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值