6. 可视化#
Scikit-learn 定义了一个简单的 API,用于创建机器学习可视化。此 API 的关键特性是允许快速绘图和视觉调整,而无需重新计算。我们提供了 Display 类,它们公开了两种创建绘图的方法:from_estimator 和 from_predictions。
方法 from_estimator 从一个已拟合的估计器、输入数据(X、y)和绘图生成一个 Display 对象。方法 from_predictions 从真实值和预测值(y_test、y_pred)和绘图创建一个 Display 对象。
使用 from_predictions 可以避免重新计算预测,但用户需要注意传递的预测值与 pos_label 相对应。对于 predict_proba,选择与 pos_label 类别对应的列;而对于 decision_function,如果 pos_label 不是估计器 classes_ 属性中的最后一个类别,则需要反转分数(即乘以 -1)。
Display 对象存储使用 Matplotlib 绘图所需的计算值(例如,度量值或特征重要性)。这些值是从传递给 from_predictions 的原始预测,或传递给 from_estimator 的估计器和 X 派生而来的结果。
一旦 Display 对象被初始化,它就有一个 plot 方法可以创建 Matplotlib 绘图(请注意,我们建议通过 from_estimator 或 from_predictions 创建 Display 对象,而不是直接初始化)。plot 方法允许通过将现有绘图的 matplotlib.axes.Axes 传递给 ax 参数来添加到现有绘图。
在以下示例中,我们使用 from_estimator 为已拟合的逻辑回归模型绘制 ROC 曲线。
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import RocCurveDisplay
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
y = y == 2 # make binary
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=.8, random_state=42
)
clf = LogisticRegression(random_state=42, C=.01)
clf.fit(X_train, y_train)
clf_disp = RocCurveDisplay.from_estimator(clf, X_test, y_test)
如果您已经有了预测值,您可以改为使用 from_predictions 来做同样的事情(并节省计算)。
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import RocCurveDisplay
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
y = y == 2 # make binary
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=.8, random_state=42
)
clf = LogisticRegression(random_state=42, C=.01)
clf.fit(X_train, y_train)
# select the probability of the class that we considered to be the positive label
y_pred = clf.predict_proba(X_test)[:, 1]
clf_disp = RocCurveDisplay.from_predictions(y_test, y_pred)
返回的 clf_disp 对象允许我们向已计算的 ROC 曲线添加另一条曲线。在这种情况下,clf_disp 是一个 RocCurveDisplay,它将计算值存储为名为 roc_auc`、fpr` 和 tpr` 的属性。
接下来,我们训练一个随机森林分类器,并通过使用 Display 对象的 plot 方法再次绘制之前计算的 ROC 曲线。
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier(n_estimators=10, random_state=42)
rfc.fit(X_train, y_train)
ax = plt.gca()
rfc_disp = RocCurveDisplay.from_estimator(
rfc, X_test, y_test, ax=ax, curve_kwargs={"alpha": 0.8}
)
clf_disp.plot(ax=ax, curve_kwargs={"alpha": 0.8})
请注意,我们向绘图函数传递了 alpha=0.8 以调整曲线的 alpha 值。
示例
6.1. 可用绘图工具#
6.1.1. Display 对象#
|
校准曲线(也称为可靠性图)可视化。 |
|
偏依赖图 (PDP) 和个体条件期望 (ICE)。 |
|
决策边界可视化。 |
|
混淆矩阵可视化。 |
|
检测错误权衡 (DET) 曲线可视化。 |
|
精确度-召回率可视化。 |
|
回归模型的预测误差可视化。 |
|
ROC 曲线可视化。 |
学习曲线可视化。 |
|
验证曲线可视化。 |