在机器学习中,模型的评估是一个至关重要的环节。scikit-learn库提供了多种评估指标,可以帮助从不同的角度衡量模型的性能。本文将介绍如何使用GridSearchCV进行多指标参数搜索,并展示如何通过图形化的方式评估这些指标。
首先,需要导入必要的库。这包括numpy用于数学运算,matplotlib用于绘图,以及scikit-learn库中的相关模块。
import numpy as np
from matplotlib import pyplot as plt
from sklearn.datasets import make_hastie_10_2
from sklearn.metrics import accuracy_score, make_scorer
from sklearn.model_selection import GridSearchCV
from sklearn.tree import DecisionTreeClassifier
接下来,生成一个数据集,用于后续的模型训练和评估。这里使用的是Hastie等人提出的10-2数据集,它是一个二分类问题。
X, y = make_hastie_10_2(n_samples=8000, random_state=42)
在进行参数搜索之前,需要定义评估指标。scikit-learn允许使用预定义的指标字符串,或者自定义的评估函数。在这个例子中,使用了AUC和准确率作为评估指标。
scoring = {
"AUC": "roc_auc",
"Accuracy": make_scorer(accuracy_score)
}
现在可以设置GridSearchCV,进行参数搜索。选择了决策树分类器作为模型,并定义了一个参数网格。还设置了refit参数,以便在最佳参数设置下重新训练模型。
gs = GridSearchCV(
DecisionTreeClassifier(random_state=42),
param_grid={"min_samples_split": range(2, 403, 20)},
scoring=scoring,
refit="AUC",
n_jobs=2,
return_train_score=True,
)
gs.fit(X, y)
参数搜索完成后,可以获取搜索结果,并将其可视化。这包括训练集和测试集的评分,以及每个参数设置下的最佳评分。
results = gs.cv_results_
plt.figure(figsize=(13, 13))
plt.title("GridSearchCV evaluating using multiple scorers simultaneously", fontsize=16)
plt.xlabel("min_samples_split")
plt.ylabel("Score")
ax = plt.gca()
ax.set_xlim(0, 402)
ax.set_ylim(0.73, 1)
使用不同的颜色和线型来区分不同的评估指标和样本类型(训练集和测试集)。此外,还在图中标记了每个指标下的最佳评分。
X_axis = np.array(results["param_min_samples_split"].data, dtype=float)
for scorer, color in zip(sorted(scoring), ["g", "k"]):
for sample, style in (("train", "--"), ("test", "-")):
sample_score_mean = results["mean_%s_%s" % (sample, scorer)]
sample_score_std = results["std_%s_%s" % (sample, scorer)]
ax.fill_between(X_axis, sample_score_mean - sample_score_std, sample_score_mean + sample_score_std, alpha=0.1 if sample == "test" else 0, color=color)
ax.plot(X_axis, sample_score_mean, style, color=color, alpha=1 if sample == "test" else 0.7, label="%s(%s)" % (scorer, sample))
最后,展示了整个脚本的运行时间,并提供了下载Jupyter笔记本和Python源代码的链接。
Total running time of the script: (0 minutes 8.618 seconds)
Download Jupyter notebook: plot_multi_metric_evaluation.ipynb
Download Python source code: plot_multi_metric_evaluation.py
Download zipped: plot_multi_metric_evaluation.zip