顯示對象的可視化?
在此示例中,我們將直接從ConfusionMatrixDisplay,RocCurveDisplay和PrecisionRecallDisplay各自的指標中構造顯示對象。當模型的預測已經計算或計算成本很高時,這是使用其對應的繪圖函數的替代方法。請注意,這是高級用法,通常我們建議使用它們各自的繪圖功能。
print(__doc__)
導入數據,訓練模型
對于此示例,我們從OpenML (https://www.openml.org/d/1464)加載輸血服務中心數據集。 這是一個二分類問題,目標是個人是否獻血。 然后將數據分為訓練和測試數據集,并通過訓練數據集進行邏輯回歸。
from sklearn.datasets import fetch_openml
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
X, y = fetch_openml(data_id=1464, return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y)
clf = make_pipeline(StandardScaler(), LogisticRegression(random_state=0))
clf.fit(X_train, y_train)
輸出:

創建ConfusionMatrixDisplay
使用擬合的模型,我們可以在測試數據集上計算模型的預測。 這些預測用于計算使用ConfusionMatrixDisplay繪制的混淆矩陣。
from sklearn.metrics import confusion_matrix
from sklearn.metrics import ConfusionMatrixDisplay
y_pred = clf.predict(X_test)
cm = confusion_matrix(y_test, y_pred)
cm_display = ConfusionMatrixDisplay(cm).plot()
輸出:

創建RocCurveDisplay
roc曲線需要估算器的概率或非閾值決策值。 由于邏輯回歸提供了決策函數,因此我們將使用它來繪制roc曲線:
from sklearn.metrics import roc_curve
from sklearn.metrics import RocCurveDisplay
y_score = clf.decision_function(X_test)
fpr, tpr, _ = roc_curve(y_test, y_score, pos_label=clf.classes_[1])
roc_display = RocCurveDisplay(fpr=fpr, tpr=tpr).plot()
輸出:

創建PrecisionRecallDisplay
類似地,可以使用預置部分中的y_score繪制精度召回曲線。
from sklearn.metrics import precision_recall_curve
from sklearn.metrics import PrecisionRecallDisplay
prec, recall, _ = precision_recall_curve(y_test, y_score,
pos_label=clf.classes_[1])
pr_display = PrecisionRecallDisplay(precision=prec, recall=recall).plot()
輸出:

將顯示對象合并為一個圖
顯示對象存儲作為參數傳遞的計算值。 這樣就可以使用matplotlib的API輕松組合可視化效果。 在下面的示例中,我們將顯示出的圖像排成一行。
import matplotlib.pyplot as plt
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 8))
roc_display.plot(ax=ax1)
pr_display.plot(ax=ax2)
plt.show()
輸出:

腳本的總運行時間:(0分鐘1.933秒)