1. train set, validation set, test set
先把样本分成train set和test set。再对train set分出validation set做交叉验证。
train set:
训练模型参数
validation set
模型选择,提高模型稳定,避免overfitting(其实不可能完全避免)。对某些训练数据得到的参数,对另一部分训练数据结果并不好,所以通过交叉验证找到稳定的模型。
1. k-fold cross-validation:
样本数据分k份,1份用作validation,其余k-1份用来train。把k次误差结果平均。
2. leave-one-out cross-validation:
validation只含1个数据的k-fold cross-validation,因此,k等于样本数。
3. holdout validation:
随机留一部分数据作为validation,其余部分train。其实没有交叉验证。
test set:
测试模型的泛化能力
2. 三者比例
根据问题和模型确定。有的分法是0.5:0.25:0.25。一般地,没有validation set时,train:test为7:3。
3. deep learning中,有一种stop iteration的条件,见deep learning book
发现迭代到一定阶段,虽然train和test的error还在缓慢下降,但是validation的error却在上升,这时可终止迭代。
4. python做cross-validation
python在Scrikit-Learn做交叉验证 。函数train_test_split把样本随机按比例分成train data和test data
X_train, X_test, y_train, y_test =cross_validation.train_test_split(train_data,train_target, test_size=0.3, random_state=0)
test_size是测试样本的比例。若取整数就是指样本数量。
random_state是随机数种子。
X是输入,Y是输出。