cross_val_score,train_test_split
train_test_split
这个是最基本的交叉验证,会将原来的数据打乱test_size
表示将数据集分为训练和测试部分中测试部分的比例random_state
表示随机种子,一旦确定某个值后,再次调用该函数划分结果一样。
如下:
当然如果要做K折交叉验证,还得用cross_val_score
cross_val_score
官网地址:cross_val_score
这篇blog讲的很好:交叉验证及其用于参数选择、模型选择、特征选择的例子
使用也非常简单,如下:
关于scoring:
Classification
‘accuracy’sklearn.metrics.accuracy_score
‘average_precision’sklearn.metrics.average_precision_score
‘f1’sklearn.metrics.f1_score
‘precision’sklearn.metrics.precision_score
‘recall’sklearn.metrics.recall_score
‘roc_auc’sklearn.metrics.roc_auc_score
Clustering
‘adjusted_rand_score’sklearn.metrics.adjusted_rand_score
Regression
‘mean_squared_error ’sklearn.metrics.mean_squared_error
‘r2’ sklearn.metrics.r2_score
提一下均方误差:反映估计量和被估计量之间差异程度的度量。设t是根据子样本确定的总体参数的一个估计量,那么的期望(即)就是t的均方误差;相对于数据集来说,y_train
作为被估计量,y_pred
作为估计量,数据集中的每一条记录当成一个结果(样本),用训练数据去训练模型,然后用测试数据算出测试数据在模型上的均方误差()
在kaggle上经常看到对交叉验证的结果要开根号,取得是方均根差 (),可以当成标准差():
关于均方误差,RMS,RMSE的理解参考
http://blog.163.com/jey_df/blog/static/1825501612013411105655629/
KFlod
比如我使用5折,[1,2,3,4,5,6,7,8,9,10],每次调用该函数,都会给我如下分训练集和测试集:
[3,4,5,6,7,8,9,10] ,[1,2]
[1,2,5,6,7,8,9,10] ,[3,4]
[1,2,3,4,7,8,9,10] ,[5,6]
[1,2,3,4,5,6,9,10] ,[7,8]
[1,2,3,4,5,6,7,8] ,[9,10]
也就是说每次调用该函数,如果不改变随机种子,结果不变,所以这里可以用KFold中的shuffle属性来代替,其表示是否每次划分的时候洗牌
参考sklearn.model_selection.KFold