对平时用机器学习算法常遇到的问题做个总结~
A. 交叉验证
交叉验证是为了评估当前的模型对于整个dataset的generalization error怎么样(如果太大,表示overfit或者underfit),根据[3]的介绍,一般有三种,根据对数据集划分成training set和validation set的比例不同来分的——
- 划分一小部分作为validation set;
- 划分成k等分(k >= 2),一份作为validation set,其它的作为training set;
- 逐个sample拿出来作为validation set,其它的作为training set。
下面分别展示:
A1. 划分training set和validation set
为了防止过度拟合、或验证训练出来的模型的效果,一般会将原始的训练集随机地划分一部分作为validation set(一般20%-40%的数据量),当然还有更好的k-fold-cross-validation,后面再介绍。
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=4)
# random_state的解释是Pseudo-random number generator state used for random sampling
# 我是看不懂啦,目测应该是类似C++语言中的随机种子的东西,不要太在意这个细节~
A2. k-fold-cross-validation
划分成k等分(k >= 2),一份作为validation set,其它的作为training set,每一份都有