数据根据测试数据集作调整后可能出现对于特定测试数据集过拟合的情况,因此需要将数据集划分成3部分,训练测试集,验证数据集,测试数据集。用验证数据集来代替测试数据集原来的作用,并进行模型调优(调参),当验证数据集的分数够好以后,再用测试数据集评分。

交叉验证(cross validation)

对于上述方法的实际应用,并且解决了验证数据集不够随机的缺点,防止固定的验证数据集中有异常值对于模型优化产生的影响。

原理

首先把数据集切分车成训练测试数据集,把训练数据集在切分成3份,分别为A、B、C,进行组合,比如,AB为训练数据集,C为验证数据集。总共有三个组合(切成几份就有几个模型),我们把三个模型的平均评分作为评判模型性能的分数(这个平均的功能并没有写在cross_val_score中,他只会分别给出三个模型的分数)。

k-folds cross validation

sklearn使用方法

  1. from sklearn.model_selection import cross_val_score
  2. from sklearn.neighbors import KNeighborsClassifier
  3. knn_clf = KNeighborsClassifier()
  4. print(cross_val_score(knn_clfX_train,y_train,cv=3))

需要注意的是交叉验证被封装在网格搜索中,所以使用网格搜索的话这个可看可不看吧。k(cv)越大,也就是模型越多,训练性能越低。

leave-One-Out Cross Validation

把训练数据集分成和本身一样大小的份数m,用m-1去训练,1去评分,应为性能消耗巨大,通常只有学术研究为了精确性才会使用。