plot_confusion_matrix
ã®çœ²åã¯çŸåšæ¬¡ã®ãšããã§ãã
sklearn.metrics.plot_confusion_matrix(estimator, X, y_true, labels=None, sample_weight=None, normalize=None, display_labels=None, include_values=True, xticks_rotation='horizontal', values_format=None, cmap='viridis', ax=None)
ãã®é¢æ°ã¯æšå®éãšçããŒã¿ãåãããã§ã«äºæž¬ãããã©ãã«ã§ã¯äœ¿çšã§ããŸããã ããã«ã¯ããã€ãã®æ¬ ç¹ããããŸãã
ææ¡ïŒ estimator
ãšX
代ããã«äœ¿çšãããäºæž¬ã©ãã«y_pred
ãplot_confusion_matrix
æž¡ãããšãèš±å¯ããŸãã ç§ã®æèŠã§ã¯ãæãã¯ãªãŒã³ãªè§£æ±ºçã¯ãé¢æ°ããäºæž¬ã¹ããããåé€ãã accuracy_score
ãšåæ§ã®çœ²åïŒäŸïŒ (y_true, y_pred, labels=None, sample_weight=None, ...)
ã§ãã ãã ããäžäœäºææ§ãç¶æããããã«ããªãã·ã§ã³ã®ããŒã¯ãŒãåŒæ°ãšããŠy_pred
ãè¿œå ã§ããŸãã
ééããªãäžäœäºææ§ãç¶æããå¿
èŠããããŸããã y_pred
ããŒã¯ãŒãåŒæ°ãè¿œå ããããšã¯ç§ã«ã¯åççã«èãããŸãã y_predãæž¡ãããããXãŸãã¯æšå®éãæž¡ãããå Žåã¯ããšã©ãŒãçºçãããå¿
èŠããããŸãã
PR @jhennrichãéä¿¡ããŸããïŒ
PRãæåºããŸããããçŸåšCIã«åé¡ããããšæããŸãã®ã§ããŸã åæ ŒããŠããŸããã
è€æ°åã®äºæž¬ã®èšç®ãåé¿ããããã«ã plot_XXX(y_true, y_pred)
ããµããŒãããå¿
èŠãããããšã«åæããŸãã
plot_roc_curveãšplot_precision_recall_curveã«ãåæ§ã®åé¡ããããŸãã
y_predãè¿œå ããããšã¯èš±å®¹ã§ããããã§ãããæ£çŽãªãšãããããã¯è¯ã解決çã§ã¯ãªããšæããŸãã
** kwargsãåãå
¥ããé¢æ°ïŒããšãã°ãplot_precision_recall_curveïŒã®å Žåãäžäœäºææ§ãç¶æããããšã¯äžå¯èœã ãšæãããŸããïŒ
äžäœäºææ§ãç¶æã§ããªãã®ã¯ãªãã§ããïŒ ïŒ15883ã®ææ¡ã¯å€§äžå€«ã ãšæããŸã
äžäœäºææ§ãç¶æã§ããªãã®ã¯ãªãã§ããïŒ ïŒ15883ã®ææ¡ã¯å€§äžå€«ã ãšæããŸã
plot_confusion_matrixã§** kwargsããµããŒãããŠããªãããã§ãã @NicolasHug
kwargsãåé¡ã«ãªãã®ã¯ãªãã§ããïŒ
ããŒãããã1ã€åä»ãªããšããããŸããç§ãã¡ã¯ãplot_roc_curveãšplot_precision_recall_curveïŒããã³plot_partial_dependenceïŒã§** kwargsããµããŒãããŠããŸãããplot_confusion_matrixã§ã¯ãµããŒãããŠããŸããã
kwargsãåé¡ã«ãªãã®ã¯ãªãã§ããïŒ
** kwargsã®åã«æ°ãããã©ã¡ãŒã¿ãè¿œå ãããšãäžäœäºææ§ãç¶æã§ããŸãããïŒ
ç§ã®PRã®å€æŽã«ã¯äžäœäºææ§ãããã** kwargsã¯åŒãç¶ãè¿œå ã§ããŸãã ããããç§ã¯@ qinhanmin2014ã«åæããŸããã¯ããã«ã¯ãªãŒã³ãªè§£æ±ºçã¯ã estimator
ãšX
ãç Žæ£ããã»ãšãã©ã®ä»ã®sklearnã®ãã®ã
** kwargsã®åã«æ°ãããã©ã¡ãŒã¿ãè¿œå ãããšãäžäœäºææ§ãç¶æã§ããŸãããïŒ
ã¯ã
ã¯ããã«ã¯ãªãŒã³ãªãœãªã¥ãŒã·ã§ã³....
æ®å¿µãªãããããã«ã¯éæšå¥šãµã€ã¯ã«ãå¿ èŠã«ãªããŸãïŒãã°ä¿®æ£ãªãªãŒã¹ã§éåžžã«é«éã«ããå Žåãé€ããŸãããçãããã§ã...ïŒ
@thomasjpfan ãäºæž¬ã®ä»£ããã«æšå®éãå ¥åãšããŠæž¡ãçç±ã¯ãããŸããïŒ
ãããã§ãæåã«y_predãè¿œå ããŸãããã** kwagsã¯å¥ã®åé¡ã§ãã
æ®å¿µãªãããããã«ã¯éæšå¥šãµã€ã¯ã«ãå¿ èŠã«ãªããŸãïŒãã°ä¿®æ£ãªãªãŒã¹ã§éåžžã«é«éã«ããå Žåãé€ããŸãããçãããã§ã...ïŒ
ããã¯äžå¯èœã®ããã§ããããæ¯
@thomasjpfan ãäºæž¬ã®ä»£ããã«æšå®éãå ¥åãšããŠæž¡ãçç±ã¯ãããŸããïŒ
APIèšèšãåæ€èšããå¿ èŠãããããšã«åæããŸãã ãŸãã @ amuellerã«pingããã ãã
ãŠãŒã¶ãŒãç¬èªã®ããããéšåãæäŸããç¬èªã®æ··åè¡åãæäŸãããå ŽåïŒ
from sklearn.metrics import ConfusionMatrixDisplay
confusion_matrix = confusion_matrix(...)
display_labels = [...]
disp = ConfusionMatrixDisplay(confusion_matrix=confusion_matrix,
display_labels=display_labels)
disp.plot(...)
ããã¯ãä»ã®ã¡ããªãã¯ããããé¢æ°ã§ãåæ§ã«å®è¡ã§ããŸãã
plot_confusion_matrix
ã¯ãæšå®éã®åºåãé©åã«åŠçã§ããã¹ã³ã¢ã©ãŒã®ããã«èšèšãããŠããŸãã èšãæããã°ãããã¯ConfusionMatrixDisplay
ãšæšå®éãæäœããããã®äŸ¿å©ãªã©ãããŒã§ãã
æåã«æšå®éãåãå
¥ããããšã«ãããããããé¢æ°ã®çµ±äžãããã€ã³ã¿ãŒãã§ãŒã¹ããããŸãã ããšãã°ã plot_partial_dependence
ã¯ãéšåäŸåããããã®äœæã«å¿
èŠãªãã¹ãŠã®èšç®ãå®è¡ãããããPartialDependenceDisplay
æž¡ããŸãã ãŠãŒã¶ãŒã¯åŒãç¶ãPartialDependenceDisplay
èªåã§äœæã§ããŸããããã®å Žåã¯ããã«è€éã«ãªããŸãã
ãã ããç§ã¯ãé«éãã¹ãã䜿çšããŠã y_pred
ãã¡ããªãã¯é¢é£ã®ããããé¢æ°ã«æž¡ãããšãã§ããŸããããã¯confusion_matrix
çŽæ¥æž¡ãããæ€èšŒãåŠçããŸãã
PDPãæ§ç¯ããããã«å¿ èŠãªäºæž¬ã®èšç®ã¯éåžžã«è€éã§ãã ãŸãããããã®äºæž¬ã¯éåžžãã¹ã³ã¢ã©ãŒãã¡ããªãã¯ãªã©ã§ã¯äœ¿çšã§ããŸããã ãããã¯ãPDPã®ããããã«ã®ã¿åœ¹ç«ã¡ãŸãã ãããã£ãŠããã®å Žåãplot_partial_dependenceã®æšå®éã®ã¿ãåãå ¥ããããšã¯çã«ããªã£ãŠããŸãã
æ··åè¡åã®OTOHãäºæž¬ã¯å®éã«ã¯est.predict(X)
ã§ãã
ããã§ã¯çµ±äžãããã€ã³ã¿ãŒãã§ãŒã¹ã¯å¿ èŠãªããšæããŸãã ãããã¯2ã€ã®éåžžã«ç°ãªãå ¥åãŠãŒã¹ã±ãŒã¹ã§ã
ç·šéïŒããã«ãããªãŒããŒã¹ã®PDPã¯äºæž¬ããå¿ èŠãããŸãã
èŠç©ããããŒã«ãªãã§ééããããšã¯ä»ã«ããããŸãã ããšãã°ã plot_precision_recall_curve
ãy_pred
ãåãå
¥ããå Žåãæšæž¬ã§ããªããªãããã pos_label
ãå¿
èŠã«ãªããŸãã ãã®å Žåã PrecisionRecallDisplay
çŽæ¥äœ¿çšããŠããããããåæ§ç¯ããããã«å¿
èŠãªãã©ã¡ãŒã¿ãŒããŠãŒã¶ãŒã«èšç®ãããããšããå§ãããŸãã
ããã¯ããã®APIã§ã©ã®ãããªè³ªåã«çããŠããããšããããšã«ãªããŸãã çŸåšã®ã€ã³ã¿ãŒãã§ãŒã¹ã¯ãæšå®éã®è©äŸ¡ãäžå¿ã«å±éããŠãããããæšå®éãåŒæ°ãšããŠäœ¿çšããŸãã ããã®ãã¬ãŒãã³ã°ãããã¢ãã«ã¯ããã®å ¥åããŒã¿ã§ã©ã®ããã«åäœããã®ã§ããïŒããšçããããšã«ãã£ãŠåæ©ä»ããããŸãã
y_pred, y_true
ãåãå
¥ãããšãããã®ã¡ããªãã¯ã¯ãã®ããŒã¿ã§ã©ã®ããã«åäœãããããšãã質åã«ãªããŸãã ãã®ããŒã¿ã¯ãã¢ãã«ã«ãã£ãŠçæãããå Žåãšçæãããªãå ŽåããããŸãã
ãã®ç¹å®ã®ã±ãŒã¹ã§ã¯ã @ jhennrichãConfusionMatrixDisplayãçŽæ¥äœ¿çšããŠããå¯èœæ§ãããã®ã¯
1ã€ã®æ¬ ç¹ã¯ãããã©ã«ãããªãããã display_labels
ãæå®ããå¿
èŠãããããšã§ãã
@thomasjpfanäžè¬ã«ãDisplayãªããžã§ã¯ãã«
display_labels
ãªã©ã®äžéšã®ãã©ã¡ãŒã¿ã«ã¯ãé©åãªããã©ã«ãããããŸãã ä»ã®Display
ãªããžã§ã¯ããã©ã¡ãŒã¿ã«ãé©åãªããã©ã«ããèšå®ã§ããŸãã äžéšã®ãã©ã¡ãŒã¿ãŒãæå®ããå¿
èŠããããŸãã ããšãã°ã confusion_matrix
ã¯ConfusionMatrixDisplay
ãŸãã¯precision
ã recall
ã¯PrecisionRecallDisplay
æäŸãããå¿
èŠããããŸãã
ãã®çš®ã®ãã®ã®1ã€ã®å€å žçãªãã¿ãŒã³ã¯ã次ã®ããã«å®çŸ©ããŠããŸãã
ConfusionMatrixDisplay.from_estimator(...)
ConfusionMatrixDisplay.from_predictions(...)
ããããããã¯scikit-learnã«ãšã£ãŠããŸãæ £çšçã§ã¯ãããŸããã
ç§ã¯æ··ä¹±ãå§ããŸãã çŸåšã®APIã®ç®æšã¯ããŠãŒã¶ãŒãè€æ°åãããããããå Žåã«è€æ°åã®èšç®ãåé¿ããããšã§ãããy_trueãšy_predãåãå ¥ããå Žåã§ãããŠãŒã¶ãŒã¯è€æ°åèšç®ããå¿ èŠã¯ãããŸãããïŒ ïŒç§ã¯ç©äºãPDPã§ç°ãªãããšãç¥ã£ãŠããŸãïŒ
@jnothmanãã®APIã¯èŠæ ãããšãŠãè¯ãã§ãïŒ
@ qinhanmin2014 estimator, X, y
ãŸãã¯y_true, y_pred
æž¡ããšããè€æ°åèšç®ããªããAPIãæºããããšãã§ããŸãã ã©ã¡ãã®å Žåããæ··åè¡åãèšç®ããã Display
ãªããžã§ã¯ãã«æ ŒçŽãããŸãã
ãããã®éãã¯ãæ··åè¡åã®èšç®ãå§ãŸããšããã§ãã ãã¹y_pred
ã¯ãæšå®éã®ãäºåèšç®ããããå€ãšèããããšãã§ããŸãã
ãããã£ãŠã y_true, y_pred
ã¯estimator, X, y
ãããåªããŠãããšæããŸãïŒãã¡ããPDPã«ã¯ãããŸããïŒããªããªãããŠãŒã¶ãŒã¯äºæž¬ããããããããã ãã§ãªããäºæž¬ãåæãããå Žåãããããã§ãã çŸåšã®APIã§ã¯ãè€æ°åã®äºæž¬ãèšç®ããå¿
èŠããããŸãã
ææšã«ã€ããŠã¯ã y_true, y_pred
ãããestimator, X, y
y_true, y_pred
ã䜿çšããæ¹ã奜ãŸããŠããããšãããããŸãã ã¡ããªãã¯ã®ãããããy_true, y_pred
ã®ã¿ããµããŒãããå Žåãæ³åããŠã¿ãŠãã ãã
est = # fit estimator
plot_partial_dependence(est, X, ...)
# if plot_confusion_matrix accepts `y_true, y_pred`
y_pred = est.predict(X)
plot_confusion_matrix(y_true, y_pred, ...)
# if plot_roc_curve supports `y_true, y_score`
y_score = est.predict_proba(X)[: , 1]
plot_roc_curve(y_true, y_score, ...)
plot_precision_recall_curve(y_true, y_score, ...)
çŸåšãAPIã¯æ¬¡ã®ããã«ãªã£ãŠããŸãã
est = # fit estimator
plot_partial_dependence(est, X, ...)
plot_confusion_matrix(est, X, y, ...)
plot_roc_curve(est, X, y, ...)
# this will call `predict_proba` again
plot_precision_recall_curve(est, X, y, ...)
ïŒã©ããããããïŒäž¡æ¹ã®ãªãã·ã§ã³ããµããŒãããAPIã欲ããã§ãã
ã¡ããªãã¯ã«ã€ããŠã¯ãæšå®éXãyãããy_trueãy_predã䜿çšããæ¹ãåªå ãããŠããããšãããããŸãã ã¡ããªãã¯ã®ãããããy_trueãy_predã®ã¿ããµããŒãããå Žåãæ³åããŠã¿ãŠãã ãã
ã¯ãããããç§ã®èšãããããšã§ãã
ïŒã©ããããããïŒäž¡æ¹ã®ãªãã·ã§ã³ããµããŒãããAPIã欲ããã§ãã
ããã¯å®çšçãªè§£æ±ºçã ãšæããŸãã åä»ãªã®ã¯ãæåŸã«y_predããè¿œå ã§ããªãããšã§ãïŒã€ãŸããplot_confusion_matrixïŒestimatorãXãy_trueã...ãy_predïŒïŒ
ãããããã¯æåŸã«ãªããAPIã¯æ¬¡ã®ããã«ãªããŸãïŒ
plot_confusion_matrix(y_true=y_true, y_pred=y_pred, ...)
ç§ã¯ããã§å€§äžå€«ã ãšæããŸãã ããã¯æ¬è³ªçã«PRã§ãhttps://github.com/scikit-learn/scikit-learn/pull/15883
ãããããã¯æåŸã«ãªããAPIã¯æ¬¡ã®ããã«ãªããŸãplot_confusion_matrixïŒy_true = y_trueãy_pred = y_predã...ïŒ
y_trueãè¿œå ããestãšXãåé€ããå¿ èŠããããšããããšã§ããã äžå¯èœã ãšæããŸããïŒ ïŒæåŸã«y_predããè¿œå ã§ããªãããïŒ
ããã0.22.1ã§è§£æ±ºããŸããïŒ @NicolasHug @thomasjfoxããã0.22.1ã«å ¥ãã䟡å€ããããšæããŸãããåæã«ãããã¯æ°ããæ©èœã®ããã§ãã
ãããã0.22.1ã«ã¯å ¥ããªãã§ãã ããã ããã¯æããã«semverã®éåã§ã
@ qinhanmin2014æåŸã«y_pred
ãè¿œå ãããã est, X
åé€ããããšã¯ã次ã®ãªãªãŒã¹ã«å±ããæ°æ©èœã®ããã§ãã
y_trueãè¿œå ããestãšXãåé€ããå¿ èŠããããšããããšã§ããã äžå¯èœã ãšæããŸããïŒ
ãŠãŒã¹ã±ãŒã¹ããããã«ç°ãªããããæçµçã«ã¯äž¡æ¹ã®ã€ã³ã¿ãŒãã§ã€ã¹ããµããŒãããããšããå§ãããŸãã
est, X
ã¯ãé¢æ°ãå¿çé¢æ°ã®éžæãçµæã®ã¹ã©ã€ã¹ãããã³ã¡ããªãã¯ãžã®åãæž¡ããåŠçãããããè¿
éãªåæãè¡ãã®ãç°¡åã§ããy_true, y_pred
ã¯ãåºã«ãªãææšã®æäœæ¹æ³ãç解ããäºæž¬ããã§ã«ä¿åãããŠãããŠãŒã¶ãŒåãã§ããhttps://github.com/scikit-learn/scikit-learn/issues/15880#issuecomment -565489619ãå®è¡ããããšã®åé¡ã¯äœã§ããïŒ
ç§ã¯ãã®ã¹ã¬ããå
šäœãèªãã§ããŸããããããã§ã€ã³ã¿ãŒãã§ãŒã¹ãèš±å¯ããå Žåã¯ã plot_roc_curve
ã§ããããè¡ãå¿
èŠããããŸããããã§ãã€ã³ã¿ãŒãã§ãŒã¹ã¯äºæž¬ã®æäŸãšæšå®éã®æäŸã§å€§ããç°ãªããŸãïŒäžæ¹ã¯pos_labelãå¿
èŠã§ãããäžæ¹ã¯å¿
èŠãããŸããïŒ 'NSïŒã
ãããã£ãŠãåãã€ã³ã¿ãŒãã§ãŒã¹ã§äž¡æ¹ãèš±å¯ããããšã¯æªãèãã ãšæããŸãïŒèª°ããæšå®åšãæž¡ããšãã«pos_labelãæž¡ããäºæããªãçµæãåŸãã§ãããïŒã
ConfusionMatrixDisplay.from_estimator(...)
ConfusionMatrixDisplay.from_predictions(...)
åäœããå¯èœæ§ã¯ãããŸãããåºæ¬çã«plot_confusion_matrix
åé·ã«ãªããããé¢æ°ãå床åé€ããã¯ã©ã¹ãšé¢æ°ã®éã®è²¬ä»»ãå€æŽããŸãïŒã¯ã©ã¹ã¯èšç®ãè¡ããªããšè¿°ã¹ãŸããïŒã
from_predictions
ãplot_roc_curve
ã«è¿œå ããå Žåã¯ãåºæ¬çã«roc_curve
ã€ã³ã¿ãŒãã§ã€ã¹ãå®å
šã«ãã©ãŒãªã³ã°ããå¿
èŠããããŸãã ãããã£ãŠããŠãŒã¶ãŒãroc_curve
é¢æ°ãçŽæ¥åŒã³åºããŠããã®çµæãDisplayãªããžã§ã¯ãã«æž¡ãã®ã¯ããã»ã©æªãããšã§ã¯ãªããšæããŸãã
衚瀺ãªããžã§ã¯ãã®èšèšã®å šäœçãªç®çã¯ã@ jhennrichãèšåãããŠãŒã¹ã±ãŒã¹ãšãèšç®ãé¢æ°ããåé¢ããçç±ãèš±å¯ããããšã§ããã ãªããã®æ±ºå®ãåãæ¶ãã¹ããã«ã€ããŠã®è°è«ã¯ãŸã èŠãŠããŸããã
@amuelleræè¡çã«ã¯æ£ããã§ãããç§ã®åé¡ã«å¯ŸããçŸåšã®è§£æ±ºçã¯ã ConfusionMatrixDisplay
䜿çšããããšã§ãã ãã ãã䜿çšããã®ã¯æ¬åœã«äžåšçšã§ãã
plot
ã¡ãœãããåŒã³åºãå¿
èŠããããŸãç§ã¯èããããšãã§ãããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã®ããã®plot_confusion_matrix
ã§çœ²å(y_true, y_pred, ...)
æã
ãçŸåšæã£ãŠãããã®ãããã¯ããã«äŸ¿å©ã§ãã ç§ã®æèŠã§ã¯ãäºæž¬ãæ瀺çã«èšç®ããããŠãŒã¹ã±ãŒã¹ã¯ãã£ãšãããããããŸãïŒç§ã®èŠè§£ã¯åã£ãŠãããšç¢ºä¿¡ããŠããŸããïŒã
plot_confusion_matrix(y_true, y_pred)
眲åããããå®éã«estimator
ã x
ã y
ããŒã¿ã§äœ¿çšãããå Žåãè¿œå ã®ã³ãŒãã¯ã»ãšãã©ãããŸããã ïŒ plot_confusion_matrix(y, estimator.predict(x))
ã
ããã«æ¯ã¹ãŠãçŸåšã®çœ²åãããã y_true
ãšy_pred
ãããããããããå Žåã¯ãããã«å€ãã®ã³ãŒããäœæããå¿
èŠããããŸãã
ç§ã®æèŠã§ã¯ã plot_confusion_matrix(y_true, y_pred)
眲åãããã©ã«ãã§ããã estimator
ã x
ã y
ãåãåãå¥ã®é¢æ°ããã®äžã«æ§ç¯ããå¿
èŠããããŸãã
倧äºãªããšãèšãå¿ããŸããããç§ã¯æ£çŽã«èšã£ãŠã ConfusionMatrixDisplay
ã¯ã©ã¹ã®èåŸã«ããèãæ¹ãæ¬åœã«ç解ããŠããŸããã ãã®é¢æ°ã«ã¯ã³ã³ã¹ãã©ã¯ã¿ãŒã1ã€ãšã¡ãœããã1ã€ãããªãããããã®é¢æ°ã䜿çšãããã³ã«ãã€ã³ã¹ã¿ã³ã¹ãäœæããŠplot
é¢æ°ãåŒã³åºãããšã«ãªããŸãã ãããåãªãé¢æ°ã§ã¯ãªãã¯ã©ã¹ã§ããçç±ãããããŸããã ãŸããä»ã®*Display
ã¯ã©ã¹ïŒPrecisionRecallãROCãªã©ïŒããããŸããããããã®ã³ã³ã¹ãã©ã¯ã¿ãŒçœ²åãšplot()
眲åã¯å®å
šã«ç°ãªãããããšã«ãã亀æããããšã¯ã§ããŸããã
å€åããã¯ãã®åé¡ã®ç¯å²ãè¶
ããŠããŸãã
@jhennrich
plot_confusion_matrixïŒy_trueãy_predïŒçœ²åãããããããestimatorãxãyããŒã¿ã§å®éã«äœ¿çšãããå Žåãèšè¿°ããè¿œå ã®ã³ãŒãã¯ãããããã§ãïŒplot_confusion_matrixïŒyãestimator.predictïŒxïŒïŒã
æ··åè¡åã®å Žåã y_true, y_pred
ã€ã³ã¿ãŒãã§ã€ã¹ãããã°ã estimator.predict
ãæž¡ãã®ã¯ç°¡åã§ãã äžæ¹ã plot_roc_auc
å ŽåããŠãŒã¶ãŒã¯ã¹ã©ã€ã¹ãè¡ãå¿
èŠããããŸãã
y_pred = est.predict_proba(X)
plot_roc_curve(y_true, y_pred[:, 1])
# or
y_pred = est.decision_function(X)
plot_roc_curve(y_true, y_pred[:, 1])
倧äºãªããšãèšãå¿ããŸããããç§ã¯ConfusionMatrixDisplayã¯ã©ã¹ã®èåŸã«ããèãæ¹ãæ£çŽã«ç解ããŠããŸããã ãã®é¢æ°ã«ã¯ã³ã³ã¹ãã©ã¯ã¿ãŒã1ã€ãšã¡ãœããã1ã€ãããªãããããã®é¢æ°ã䜿çšãããã³ã«ãã€ã³ã¹ã¿ã³ã¹ãäœæããŠããããé¢æ°ãåŒã³åºãããšã«ãªããŸãã ãããåãªãé¢æ°ã§ã¯ãªãã¯ã©ã¹ã§ããçç±ãããããŸããã
Display
ãªããžã§ã¯ãã®ç®çã¯ãèšç®ãããå€ãæ ŒçŽããŠããŠãŒã¶ãŒãåèšç®ããã«plot
äœåºŠãåŒã³åºãããšãã§ããããã«ããããšã§ãã ããã¯plot_partial_dependence
ã䜿çšããŠç¢ºèªã§ããŸãïŒ
# Does expensive computation
disp = plot_partial_dependence(est, ...)
# change line color without needing to recompute partial dependence
disp.plot(line_kw={"c": "red"})
æ£çŽãªãšãããç§ã¯ãã®åé¡ã«ã€ããŠå±æ©ã«çããŠããŸãã est, X, y
ã€ã³ã¿ãŒãã§ã€ã¹ãããããããŠåé€ããããã«ãã¡ããªãã¯ã€ã³ã¿ãŒãã§ã€ã¹ãã³ããŒããæ¹åã«é²ãã§ããŸãã ïŒ/
æ··åè¡åã®å Žåãy_trueãy_predã€ã³ã¿ãŒãã§ãŒã¹ãããã°ãestimator.predictãæž¡ãã®ã¯ç°¡åã§ãã äžæ¹ãplot_roc_aucã®å ŽåããŠãŒã¶ãŒã¯ã¹ã©ã€ã¹ãè¡ãå¿ èŠããããŸãã
ã¯ãããã ããããããããšã§ãè€æ°åã®äºæž¬ã®èšç®ãåé¿ã§ããŸãïŒãã ããäºæž¬ã¯ããã»ã©è²»çšãããããªãããšããããããŸãïŒã
ããããå®çšçãªè§£æ±ºçã¯ã0.23ã®plot_XXXïŒè©²åœããå ŽåïŒã§y_true, y_pred
ããµããŒãããããšã§ãã
@jhennrichã©ãã«ãæ瀺çã«æž¡ããã«ãããã©ã®ããã«è¡ãã®ã§ããïŒ äžãããããã®ããã©ãã«ãæšæž¬ã§ããå Žåã¯ã confusion_matrix
ããããè¡ããŸãã
ãããã確ãã«ããªãã¯æ£ããã§ããããã¯1ã€ã§ã¯ãªã3ã€ã®è¡ã§ãã
confusion_matrixã®å Žåãããäžè¬çãªã±ãŒã¹ãy_true
ãšy_pred
ãæž¡ãå¯èœæ§ãããããšã«åæããåŸåããããŸãã
ã€ã³ã¿ãŒãã§ã€ã¹ãçŸåšã®æ¹æ³ã§ããçç±ã¯ãä»ã®ã¡ããªãã¯ããããé¢æ°ãšäžè²«æ§ãä¿ã€ããã§ãã @thomasjpfanãèšã£ãããã«ãrocæ²ç·ãããããããã®ã¯ããŸãæçœã§ã¯ãããŸããã
çŸåšãæ··åè¡åãããããããããã®ã³ãŒããšrocæ²ç·ãããããããããã®ã³ãŒãã¯åãã§ãã ææ¡ãããå€æŽã«ããããããã¯ãã¯ãåãã§ã¯ãªããªããåãã«ããç°¡åãªæ¹æ³ã¯ãããŸããã
åé¡ã¯ããã®å Žåãäžè²«æ§ã®ããã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããæ¹ãããã®ãããããšãåçŽãªã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããæ¹ãããã®ããšããããšã§ãã
@jhennrichç§ã«ãšã£ãŠæ¬åœã®åé¡ã¯ã plot_roc_curve
ã®é©åãªã€ã³ã¿ãŒãã§ã€ã¹ãäœã§ããããšããããšã§ãã ããªãã¯ããã«ã€ããŠèãããããŸããïŒ
@thomasjpfan roc aucã®ããããã«ãy_store
ã䜿ãåŸåããããŸããïŒ
ã¡ããªãã¯ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšãã代ããã«ã¹ã³ã¢ã©ãŒã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããããšã«ã¯ã確ãã«é·æãšçæããããŸãã ãã ããããè€éãªå Žåã¯ãã¹ã³ã¢ã©ãŒã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããæ¹ãã¯ããã«å®å šã§ãã
@ qinhanmin2014
y_pred
ãplot_confusion_matrix
ã«è¿œå ããŠãåé¡ãªããšæããŸãã åé¡ã¯ã y_score
ãplot_roc_curve
ãšplot_precision_recall_curve
ã«è¿œå ãããã©ããã§ãã ãããããšãäžã§è¿°ã¹ãããã«pos_label
ãè¿œå ããå¿
èŠããããäºæ
ã¯ããã«è€éã«ãªããŸãã
ç§ã¯ãããã3ã€ã®æ¹æ³ãèŠãŸãïŒ
aïŒ y_pred
ãplot_confusion_matrix
ã«è¿œå ããã ãã§ã y_score
ãplot_roc_curve
ãªã©ã«è¿œå ããªãã§ãã ãããæ¬ ç¹ïŒ predict_proba
åŒã³åºãã®åé¡ãããã®ã¡ããªãã¯ã«ã¯è€æ°åååšãç¶ããŸãã
bïŒ Display
ãªããžã§ã¯ããçŽæ¥äœ¿çšããããããŸãïŒæ¹æ³ã¯ããããŸãããïŒã
cïŒã¡ããªãã¯ã€ã³ã¿ãŒãã§ã€ã¹ããã©ãŒãªã³ã°ããå¥ã®ã¡ãœãããŸãã¯é¢æ°ãè¿œå ããŸãã æ¬ ç¹ïŒAPIãµãŒãã§ã¹ã倧ãããªããŸãã
äžè¬ã«ã plot_X
é¢æ°ã§ã¹ã³ã¢ã©ãŒãšã¡ããªãã¯ã€ã³ã¿ãŒãã§ã€ã¹ã®äž¡æ¹ãåæã«ãã©ãŒãªã³ã°ããããšã¯è¯ãèãã§ã¯ãªããšæããŸãã
ãªãããã®æ¹æ³ã§ããã解決ã§ããã°çŽ æŽããããšæããŸã@adrinjalali次ã®äŒè°ã§è©±ãåãããã§ããïŒ
ç§ã¯æã ãã®åé¡ã«ã€ããŠæªå€¢ãèŠãŸãã ã¡ããªãã¯ã®åºåãçŽæ¥åãåãéçã¡ãœãããè¿œå ã§ãããããããŸããã
result = confusion_matrix(...)
ConfusionMatrixDisplay.from_metric(result).plot()
rocæ²ç·ã®å ŽåïŒ
result = roc_curve(...)
RocCurveDisplay.from_metric(*result).plot()
ã¡ãªã¿ã«ãã³ãŒãããŒã¹ãèŠããšãã¹ã³ã¢ã€ã³ã¿ãŒãã§ã€ã¹ãããã¡ããªãã¯ã€ã³ã¿ãŒãã§ã€ã¹ã«ç²ŸéããŠãããŠãŒã¶ãŒãå€ããšæããŸãã
ç§ã¯æã ãã®åé¡ã«ã€ããŠæªå€¢ãèŠãŸãã
倧é ïŒïŒ
ã¡ãªã¿ã«ãã³ãŒãããŒã¹ãèŠããšãã¹ã³ã¢ã€ã³ã¿ãŒãã§ã€ã¹ãããã¡ããªãã¯ã€ã³ã¿ãŒãã§ã€ã¹ã«ç²ŸéããŠãããŠãŒã¶ãŒãå€ããšæããŸãã
ããã¯ééããªãæ¬åœã ãšæããŸãã ãããã y_score
ã䜿çšããå¿
èŠããããšãã«y_pred
ã䜿çšããã€ã³ã¿ãŒãã§ã€ã¹ãå¥ã®ããšãè¡ãå¿
èŠãããããšãéç¥ããªããããééã£ãçµæãåŸãããããšã確ãã§ããããã¥ã¡ã³ããèªã人ãããŸãã
ææ¡ããéçã¡ãœãããã³ã³ã¹ãã©ã¯ã¿ãŒãšã©ã®ããã«ç°ãªããã¯ããããŸããããäœããèŠèœãšããŠããå¯èœæ§ããããŸãã
ããã«ã¡ã¯ãç§ã¯ãã®åé¡ã«è³æ祚ãæããŸãã-é·å¹Žã®sklearnãŠãŒã¶ãŒãšããŠãç§ã¯plot_confusion_matrix
ã®çŸåšã®APIãéåžžã«...ãŸããæ··ä¹±ãããŠããããšã«æ°ã¥ããŸããã ç§ã¯ãã®è¿œå ïŒã³ããŒè²Œãä»ããå°ãªãïŒãæ¬åœã«å¥œãã§ãããã¡ããªãã¯é¢æ°ã¯åžžã«ïŒy_trueãy_predïŒã¹ããŒã ã䜿çšããŠããŸãããããã¯ãããæè»ã§ãç§ããã§ã«æ
£ããŠãããã®ã§ãã
ç§ã®å Žåãæšå®åšãæž¡ãããšã¯æå³ããããŸãããããã¯éåžžã«é
ãã¢ãã«ã§ãããçµæãåæãããã³ã«åå®è¡ããã®ã§ã¯ãªãããã¡ã€ã«ããäºæž¬ãããŒããããããã§ãã ãã®ã¹ã¬ããã§* Displayãªããžã§ã¯ãã䜿çšããåé¿çãããããšãç¥ã£ãŠããããã§ããããã®çºèŠå¯èœæ§ã¯ããŸãè¯ããããŸãã-å°ãªããšããããplot_confusion_matrix
ããã¥ã¡ã³ããŸãã¯æ··åè¡åãŠãŒã¶ãŒã¬ã€ãã«è¿œå ããããšããå§ãããŸãïŒ
ç§ã®å Žåãæšå®éãæž¡ãããšã¯æå³ããããŸãããããã¯éåžžã«é ãã¢ãã«ã§ãããäºæž¬ãããŒããããããã§ãã
ãæèŠããããšãããããŸãã çŸåšã®APIãæ··ä¹±ããŠããå Žåã¯ãããå€ãã®ã¡ããªãã¯ã«ç§»è¡ããæ¹ãçã«ããªã£ãŠããŸããAPIã®ãããªã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠãçã¿ã䌎ãéæšå¥šãµã€ã¯ã«ãå®è¡ããŸãã
ã¡ããªãã¯ã€ã³ã¿ãŒãã§ã€ã¹ã®äœ¿çšã«é¢ããæ倧ã®æžå¿µäºé ã¯æ¬¡ã®ãšããã§ãã
ããããy_scoreã䜿çšããå¿ èŠããããšãã«y_predã䜿çšããã€ã³ã¿ãŒãã§ã€ã¹ãå¥ã®ããšãè¡ãå¿ èŠãããããšãéç¥ããã誰ãããã¥ã¡ã³ããèªãŸãªããããééã£ãçµæãåŸãããããšã確ãã§ãã
@pzelaskoãã®åé¡ã«ã€ããŠã©ãæããŸããïŒ
@thomasjpfanç§ã¯åé¡ãç解ããŠããŸããããã¯é£ããåé¡ã§ãã ãããããåççãªåŠ¥åæ¡ã¯ããã®é¢æ°ã®ããŒã¯ãŒãåŒæ°ã®ã¿ãèš±å¯ããããšã§ãïŒPython 2ããµããŒãããå¿
èŠããªããªã£ãããïŒã ã®ããã«ïŒ def plot_confusion_matrix(*, y_true, y_pred, ...)
ã ããã§ãä»ã®ã¡ããªãã¯ãšã¯ç°ãªããŸããã1ïŒããã«ã¯ååãªçç±ãããã2ïŒå°ãªããšãä»ã®é¢æ°ãšåãã¿ã€ãã®å
¥åã䜿çšããŠããŸãã
ãšã«ãããAPIã®å€æŽãèºèºããçç±ã¯ããã£ãŠããã®ã§ãå°ãªããšãããã¥ã¡ã³ãã§åé¿çã«ã€ããŠèšåããããšããå§ãããŸããã ïŒç§ã¯å®éã«ããããäœåºŠãèªãã ããšããããæ¬åœã«æè¬ããŠããŸãïŒïŒ
y_true
ãšy_pred
ã䜿çšããçŸåšã®æ¹æ³ã¯ã次ã®ãšããã§ããhttps ïŒ//scikit-learn.org/stable/auto_examples/miscellaneous/plot_display_object_visualization.html#create -confusionmatrixdisplay
ç§ã¯ããã§ã¹ãã¬ããããŠããããšãç¥ã£ãŠããŸãããããã¯ã©ãã§ããïŒ
plot_confusion_matrix(estimator='precomputed', y_true, y_pred, ...)
第äºã®äœçœ®ãåãå
¥ãããšããy_true
äºèšãã®ããã«estimator='precomputed
ã
ããã«ã¹ãã¬ãããããå Žåã¯ã plot_confusion_matrix((estimator, X, y), ...)
ãŸãã¯plot_confusion_matrix((y_true, y_pred), ...)
ããå§ãããŸãããã¡ããªãã¯ã®ãããªAPIã«é¢ããŠããããŸããã
metric
APIãèš±å¯ããããšãæ¬åœã«çã«ããªã£ãŠããããã€ãã®æ°ãããããããŠãŒãã£ãªãã£ããããŸãã
plot_prediction_error
plot_calibration_curve
@amuellerãpos_label
ãªã©ãæž¡ãå¿
èŠããããšè¿°ã¹ãåé¡ãç解ããŠããŸãããããã¯åè¿°ã®é¢æ°ã®ãããã«ã€ããŠãåé¡ã§ã¯ãããŸããã
ããã2ã€ã®ã¹ã³ã¢ã©ãŒAPIãšã¡ããªã¯ã¹APIã®äž¡æ¹ããµããŒãããŠã倧äžå€«ã§ããïŒ ããã§ã¯äžäœäºææ§ã«ã€ããŠå¿é ããå¿ èŠã¯ãããŸããã
ç§ã¯ãŸã precomputed
ã䜿çšããããšãææ¡ããŠããŸããããã¯ãæšå®åšã§äžè¬çã«äœ¿çšãããŠããŸãã ãã®å Žåã眲åã¯æ¬¡ã®ããã«ãªããŸãã
plot_confusion_matrix(estimator='precomputed', y_true, y_pred, ..., metric_kwargs=None)
ãããã©ã®ããã«èŠãããã確èªããããã«PRããŸãšããŸãã
APIã«ã€ããŠã¯ãŸã å®éã«ã¯èª¬æããŠããŸããããæ°ããPRã®äž¡æ¹ã®ãªãã·ã§ã³ããµããŒãããŠããããã©ããã ããå°ããŠããŸãã
ïŒããããAPIã«é¢ããŠã¯ããäºåèšç®ãã¯ããŸã圹ã«ç«ããªããšæããŸãïŒ X
ã«ã€ããŠã©ãããã°ããã§ããïŒé©åã«ãšã©ãŒãçºçãããããšã«ãããïŒy_predïŒãšïŒestimatorãXïŒãçžäºã«æä»çã«ä¿ã€å¿
èŠããããšæããŸãããŸããæšå®éãäºåã«èšç®ããããšã¯ã©ãããæå³ã§ããïŒïŒ
ãŸãã¯ã estimator='none'
ã estimator='predictions'
ã estimator='precomputed_predictions'
å Žåã X
ã¯y_pred
ãŸãã¯y_score
ãŸãã ããX
ãæšå®éã§
ããã2ã€ã®ã¹ã³ã¢ã©ãŒAPIãšã¡ããªã¯ã¹APIã®äž¡æ¹ããµããŒãããŠã倧äžå€«ã§ããïŒ
äž¡æ¹ã®ãªãã·ã§ã³ãã©ã®ããã«ãµããŒãããŸããïŒ 2ã€ã®æ©èœã§ïŒ
ç§ã奜ãã ã£ãã ããïŒ
CalibrationDisplay.from_estimator(...)
CalibrationDisplay.from_predictions(...)
ããã¯2ã€ã®æ¹æ³ã«ãªããŸãã
ã¿ãã«ã®äœ¿çšã«é¢ããã®ãšãŒã ã®ææ¡https://github.com/scikit-learn/scikit-learn/issues/15880#issuecomment-670590882ã¯1ã€ã®ãªãã·ã§ã³ã§ãã æåããããããå§ããŠãããããããæåã®éžæè¢ã ã£ããšæããŸãã ããããã¿ãã«ã䜿çšãããšãæ¢åã®ãŠãŒãã£ãªãã£ãšã®äžè²«æ§ã倱ãããã®ã§ã¯ãªãããšå¿é ããŠããŸãã
çžäºæé€ã䌎ãplot_XYZ(estimator=None, X=None, y=None, y_pred=None)
ã¯å¥ã®ãªãã·ã§ã³ã§ãããä»ã®ãšããããããç§ãæå±ããŠãããªãã·ã§ã³ã§ãã
ç§ã¯CalibrationDisplay.from_estimator(...)
ã奜ãã§ãããAndyãææããããã«ã plot_XYZ
é¢æ°ãåé€ããå¿
èŠããããŸãã æ€èšãã䟡å€ããããããããŸããã
ã¿ãã«ã«ç§»åããŠãçŸåšã®åäœãéæšå¥šã«ããããšãã§ãããšæããŸãã ïŒã¿ãã«ã®äœ¿çšã«åæããéãïŒ
ããã§ãããã¯åå空éã«ã€ããŠè°è«ããŠããããã§ãããïŒ
1ã€ã®é¢æ°ãš1ã€ã®ã³ã³ã¹ãã©ã¯ã¿ãŒã2ã€ã®ã¯ã©ã¹ã¡ãœããããŸãã¯2ã€ã®é¢æ°ã®ãããã§ãã£ãŠãããŸã£ããåãæ©èœã§ãããåºæ¬çã«åãã³ãŒãã§ãã
@pzelasko @jhennrich 2ã€ã®ã¯ã©ã¹ã¡ãœãããŸãã¯2ã€ã®é¢æ°ãããããšã«ã€ããŠã©ãæããŸããïŒ ãŸãã¯ãPythonã§ã¯å°ãé¢åãªåäžã®é¢æ°ããå§ãããŸãã
ãŸãã2ã€ã®é¢æ°ãŸãã¯2ã€ã®ã¯ã©ã¹ã¡ãœããã奜ãå ŽåãçºèŠå¯èœã§ããã«ãããããããäœãå©ç¹ããããŸããïŒ çºèŠå¯èœæ§ã¯ã¯ã©ã¹ã¡ãœãããå®è¡ããååãªçç±ãããããŸãããã2ã€ã®é¢æ°ãæã€ããšã«ã€ããŠã®åŒ·ãè°è«ã¯èŠåœãããŸããã
ããã«ãããã«ãŒã©ãã«ãè¿œå ã§ããŸããïŒ ïŒ18020ãšïŒ17443ïŒcc @cmarmoïŒã®é²è¡ã劚ããŠããããã§ã
ãããã«ãŒã©ãã«ã¯ãªãªãŒã¹ãããã«ãŒïŒãªãªãŒã¹åã«çµ¶å¯Ÿã«ä¿®æ£ããå¿ èŠããããã®ïŒçšã§ãããPRãããã«ãŒçšã§ã¯ãããŸãã
ãããç¥ã£ãŠããã£ãã
@pzelasko @jhennrich 2ã€ã®ã¯ã©ã¹ã¡ãœãããŸãã¯2ã€ã®é¢æ°ãããããšã«ã€ããŠã©ãæããŸããïŒ ãŸãã¯ãPythonã§ã¯å°ãé¢åãªåäžã®é¢æ°ããå§ãããŸãã
ãŸãã2ã€ã®é¢æ°ãŸãã¯2ã€ã®ã¯ã©ã¹ã¡ãœããã奜ãå ŽåãçºèŠå¯èœã§ããã«ãããããããäœãå©ç¹ããããŸããïŒ çºèŠå¯èœæ§ã¯ã¯ã©ã¹ã¡ãœãããå®è¡ããååãªçç±ãããããŸãããã2ã€ã®é¢æ°ãæã€ããšã«ã€ããŠã®åŒ·ãè°è«ã¯èŠåœãããŸããã
ç§ã¯2ã€ã®ã¯ã©ã¹ã¡ãœãããæãã¢ãããŒãããã®ã奜ãã§ããç¹ã«from_xxx
ãã¿ãŒã³ã奜ãã§ã- sth ïŒ
CalibrationDisplay.from_estimator(...) CalibrationDisplay.from_predictions(...)
2ã€ã®ã¯ã©ã¹ã¡ãœããã䜿çšããããšã«åŒ·ãå察ã¯ãªãããã«èŠããã®ã§ããããå®è¡ããŸãããã 次ã®ããšãè¡ãå¿ èŠããããŸãã
çŸåšååšããããããã®ã¯ã©ã¹ã¡ãœãããå°å ¥ããŸãã
ConfusionMatrixDisplay
PrecisionRecallDisplay
RocCurveDisplay
DetCurveDisplay
PartialDependenceDisplay
ã ããã«ã€ããŠã¯ã from_predictions
ã¯ã©ã¹ã¡ãœãããå°å
¥ããå¿
èŠã¯ãããŸãããæå³ããªãããã from_estimator
ã®ã¿ãå¿
èŠã§ããäžèšã®ãã¹ãŠã®ãã£ã¹ãã¬ã€ã§ã察å¿ããplot_...
é¢æ°ãéæšå¥šã«ããŸãã plot_det_curve
ã¯ãŸã ãªãªãŒã¹ãããŠããªããããéæšå¥šã«ããå¿
èŠã¯ãããŸãããåé€ããã ãã§ãã
ïŒ17443ãïŒ18020ãªã©ã®æ°ããPRã®å Žåã plot
é¢æ°ãå°å
¥ãã代ããã«ãã¯ã©ã¹ã¡ãœãããããã«å®è£
ã§ããŸãã
ããã¯å°ãæéãããããŸããã0.24ããåã«ãããå®è¡ã§ããã®ã§ãïŒ17443ãšïŒ18020ã¯ãã§ã«åé²ã§ãããšæããŸãã
ç°è°ã¯ãããŸãã@ thomasjpfan @ jnothman @amueller @glemaitre ïŒ
@jhennrich @ pzelasko ãDisplayãªããžã§ã¯ãã®1ã€ã«ã¯ã©ã¹ã¡ãœãããå°å ¥ããããã®PRãéä¿¡ããããšã«èå³ããããŸããïŒ
決å®ããŠãããŠããããšã@NicolasHugïŒ ïŒ17443ã«ä¹ããŸãïŒå察æèŠãåŸ ã£ãåŸïŒ
ç°è°ã¯ãããŸããã
ç°è°ããããŸããã
ãã®åŸãä»ã®ã¯ã©ã¹ã®é¢åãèŠãŠãè¡ãè©°ãŸã£ãPRãé²ããŸãã
@lucyleeowç§ãããããã¹ãŠãå®è¡ããªãã£ãå Žåãããªãã¯ããã€ãã®PRãæ€çŽ¢ããŠããŠãç§ã«pingã
è²¢ç®ãããã®ã§ãããä»ã¯ããŸãã«ãå€ãã®ãããžã§ã¯ãã«æºãã£ãŠããŸãã ææ¡ãèããŠãããŠããããšãïŒ
ããã§ãã ïŒïŒ