我创建了这个函数来生成ROC_AUC,然后将创建的图返回给一个变量。
from sklearn.metrics import roc_curve, auc
from sklearn.preprocessing import label_binarize
import matplotlib.pyplot as plt
def plot_multiclass_roc(clf, X_test, y_test, n_classes, figsize=(17, 6)):
y_score = clf.decision_function(X_test)
# structures
fpr = dict()
tpr = dict()
roc_auc = dict()
# calculate dummies once
y_test_dummies = pd.get_dummies(y_test, drop_first=False).values
for i in range(n_classes):
fpr[i], tpr[i], _ = roc_curve(y_test_dummies[:, i], y_score[:, i])
roc_auc[i] = auc(fpr[i], tpr[i])
# roc for each class
fig, ax = plt.subplots(figsize=figsize)
ax.plot([0, 1], [0, 1], 'k--')
ax.set_xlim([0.0, 1.0])
ax.set_ylim([0.0, 1.05])
ax.set_xlabel('False Positive Rate')
ax.set_ylabel('True Positive Rate')
ax.set_title('Receiver operating characteristic for Optimized SVC model')
for i in range(n_classes):
ax.plot(fpr[i], tpr[i], label='ROC curve (area = %0.2f) for label %i' % (roc_auc[i], i+1))
ax.legend(loc="best")
ax.grid(alpha=.4)
sns.despine()
plt.show()
return fig
svc_model_optimized_roc_auc_curve = plot_multiclass_roc(svc_model_optimized, X_test, y_test, n_classes=3, figsize=(16, 10))
生成的图如下所示:
我使用相同的函数为5个不同的模型创建了5个不同的ROC曲线,但将它们的数字返回到单独的变量。
然后我创建了一个子情节图,我认为它可以显示所有这些内容。代码是:
import matplotlib.pyplot as plt
%matplotlib inline
figs, ax = plt.subplots(
nrows=3,
ncols=2,
figsize=(20, 20),
)
ax[0,0] = logmodel_roc_auc_curve
ax[0,1] = RandomForestModel_optimized_roc_auc_cruve
ax[1,0] = decisiontree_model_optimized_roc_auc_curve
ax[1,1] = best_clf_knn_roc_auc_curve
ax[2,0] = svc_model_optimized_roc_auc_curve
但由此产生的图是这样产生的:
有一个类似的问题,这个here,但它解决了再次执行的功能。但我想找到一种方法,如果可能的话,只是简单地“粘贴”的数字,我已经到子情节。
1条答案
按热度按时间wqnecbli1#
你需要的和linked solution中的完全一样。你不能存储绘图以备后用。注意在matplotlib中,
figure
是周围有一个或多个子绘图的绘图。每个子绘图都通过ax
引用。函数
plot_multiclass_roc
需要进行一些更改:ax
作为参数,并且该图应该在该ax
上创建。fig, ax = plt.subplots(figsize=figsize)
;fig
应在函数外部预先创建plt.show()
在matplotlib中有一个not-well-followed convention,它使用
axs
来表示ax
的复数形式(当引用子图时),因此: