数据集划分
前提:机器学习就是从数据中自动分析获得规律,并利用规律对未知数据进行预测。换句话说,我们的模型一定是要经过样本数据对其进行训练,才可以对未知数据进行预测的。
问题:我们得到数据后,是否将数据全部用来训练模型呢?
当然不是!因为我们如果模型(数据的规律)都是从数据中得来的,那么该模型的性能评估如何进行呢?还是基于对原先的数据进行预测吗?可想不是的,如果模型对原先的数据进行预测,由于模型(数据的规律)本来就是从该数据中获取的,所以预测的精度几乎会是百分之百。所以想要评估模型的好坏,需要使用一组新数据对模型进行评估。
因此我们往往需要将原先的样本数据拆分成两部分:
- 训练集:训练模型
- 测试集:评估模型
- 不同类型的模型对应的评估方式是不一样的
数据集划分的 API
from sklearn.model_selection import train_test_split
train_test_split(x,y,test_size,random_state)
参数介绍:- x:特征
- y:目标
- test_size:测试集的比例
- random_state:打乱的随机种子
- 返回值:训练特征,测试特征,训练目标,测试目标
数据集接口
sklearn.datasets.load_*()
:获取小规模的数据集sklearn.datasets.fetch_*(data_home=None,subset)
:获取大规模的数据集 data_home 表示数据集下载目录,None 为默认值表示的是家目录/scikit_learn_data
(自动创建该文件夹)下。需要从网络下载.subset
为需要下载的数据集,可以为 train,test,all
示例
首先获取鸢尾花的数据,通过 load 方法:
1 | from sklearn import datasets |
返回的结果为一个字典,鸢尾花的特征数据存放在 data 中,目标数据存放在 target 中:
1 | {'DESCR': 'Iris Plants Database\n ...\n', |
除了使用 load 获取较少数据集之外,我们还可以通过 fetch 方法获取大量数据:
1 | from sklearn import datasets |
因为数据量比较大,且服务器在国外,所以可能会花费一点时间。因为数据很多很乱,就不放在这里了。总之数据结构跟上面差不多。
下面,我们将鸢尾花数据集进行拆分:
1 | # 获取数据集 |
train_test_split(x,y,test_size,random_state)
参数及返回值解释:
- x:特征数据,feature
- y:目标数据,target
- test_size:测试数据占总数据的必重
- random_state:随机状态参数。默认值为 None。如果不设置或设置为 None,将会随机抽取样品,且每次运行获取到的样品几乎都是不同的。将其设置为任意数字,仍然随机取样,但是每次运行提取到的样品相同。
- x_train:训练集的特征数据
- x_test:测试集的特征数据
- y_train:训练集的目标数据
- y_test:测试集的目标数据