1

I have six models and want to evaluate them with a ROC chart

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)

now I'm making charts for this

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()

enter image description here

But I want subplot charts! Unfortunately, this does not work out. I need this solution for a whole series of problems with scikitplot charts.

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()

enter image description here

halfer
  • 19,824
  • 17
  • 99
  • 186
Wojciech Moszczyński
  • 2,893
  • 21
  • 27

1 Answers1

1

you need to specify the ax argument in skplt.metrics.plot_roc

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()
Marco Cerliani
  • 21,233
  • 3
  • 49
  • 54