交叉验证
scikit-learn的介绍
一、机器学习的一般步骤
链接:机器学习的一般步骤
二、预处理数据
链接:预处理数据
三、交叉验证
K-折交叉验证
jupyter 将原始数据分成K组(一般是均分),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型,用这K个模型最终的验证集的分类准确率的 平均数 作为此K-CV下分类器的性能指标。
scikit-learn提供了三个函数:
cross_val_score,cross_val_predict 和 cross_validate。
from sklearn.model_selection import cross_validate
pipe=make_pipeline(MinMaxScaler(),
LogisticRegression(solver='lbfgs', multi_class='auto',max_iter=1000, random_state=42))
# cv=3表示3折交叉验证
scores=cross_validate(pipe,digits.data,digits.target,cv=3,return_train_score=True)
使用交叉验证函数,我们可以快速检查训练和测试分数,并使用pandas快速绘图。
import pandas as pd
df_scores=pd.DataFrame(scores)
df_scores
输出:
fit_time score_time test_score train_score
0 0.128265 0.001 0.925249 0.988285
1 0.123709 0.000 0.943239 0.984975
2 0.115268 0.000 0.924497 0.993339
df_scores[['train_score', 'test_score']].boxplot()
输出:
<matplotlib.axes._subplots.AxesSubplot at 0x26ebac5fa58>
练习
接着使用上一个练习的管道(乳腺癌数据集)并进行3折交叉验证,而不是单个拆分评估。
pipe=make_pipeline(StandardScaler(),SGDClassifier(max_iter=1000))
scores=cross_validate(pipe,breast.data,breast.target,scoring='balanced_accuracy',cv=3,return_train_score=True)
df_scores=pd.DataFrame(scores)
df_scores[['train_score','test_score']].boxplot()
(完。)