sklearn之模型选择与评估
在机器学习中,在我们选择了某种模型,使用数据进行训练之后,一个避免不了的问题就是:如何知道这个模型的好坏?两个模型我应该选择哪一个?以及几个参数哪个是更好的选择? 这就涉及到一个模型选择与评估的问题了。sklearn包的model_selection模块主要辅助要解决的,就是这个问题。
下面我们会简单讲下model_selection中提到的一些模型选择与评估方法,作为一些概述。更详细的介绍可以看这里
交叉验证(cross_validation)
对于验证模型好坏,我们最常使用的方法就是交叉验证法。也就是每次训练,都使用训练数据的一个划分(或者称为折,fold):一部分作为训练集,一部分作为验证集,进行多次划分多次训练后,得到想要的模型。
在sklearn中,对于获取到的数据,如果我们想要只划分成一部分train和一部分test,并训练然后验证的话,我们可以直接使用model_selection中的train_test_split来进行划分;一般情况下,我们是已经有了train和test数据,然后希望训练出一个模型来,然后应用到test中。至于模型好不好,参数怎么选择,我们会使用cross_validation方法来进行划分并验证。
交叉验证的评价
对于交叉验证,我们常用的cross_validation方法就是cross_val_score来获取交叉验证的得分。最常见的使用方法是:
>>> from sklearn.model_selection import cross_val_score
>>> clf = svm.SVC(kernel='linear', C=1)
>>> scores = cross_val_score(clf, iris.data, iris.target, cv=5)
>>> scores
array([ 0.96..., 1. ..., 0.96..., 0.96..., 1. ])
>>> print("Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))
Accuracy: 0.98 (+/- 0.03)
>>> from sklearn import metrics
>>> scores = cross_val_score(
... clf, iris.data, iris.target, cv=5, scoring='f1_macro')
>>> scores
array([ 0.96..., 1. ...,