在机器学习领域,数据可视化是一个重要的环节,它能够帮助更直观地理解模型的性能和数据的特征。本指南将详细介绍如何使用机器学习可视化API,这是一个专为开发者设计的灵活工具,用于开发和维护绘图工具。通过这个API,开发者可以一次性运行计算,然后根据需要调整可视化效果。
API的核心逻辑被封装在一个显示对象中,该对象负责存储计算数据并执行绘图操作。显示对象的构造函数__init__
只包含创建可视化所需的数据。绘图方法plot
接受与可视化相关的参数,例如matplotlib的坐标轴。绘图方法会将matplotlib的艺术家对象存储为属性,允许通过显示对象进行样式调整。
显示类应该定义一个或两个类方法:from_estimator
和from_predictions
。这些方法允许从估计器和一些数据或从真实值和预测值创建显示对象。在这些类方法创建了带有计算值的显示对象之后,然后调用显示的绘图方法。需要注意的是,绘图方法定义了与matplotlib相关的属性,例如线条艺术家。这允许在调用绘图方法之后进行自定义。
以ROC曲线显示为例,定义了以下方法和属性:
class RocCurveDisplay:
def __init__(self, fpr, tpr, roc_auc, estimator_name):
...
self.fpr = fpr
self.tpr = tpr
self.roc_auc = roc_auc
self.estimator_name = estimator_name
@classmethod
def from_estimator(cls, estimator, X, y):
# 获取预测结果
y_pred = estimator.predict_proba(X)[:, 1]
return cls.from_predictions(y, y_pred, estimator.__class__.__name__)
@classmethod
def from_predictions(cls, y, y_pred, estimator_name):
# 根据y和y_pred进行ROC计算
fpr, tpr, roc_auc = ...
viz = RocCurveDisplay(fpr, tpr, roc_auc, estimator_name)
return viz.plot()
def plot(self, ax=None, name=None, **kwargs):
...
self.line_ = ...
self.ax_ = ax
self.figure_ = ax.figure_
更多信息,请参考和。
一些绘图工具,如from_estimator
和PartialDependenceDisplay
,支持在多个轴上绘图。支持两种不同的情况:
~matplotlib.gridspec.GridSpecFromSubplotSpec
来分割空间:
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpecFromSubplotSpec
fig, ax = plt.subplots()
gs = GridSpecFromSubplotSpec(2, 2, subplot_spec=ax.get_subplotspec())
ax_top_left = fig.add_subplot(gs[0, 0])
ax_top_right = fig.add_subplot(gs[0, 1])
ax_bottom = fig.add_subplot(gs[1, :])
# 默认情况下,plot方法中的ax关键字是None。在这种情况下,会创建一个单独的轴,并使用gridspec API来创建绘图区域。
# 例如,from_estimator在API中绘制多条线和等高线。定义边界框的轴保存在bounding_ax_属性中。创建的各个轴存储在axes_ ndarray中,对应于网格上的轴位置。未使用的位置设置为None。此外,matplotlib的艺术家存储在lines_和contours_中,其中键是网格上的位置。当传入轴列表时,axes_、lines_和contours_是对应于传入的轴列表的1d ndarray。