文章目录
交叉验证迭代器
迭代器根据不同的交叉验证策略用于生成数据下标,进而实现数据集的划分,生成需要的测试集和验证集。
独立且完全相同分布数据
iid数据,independent and identically distributed data,以下方式可用于这种数据的划分。
note:机器学习中假设数据是iid的,然而实际上并不可能。对于已知数据结构的数据,比如时间序列的,采用 time-series aware cross-validation scheme可能更合适;同理,对于拥有分组结构的数据(如从同一个对象上采集的数据,同一个实验中获取的数据),采用group-wise cross-validation更合适。
K-fold
将数据划随机分为K份,利用每次利用其中K-1份进行训练,利用剩余的一份进行验证,循环K次将数据遍历。
import numpy as np
from sklearn.model_selection import KFold
X = np.array(['a','c','f','c','a','a','f'])
kf = KFold(n_splits = 2)
for train,test in kf.split(X):
print(train,test)
[4 5 6] [0 1 2 3]
[0 1 2 3] [4 5 6]
可以看出,K fold并不受数据分布和组、类的影响,有可能把同一组或者类的元素分到不同的样本中。
重复K flod
即将K-fold重复进行n次,可以用于数据量较少时,为了在训练过程中充分利用数据。感觉重复的次数 n × K n\times K n×K应该小于数据量,不然会存在重复划分的数据。同理,RepeatedStratifiedKFold是进行n次重复的StratifiedKFold划分。
import numpy as np
from sklearn.model_selection import RepeatedKFold
X = np.array(['a','c','f','c','a',