课程简介
模型的泛化能力怎样,直接影响到模型在实际生产中的工作效果。我们对于算法学习中所用到的数据集的处理方法更是起着决定因素。为了提升模型的泛化能力,我们需要对数据集进行划分处理,即分成训练集和测试集。本节将介绍划分数据集的重要意义,以及怎样划分数据集,如何划分更好等等问题。
学习目标
了解训练集与测试集
了解如何划分训练集与测试集
了解如何更好地划分训练集与测试集
- %matplotlib inline
- import matplotlib.pyplot as plt
- import numpy as np
一、划分训练集与测试集
为了评估我们的监督模型的泛化能力怎样,我们可以将数据划分成一个训练集和一个测试集:
- from sklearn.datasets import load_iris
- from sklearn.neighbors import KNeighborsClassifier
- iris = load_iris()
- X, y = iris.data, iris.target
- classifier = KNeighborsClassifier()
思考机器学习的工作原理,有助于理解训练/测试数据划分想法的意义。真实世界的系统训练他们所拥有的数据,而对于其他数据来源(来自客户,传感器,或其他的来源),已经训练过的分类器必须在全新的数据集上进行预测。我们可以在训练期间使用训练/测试划分来模拟该过程 - 测试数据是在生产期间将进入系统的"未来数据"的模拟。
特别对于鸢尾花,鸢尾花中的150个标签是按类别进行排序的,这意味着如果我们使用某个比例来划分数据,这将导致从根本上改变类别分布。例如,如果我们采用普遍的2/3的训练数据和1/3的测试数据进行划分,我们的训练数据集将只包括类别为0和1(Setosa和Versicolor)的鸢尾花,我们的测试集将只包含类别标签为2(维吉尼亚鸢尾花)的样本。
假设所有样本都是相互独立的(对比时间序列数据),我们希望在划分数据集之前随机排列数据集。
- y
- from sklearn.model_selection import train_test_split
- train_X, test_X, train_y, test_y = train_test_split(X, y,
- train_size=0.5,
- test_size=0.5,
- random_state=123)
- print("Labels for training and testing data")
- print(train_y)
- print(test_y)
以上内容转自 数析学院,只节选了部分,有需要的同学可以直接查看原文