1、scikit_learn可通过train_test_split函数迅速将数据集分为train和test。
>>> import numpy as np
>>> from sklearn.model_selection import train_test_split
>>> from sklearn import datasets
>>> from sklearn import svm
>>> X, y = datasets.load_iris(return_X_y=True)
>>> X.shape, y.shape
((150, 4), (150,))
>>> X_train, X_test, y_train, y_test = train_test_split(
... X, y, test_size=0.4, random_state=0)
>>> X_train.shape, y_train.shape
((90, 4), (90,))
>>> X_test.shape, y_test.shape
((60, 4), (60,))
>>> clf = svm.SVC(kernel='linear', C=1).fit(X_train, y_train)
>>> clf.score(X_test, y_test)
0.96...
2、但模型参数如c的选择往往会取决于test的结果,造成overfitting。因此,我们使用validation选择最佳参数,并将该参数用于最终的test。
3、但是,因为将dataset分为三部分:train、validation以及test。可用样本量减少,并且其结果也取决于train和validation的样本量大小设置。
4、因此,K-fold cross validation应运而生。在该方法中,我们将train分为K等分,并从中仍迭代选择一等分作为validation,根据其平均值选择模型参数。