模型评估
要对模型的预测准确度进行评估,需要利用estimator中的.score()
方法、交叉验证函数中的scoring
参数指定的评估算法和metrics
包中提供的计量方法。一般estimator中的.score()
方法都是内置定义好的,一般都紧密贴合模型不需要进行修改,所以对模型的评估主要是选择交叉验证函数的scoring
参数和计量算法。
像前一节提到的GridSearchCV
和交叉验证评估函数model_selection.cross_val_score()
都可以接受一个名为scoring
的参数用来指定模型的评估和计量方法。scoring
参数可以接受一个字符串值,scikit-learn中的评估函数都有对应的字符串表示。常用的评估计量方法有以下这些。
标识字符串 | 对应函数 |
---|---|
用于分类算法 | |
accuracy | metrics.accuracy_score |
balanced_accuracy | metrics.balanced_accuracy_score |
average_precision | metrics.average_precision_score |
brier_score_loss | metrics.brier_score_loss |
f1 | metrics.f1_score |
neg_log_loss | metrics.log_loss |
precision | metrics.precision_score |
recall | metrics.recall_score |
jaccard | metrics.jaccard_score |
roc_auc | metrics.roc_auc_score |
用于聚类算法 | |
adjusted_mutual_info_score | metrics.adjusted_mutual_info_score |
adjusted_rand_score | metrics.adjusted_rand_score |
completeness_score | metrics.completeness_score |
fowlkes_mallow_score | metrics.fowlkes_mallow_score |
homogeneity_score | metrics.homogeneity_score |
mutual_info_score | metrics.mutual_info_score |
normalized_mutual_info_score | metrics.normalized_mutual_info_score |
v_measure_score | metrics.v_measure_score |
用于回归算法 | |
explained_variance | metrics.explained_variance_score |
max_error | metrics.max_error |
neg_mean_absolute_error | metrics.mean_absolute_error |
neg_mean_squared_error | metrics.mean_squared_error |
neg_mean_squared_log_error | metrics.mean_squared_log_error |
neg_median_absolute_error | metrics.median_absolute_error |
r2 | metrics.r2_score |
neg_mean_poisson_deviance | metrics.mean_poisson_deviance |
neg_mean_gamma_deviance | metrics.mean_gamma_deviance |
需要注意的是f1
、precision
、recall
、jaccard
四个标识支持添加后缀,可用的后缀及意义如下:
- 无后缀,应用于二分类。
_micro
,应用于微平均,多用于多标签,会逐项计算平均。_macro
,应用于宏平均,直接计算各项平均,各项权重相同。_weighted
,应用于带权重平均。_samples
,应用于多标签样本。
以下给出一个简单的模型评估示例。
from sklearn import svm, datasets
from sklearn.model_selection import cross_val_score
iris = datasets.load_iris()
x, y = iris.data, iris.target
clf = svm.SVC(random_state=0)
cross_val_score(clf, x, y, cv=5, scoring='recall_macro')
scoring
参数可以接受一个列表或者字典作为参数,其中可以同时指定多种评估方法。
sklearn.metrics
包中提供的评估计量方法除了可以用在scoring
参数上,还可以手动调用,一般评估计量方法会接受至少两个参数,一个是对比组y_true
,一个是从模型获得的结果组y_pred
。例如可以像以下示例中一样使用。
import numpy as np
from sklearn.metrics import accuracy_score
y_pred = [0, 2, 1, 3]
y_true = [0, 1, 2, 3]
accuracy_score(y_true, y_pred)
如果将scikit-learn与其他深度学习框架结合使用,就必须寻找并使用能够将模型包装成scikit-learn中estimator的工具。
如果要使用Keras建立模型并使用scikit-learn进行评估,就必须使用Keras中提供的keras.wrappers.scikit_learn.KerasClassifier
类来包裹分类模型,使用keras.wrappers.scikit_learn.KerasRegressor
类来包裹回归模型。这两个类在构建的时候使用build_fn
参数接受一个能够返回模型的函数或者类。
如果需要使用PyTorch建立模型并使用scikit-learn进行评估,需要借助skorch库。skorch库中提供了NeuralNetClassifier
类来包裹分类模型,NeuralNetRegressor
类来包裹回归模型,也可以直接使用这两个类的基类NeuralNet
来包裹模型,但部分参数需要自行设定。skorch中的NeuralNet
类在创建时需要使用参数criterion
来指定损失函数,参数optimizer
来指定优化器。NeuralNet
类接受一个module
参数,可以将模型类传入。