如何将由 6 个图表组成的子图转换为 scikitplot 库中的图表

How to make subplots consisting of 6 charts to charts from the scikitplot library

我有六个模型,想用 ROC 图评估它们

from sklearn.naive_bayes import GaussianNB
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.ensemble import RandomForestClassifier
from lightgbm import LGBMClassifier
from sklearn.ensemble import RandomForestClassifier
from catboost import CatBoostClassifier
from sklearn.svm import SVC 
from sklearn.linear_model import LassoCV



NBC = GaussianNB() 
LRE = LogisticRegression(solver='lbfgs')
GBC = GradientBoostingClassifier()
RFC = RandomForestClassifier()
LGBM = LGBMClassifier() 
CBC = CatBoostClassifier(verbose=0, n_estimators=100)


classifiers = [NBC,LRE,GBC,RFC,LGBM,CBC]

for cls in classifiers:
    cls.fit(X_train, y_train)

现在我正在为此制作图表

import scikitplot as skplt

for cls in classifiers:
    skplt.metrics.plot_roc(y_test, cls.predict_proba(X_test),figsize=(6, 3),title=type(cls).__name__)
    
plt.tight_layout()  
plt.show()

但我想要次要图表!不幸的是,这行不通。我需要这个解决方案来解决 scikitplot 图表的一系列问题。

classifiers = [NBC,LRE,GBC,RFC,LGBM,CBC]

from sklearn.metrics import confusion_matrix, log_loss, auc, roc_curve, roc_auc_score, recall_score, precision_recall_curve

plt.figure(figsize=(15,7))
grid = plt.GridSpec(2, 3, wspace=0.3, hspace=0.4)

for i in range(6):
    col, row = i%3,i//3
    ax = plt.subplot(grid[row,col]) 
    ax.title.set_color('blue')
    
    #model = classifiers[i]
    #skplt.metrics.plot_roc(y_test, model.predict_proba(X_test),figsize=(6, 3),title=type(cls).__name__)
 
plt.tight_layout()

plt.show()

您需要在 skplt.metrics.plot_roc

中指定 ax 参数
plt.figure(figsize=(15,7))
grid = plt.GridSpec(2, 3, wspace=0.3, hspace=0.4)

for i in range(6):

    col, row = i%3,i//3
    ax = plt.subplot(grid[row,col]) 
    ax.title.set_color('blue')

    model = classifiers[i]
    skplt.metrics.plot_roc(y_test, model.predict_proba(X_test), ax=ax, title=type(cls).__name__)

plt.show()