首页 » python机器学习 » python机器学习全文在线阅读

《python机器学习》4.3 将数据集划分为训练数据集和测试数据集

关灯直达底部

在第1章和第3章中,我们简单介绍了将数据集划分为训练数据集和测试数据集的相关内容。请记住,我们可以将测试数据集理解为模型投诸于现实应用前的最终测试集。在本小节,我们准备了一个新的数据集,葡萄酒数据集(Wine dataset)。在完成数据集的预处理后,我们将探讨不同的特征选择技巧以降低数据集的维度。

葡萄酒数据集是另一个开源数据集,可以通过UCI机器学习样本数据库获得(https://archive.ics.uci.edu/ml/datasets/Wine),它包含178个葡萄酒样本,每个样本通过13个特征对其化学特征进行描述。

借助于pandas库,可以直接从UCI机器学习样本数据库中在线读取开源的葡萄酒数据集。

葡萄酒样本库通过13个不同的特征,对178个葡萄酒样本的化学特征做出描述,如下表:

这些样本属于类标分别为1、2、3的三个不同的类别,对应于三种生长在意大利不同地区的葡萄种类。

想要将此数据集随机划分为测试数据集和训练数据集,一个简便方法是使用scikit-learn下cross_validation子模块中的train_test_split函数:

首先,将NumPy数组中的第1~13个特征列赋值给变量X,将第1列中的类标赋值给变量y。然后,使用train_test_split函数随机地将X和y各自划分为训练数据集和测试数据集。设定test_size=0.3,可以将30%的样本划分到X_test和y_test,剩余的70%样本划分到X_train及y_train。

如果要将数据集划分为训练和测试数据集,必须牢记:尽量保留有价值的信息,这些信息将有利于训练机器学习算法。因此,我们一般不会为测试数据集分配太多的数据。不过,测试集越小,对泛化误差的估计将会越不准确。在对数据集进行划分时,需要对此进行权衡。在实际应用中,基于原始数据的大小,常用的划分比例是60:40、70:30,或者80:20。对于非常庞大的数据集,将训练集和测试集的比例按照90:10或者99:1进行划分也是常见且可以接受的。为了让模型获得最佳的性能,完成分类模型的测试后,通常在整个数据集上需再次对模型进行训练。