打乱划分交叉验证是一种非常灵活的交叉验证策略。
在打乱划分交叉验证中,每次划分为训练集取样train_size个点,为测试集取样test_size个不相交的点。将这一划分方法重复n_iter次。
举例:
import matplotlib.pyplot as plt
import mglearn
mglearn.plots.plot_shuffle_split()
plt.show()
上图为对包含10个点的数据集进行4次迭代划分,每次的训练集包含5个点,测试集包含2个点(可以将train_size和test_size设为整数来表示这两个集合的绝对大小,也可以设为浮点数来表示占整个数据集的比例)
下面的例子是将数据集划分为50%的训练集和50%的测试集,共运行10次迭代:
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import ShuffleSplit
shuffle_split=ShuffleSplit(test_size=.5,train_size=.5,n_splits=10)
iris=load_iris()
logreg=LogisticRegression()
scores=cross_val_score(logreg,iris.data,iris.target,cv=shuffle_split)
print('Cross-validation score:\n{}'.format(cross_val_score(logreg,iris.data,iris.target,cv=shuffle_split)))
打乱划分交叉验证可以在训练集和测试集大小之外独立控制迭代次数,这有时是很有帮助的。它还允许在每次迭代中仅使用部分数据,这可以通过设置train_size与test_size之和不等于1来实现。
用这种方法对数据进行二次采样可能对大型数据上的试验很有用。