机器学习:训练集与测试集的划分

您所在的位置:网站首页 训练样本集和测试样本集 机器学习:训练集与测试集的划分

机器学习:训练集与测试集的划分

#机器学习:训练集与测试集的划分| 来源: 网络整理| 查看: 265

机器学习中有一个问题是不可避免的,那就是划分测试集和训练集。为什么要这么做呢,当然是提高模型的泛化能力,防止出现过拟合,并且可以寻找最优调节参数。训练集用于训练模型,测试集则是对训练好的模型进行评估的数据集。通常来说,训练集和测试集是不会有交集的,常用的数据集划分方法有以下两种:

留出法k折交叉验证法 留出法

直接将原数据集划分为两个互斥的数据集,即训练集与测试集。sklearn直接提供给我们这样的方法,便于操作

sklearn.model_selection.train_test_split(*arrays, **options)

参数

含义

test_size测试集占总数据的大小,以(0.0,1.0)之间的小数表示,默认值为0.25random_state随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。

通过构造一个二维数组实现函数的功能

import numpy as np from sklearn.model_selection import train_test_split #构造一个X是5行2列的二维数组,y为5个元素的列表 X, y = np.random.randint(10,size=(5,2)), list(range(5)) X #array([[8, 4], [3, 0], [9, 0], [5, 9], [0, 7]]) y #[0, 1, 2, 3, 4] #将X,y划分为训练集和测试集,测试集的比例为0.3 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=23) X_train #array([[9, 0], [8, 4], [5, 9]]) X_test #array([[3, 0], [0, 7]]) y_train #[2, 0, 3] y_test #[1, 4]

可见结果是符合设定要求的,运用时也很简单,只需将划分后的各部分数据集弄清楚不混淆即可。sklearn.model_selection.train_test_split

k折交叉验证法(当k为样本数量时即为留一法)

K折交叉验证,这是将数据集分成K份,所谓K折就是将数据集通过K次分割,使得所有数据既在训练集出现过,又在测试集出现过。当然,每次分割中不会有重叠,即不会有交集,相当于无放回抽样。

sklearn.model_selection.KFold(n_splits=’warn’, shuffle=False, random_state=None)

参数含义n_split折叠数量,最少为2。默认为3。shuffle是否在分割之前对数据进行洗牌。默认为falserandom_state随即种子数。

同样的通过构造数组实现函数的功能了解函数的使用方法:

from sklearn.model_selection import KFold import numpy as np #定义X,y X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]]) y = np.array([1, 2, 3, 4]) kf = KFold(n_splits=4) #打印折叠后分别作为训练集和测试集在原数据集上的索引 for train_index, test_index in kf.split(X): print("TRAIN:", train_index, "TEST:", test_index) X_train, X_test = X[train_index], X[test_index] y_train, y_test = y[train_index], y[test_index] #TRAIN: [1 2 3] TEST: [0] #TRAIN: [0 2 3] TEST: [1] #TRAIN: [0 1 3] TEST: [2] #TRAIN: [0 1 2] TEST: [3]

可以看到,在最后的结果中,并不会出现两次同样的数据。这样可以保证划分后的数据每一份都能作为一次测试集。(需要注意的是,这里用的是原数据集的索引,而不是直接引用数据)sklearn.model_selection.KFold

这两个方法的主要区别在于,留出法中测试集对应的模型与训练的模型相比可能具有较大差距,降低保真性,这种没有较好的解决办法,只能人工去调整正负样本的比例,保证训练集与测试集正负样本比例大致相同,常见做法是将大约2/3~4/5的样本用于训练,剩余样本留作测试。

k折交叉验证法不受随机样本划分方式的影响,训练出来的模型与总的数据集模型很相似。缺点在于计算成本高,数据集小的话还可以,当数据规模很大时,计算时间以及成本就相当惊人了。一般来说,根据经验我们一般选择k=5或10。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3