为什么要划分训练集、验证集和测试集

2020-07-22  本文已影响0人  升不上三段的大鱼

一般来说机器学习的数据集都会被划分成三个个子集训练集,验证集测试集

我们拿到的数据集通常都是由人工或者半自动化的方式收集来的,每个输入数据都有对应的输出,机器学习要做的是学习这些已经收集好的数据中所包含的信息,并且在新的输入数据出现时成功预测到输出。

在实现机器学习的过程中,训练集是用来训练模型的,给模型输入和对应的输出,让模型学习它们之间的关系。

验证集是用来估计模型的训练水平,比如分类器的分类精确度,预测的误差等,我们可以根据验证集的表现来选择最好的模型。

测试集是输入数据在最终得到的模型得到的结果,是训练好的模型在模拟的“新”输入数据上得到的输出。测试集只能在最后用于测试模型的性能,不能拿来训练。

最后,应用阶段,训练好的模型可以被应用在实际获得的数据并且得到结果,但是这个阶段是没办法评价的,模型的质量只能从验证集和测试集上看出来。

大概就是:机器学习(背答案)——>做题(默写答案)——>模考(看答案背的怎么样)——>高考(生死由命)

比较常见的划分数据集的方式是:50%用于训练,25%用于验证,25%用于测试。这个比例也可以根据数据集的大小和数据信噪比来改变。

数据集划分可以用sklearn的train_test_split函数:

import numpy as np
from sklearn.model_selection import train_test_split

X = np.arange(20).reshape((10,2))
y = range(10)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)

>>> X 
array([[ 0,  1],
       [ 2,  3],
       [ 4,  5],
       [ 6,  7],
       [ 8,  9],
       [10, 11],
       [12, 13],
       [14, 15],
       [16, 17],
       [18, 19]])
>>> y
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> X_train, y_train
(array([[18, 19],
        [12, 13],
        [ 4,  5],
        [10, 11],
        [ 0,  1],
        [14, 15]]), [9, 6, 2, 5, 0, 7])
>>> X_test, y_test
(array([[16, 17],
        [ 2,  3],
        [ 8,  9],
        [ 6,  7]]), [8, 1, 4, 3])
上一篇 下一篇

猜你喜欢

热点阅读