Scikit-learn: ์ œ์•ˆ: plot_confusion_matrix์—์„œ ์˜ˆ์ธก์„ ์ œ๊ฑฐํ•˜๊ณ  ์˜ˆ์ธก๋œ ๋ ˆ์ด๋ธ”๋งŒ ์ „๋‹ฌ

์— ๋งŒ๋“  2019๋…„ 12์›” 13์ผ  ยท  61์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: scikit-learn/scikit-learn

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 ๋ฅผ ์„ ํƒ์  ํ‚ค์›Œ๋“œ ์ธ์ˆ˜๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

model_selection

๋ชจ๋“  61 ๋Œ“๊ธ€

์šฐ๋ฆฌ๋Š” ํ™•์‹คํžˆ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•ด์•ผ ํ•˜์ง€๋งŒ y_pred ํ‚ค์›Œ๋“œ arg๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. y_pred๊ฐ€ ์ „๋‹ฌ๋˜์—ˆ์ง€๋งŒ X ๋˜๋Š” estimator๋„ ์ „๋‹ฌ๋˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@jhennrich PR์„ ์ œ์ถœํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

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

์ฝฐ๋ฅด๊ทธ๊ฐ€ ์™œ ๋ฌธ์ œ์ธ๊ฐ€?

ํ , ๊ทธ๋ž˜์„œ ๋˜ ๋‹ค๋ฅธ ์„ฑ๊ฐ€์‹  ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” plot_roc_curve ๋ฐ plot_precision_recall_curve(๋ฐ plot_partial_dependence)์—์„œ **kwargs๋ฅผ ์ง€์›ํ•˜์ง€๋งŒ plot_confusion_matrix์—์„œ๋Š” ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฝฐ๋ฅด๊ทธ๊ฐ€ ์™œ ๋ฌธ์ œ์ธ๊ฐ€?

**kwargs ์•ž์— ์ƒˆ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ฃ ?

๋‚ด PR์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์ด์ „ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜๋ฉฐ **kwargs๋ฅผ ๊ณ„์† ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ @qinhanmin2014 ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ํ›จ์”ฌ ๊นจ๋—ํ•œ ์†”๋ฃจ์…˜์€ estimator ๋ฐ X ๋ฒ„๋ฆฌ๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ๋‚ด์šฉ๊ณผ ์ผ์น˜ํ•˜๋Š” ์œ„์น˜ ์ธ์ˆ˜(y_true, y_pred, ...)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ 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 ๋ฐ estimator์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ ํŽธ๋ฆฌํ•œ wrapper์ž…๋‹ˆ๋‹ค.

์ถ”์ •๊ธฐ๋ฅผ ๋จผ์ € ์ˆ˜๋ฝํ•˜๋ฉด ํ”Œ๋กœํŒ… ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๊ท ์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 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๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ๋‹จ์ ์€ ๊ธฐ๋ณธ๊ฐ’์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— display_labels ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@thomasjpfan ์ผ๋ฐ˜์ ์œผ๋กœ Display ๊ฐœ์ฒด์— ํ•ฉ๋ฆฌ์ ์ธ ๊ธฐ๋ณธ๊ฐ’์„ ์ œ๊ณตํ•˜์—ฌ Display ๊ฐœ์ฒด๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

display_labels ์™€ ๊ฐ™์€ ์ผ๋ถ€ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฒฝ์šฐ ํ•ฉ๋ฆฌ์ ์ธ ๊ธฐ๋ณธ๊ฐ’์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ Display ๊ฐœ์ฒด ๋งค๊ฐœ๋ณ€์ˆ˜๋„ ์ ์ ˆํ•œ ๊ธฐ๋ณธ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, confusion_matrix ์ œ๊ณตํ•ด์•ผ ConfusionMatrixDisplay ๋˜๋Š” precision ๋ฐ recall ์— ๋Œ€ํ•ด PrecisionRecallDisplay .

์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๊ณ ์ „์ ์ธ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋Š” ๋‹ค์Œ์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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๋ฅผ ๊ฐ–๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค(์–ด์จŒ๋“ ).

๋ฉ”ํŠธ๋ฆญ์˜ ๊ฒฝ์šฐ estimator, 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๋ฅผ ์ œ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ง์”€์ด์‹ ๊ฐ€์š”? ๋ถˆ๊ฐ€๋Šฅํ•  ๊ฒƒ ๊ฐ™์€๋ฐ์š”?

๊ฒฐ๊ตญ ๋‚˜๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์•ฝ๊ฐ„ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

  1. est, X ๋Š” ์‘๋‹ต ํ•จ์ˆ˜ ์„ ํƒ, ๊ฒฐ๊ณผ ๋ถ„ํ•  ๋ฐ ๋ฉ”ํŠธ๋ฆญ์— ์ „๋‹ฌ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅธ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค.
  2. 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 ํด๋ž˜์Šค์˜ ์ด๋ฉด์— ์žˆ๋Š” ์•„์ด๋””์–ด๋ฅผ ์†”์งํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜์—๋Š” ๋‹จ์ผ ์ƒ์„ฑ์ž์™€ ์ •ํ™•ํžˆ ํ•˜๋‚˜์˜ ๋ฉ”์„œ๋“œ๋งŒ ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค ๊ฒฐ๊ตญ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  plot ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์™œ ์ด๊ฒƒ์ด ๋‹จ์ง€ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ํด๋ž˜์Šค์—ฌ์•ผ ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‹ค๋ฅธ *Display ํด๋ž˜์Šค(PrecisionRecall, ROC, ...)๊ฐ€ ์žˆ์ง€๋งŒ ์ƒ์„ฑ์ž์™€ plot() ์„œ๋ช…์ด ์™„์ „ํžˆ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์–ด์จŒ๋“  ๊ต์ฒดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์•„๋งˆ๋„ ์ด๊ฒƒ์€ ์ด ๋ฌธ์ œ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฉ๋‹ˆ๋‹ค.

@jhennrich

plot_confusion_matrix(y_true, y_pred) ์„œ๋ช…์ด ์žˆ๊ณ  ์‹ค์ œ๋กœ ์ด๋ฅผ ์ถ”์ •๊ธฐ, 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 ํด๋ž˜์Šค์˜ ์ด๋ฉด์— ์žˆ๋Š” ์•„์ด๋””์–ด๋ฅผ ์†”์งํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜์—๋Š” ๋‹จ์ผ ์ƒ์„ฑ์ž์™€ ์ •ํ™•ํžˆ ํ•˜๋‚˜์˜ ๋ฉ”์„œ๋“œ๋งŒ ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค ๊ฒฐ๊ตญ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ํ”Œ๋กฏ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์™œ ์ด๊ฒƒ์ด ๋‹จ์ง€ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ํด๋ž˜์Šค์—ฌ์•ผ ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

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 ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ”Œ๋กœํŒ…ํ•˜๊ณ  ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”ํŠธ๋ฆญ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๋ฐ +0.1์ž…๋‹ˆ๋‹ค. :/

ํ˜ผ๋™ ํ–‰๋ ฌ์˜ ๊ฒฝ์šฐ y_true, y_pred ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ estimator.predict๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— plot_roc_auc์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๋Š” ์Šฌ๋ผ์ด์‹ฑ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ํ•˜์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ์˜ˆ์ธก์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ์ธก์€ ์ข…์ข… ๊ทธ๋ ‡๊ฒŒ ๋น„์‹ธ์ง€ ์•Š์ง€๋งŒ)

์•„๋งˆ๋„ 0.23์˜ plot_XXX(ํ•ด๋‹น๋˜๋Š” ๊ฒฝ์šฐ)์—์„œ y_true, y_pred ๋ฅผ ์ง€์›ํ•˜๋Š” ์‹ค์šฉ์ ์ธ ์†”๋ฃจ์…˜์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@jhennrich ๋ ˆ์ด๋ธ”์„ ๋ช…์‹œ์ ์œผ๋กœ ์ „๋‹ฌํ•˜์ง€ ์•Š๊ณ  ์–ด๋–ป๊ฒŒ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ฃผ์–ด์ง„ confusion_matrix ์—์„œ ๋ ˆ์ด๋ธ”์„ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ทธ๋ ‡๊ฒŒ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ ๋‹น์‹ ์ด ์˜ณ์Šต๋‹ˆ๋‹ค. ํ•œ ์ค„์ด ์•„๋‹ˆ๋ผ ์„ธ ์ค„์ž…๋‹ˆ๋‹ค.

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 ๋„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋ฉฐ ์ƒํ™ฉ์ด ๋” ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์—์„œ ์„ธ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ๋ด…๋‹ˆ๋‹ค.
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_pred ๊ฐ€ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•  ๋•Œ y_score ํ•˜๊ณ  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ญ”๊ฐ€ ๋‹ค๋ฅด๊ณ  ์•„๋‹ˆ -์„ ํ•  ํ•„์š”๊ฐ€ ์žˆ์Œ์„ ๋งํ•ด์ฃผ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ณ ์žˆ๋‹ค ํ•œ ๋ฒˆ์€ ๋ฌธ์„œ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ์ œ์•ˆํ•œ ์ •์  ๋ฐฉ๋ฒ•์ด ์ƒ์„ฑ์ž์™€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๋ญ”๊ฐ€ ๊ฐ„๊ณผํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ๋ฐฉ๊ธˆ ๋ฌธ์ œ์— ์ฐฌ์„ฑํ‘œ๋ฅผ ๋˜์กŒ์Šต๋‹ˆ๋‹ค. ์˜ค๋žœ 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์™€ ๊ด€๋ จํ•˜์—ฌ @amueller๊ฐ€ ์ œ๊ธฐํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

metric API๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ด ์‹ค์ œ๋กœ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ํ”Œ๋กœํŒ… ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@amueller ๊ฐ€ pos_label ๋“ฑ์„ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์–ธ๊ธ‰ํ•œ ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜์ง€๋งŒ ์•ž์„œ ์–ธ๊ธ‰ํ•œ ๊ธฐ๋Šฅ์—๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๋‘ ๊ฐ€์ง€์— ๋Œ€ํ•ด ์Šค์ฝ”์–ด๋Ÿฌ์™€ ๋ฉ”ํŠธ๋ฆญ API๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•ด๋„ ๋ฉ๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” ๊ฑฐ๊ธฐ์—์„œ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ์ „ํžˆ ์šฐ๋ฆฌ๊ฐ€ ์ถ”์ •๊ธฐ์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” precomputed ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์ œ ์ œ์•ˆ์„ ์ง€์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์„œ๋ช…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

plot_confusion_matrix(estimator='precomputed', y_true, y_pred, ..., metric_kwargs=None)

๋‚˜๋Š” ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋Š”์ง€ ๋ณด๊ธฐ ์œ„ํ•ด PR์„ ํ•  ๊ฒƒ์ด๋‹ค.

์•„์ง API์— ๋Œ€ํ•ด ์‹ค์ œ๋กœ ๋…ผ์˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ƒˆ PR์— ๋Œ€ํ•ด ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์„ ๋ชจ๋‘ ์ง€์›ํ•ด๋„ ๋˜๋Š”์ง€ ๋ฌป๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค.

(ํ•˜์ง€๋งŒ API์— ๊ด€ํ•ด์„œ๋Š” '๋ฏธ๋ฆฌ ๊ณ„์‚ฐ๋œ'์ด ๋ณ„๋กœ ๋„์›€์ด ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. X ๋ฌด์—‡์„ ํ•ฉ๋‹ˆ๊นŒ? ์ ์ ˆํ•œ ์˜ค๋ฅ˜๋ฅผ ํ†ตํ•ด (y_pred)์™€ (estimator, X)๋ฅผ ์ƒํ˜ธ ๋ฐฐํƒ€์ ์œผ๋กœ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ estimator๊ฐ€ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐ๋œ๋‹ค๋Š” ๊ฒƒ์€ ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?)

๋˜๋Š” estimator='none' , estimator='predictions' , estimator='precomputed_predictions' , X ๋Š” y_pred ๋˜๋Š” y_score ๋ฉ๋‹ˆ๋‹ค. ์ถ”์ •๊ธฐ์—์„œ X ๋กœ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐ๋œ ๊ฑฐ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๊ฑฐ์˜ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด ๋‘ ๊ฐ€์ง€์— ๋Œ€ํ•ด ์Šค์ฝ”์–ด๋Ÿฌ์™€ ๋ฉ”ํŠธ๋ฆญ API๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•ด๋„ ๋ฉ๋‹ˆ๊นŒ?

๋‘ ๊ฐ€์ง€ ์˜ต์…˜์„ ๋ชจ๋‘ ์ง€์›ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์œผ๋กœ?

๋‚˜๋Š” ๋˜ํ•œ ์ข‹์•„ํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค :

CalibrationDisplay.from_estimator(...)
CalibrationDisplay.from_predictions(...)

๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŠœํ”Œ https://github.com/scikit-learn/scikit-learn/issues/15880#issuecomment -670590882 ์‚ฌ์šฉ์— ๋Œ€ํ•œ Guillaume์˜ ์ œ์•ˆ์€ ํ•˜๋‚˜์˜ ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฑฐ๊ธฐ์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ–ˆ๋‹ค๋ฉด ์ตœ๊ณ ์˜ ์„ ํƒ์ด ๋˜์—ˆ์„ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํŠœํ”Œ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ์กด ์œ ํ‹ธ๋ฆฌํ‹ฐ์™€์˜ ์ผ๊ด€์„ฑ์ด ๊นจ์งˆ๊นŒ ๊ฑฑ์ •๋ฉ๋‹ˆ๋‹ค.

์ƒํ˜ธ ๋ฐฐ์ œ๋ฅผ ํฌํ•จํ•˜๋Š” plot_XYZ(estimator=None, X=None, y=None, y_pred=None) ๋Š” ๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์ด๋ฉฐ ํ˜„์žฌ๋กœ์„œ๋Š” ์ด๊ฒƒ์ด ์ œ๊ฐ€ ์˜นํ˜ธํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” CalibrationDisplay.from_estimator(...) ๋ฅผ ์ข‹์•„ํ•˜์ง€๋งŒ Andy๊ฐ€ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด plot_XYZ ํ•จ์ˆ˜๋ฅผ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ณ ๋ คํ•ด ๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ํŠœํ”Œ๋กœ ์ด๋™ํ•˜๊ณ  ํ˜„์žฌ ๋™์ž‘์„ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. (ํŠœํ”Œ ์‚ฌ์šฉ์— ๋™์˜ํ•˜๋Š” ํ•œ)

์ด๊ฒƒ์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋…ผ์˜ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๋งž์Šต๋‹ˆ๊นŒ?
ํ•˜๋‚˜์˜ ํ•จ์ˆ˜์™€ ํ•˜๋‚˜์˜ ์ƒ์„ฑ์ž๊ฐ€ ์žˆ๋“ , ๋‘ ๊ฐœ์˜ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋“ , ๋‘ ๊ฐœ์˜ ํ•จ์ˆ˜๊ฐ€ ์žˆ๋“  ๊ทธ๊ฒƒ์€ ์ •ํ™•ํžˆ ๋™์ผํ•œ ๊ธฐ๋Šฅ๊ณผ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋™์ผํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

@pzelasko @jhennrich ๋‘ ๊ฐœ์˜ ํด๋ž˜์Šค ๋ฉ”์†Œ๋“œ ๋˜๋Š” ๋‘ ๊ฐœ์˜ ๊ธฐ๋Šฅ์„ ๊ฐ–๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ํŒŒ์ด์ฌ์—์„œ ์•ฝ๊ฐ„ ์ง€์ €๋ถ„ํ•œ ๋‹จ์ผ ํ•จ์ˆ˜๋ฅผ ์„ ํ˜ธํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๊ทธ๋ฆฌ๊ณ  ๋‘ ๊ฐœ์˜ ํ•จ์ˆ˜ ๋˜๋Š” ๋‘ ๊ฐœ์˜ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๋ฅผ ์„ ํ˜ธํ•œ๋‹ค๋ฉด ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ์„ฑ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์–ด๋–ค ์ด์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋ฐœ๊ฒฌ ๊ฐ€๋Šฅ์„ฑ์€ classmethods๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ถฉ๋ถ„ํ•œ ์ด์œ ๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ๊ฐ–๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๊ฐ•๋ ฅํ•œ ์ฃผ์žฅ์€ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์ฐจ๋‹จ ๋ผ๋ฒจ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? #18020, #17443 (cc @cmarmo) ์ง„ํ–‰์„ ๋ง‰๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ฐจ๋‹จ์ œ ๋ผ๋ฒจ์€ PR ์ฐจ๋‹จ์ œ๊ฐ€ ์•„๋‹Œ ๋ฆด๋ฆฌ์Šค ์ฐจ๋‹จ์ œ(์ถœ์‹œ ์ „์— ๋ฐ˜๋“œ์‹œ ๊ณ ์ณ์•ผ ํ•  ์‚ฌํ•ญ)๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•„์•„ ๋‹คํ–‰์ด๋‹ค.

@pzelasko @jhennrich ๋‘ ๊ฐœ์˜ ํด๋ž˜์Šค ๋ฉ”์†Œ๋“œ ๋˜๋Š” ๋‘ ๊ฐœ์˜ ๊ธฐ๋Šฅ์„ ๊ฐ–๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ํŒŒ์ด์ฌ์—์„œ ์•ฝ๊ฐ„ ์ง€์ €๋ถ„ํ•œ ๋‹จ์ผ ํ•จ์ˆ˜๋ฅผ ์„ ํ˜ธํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๊ทธ๋ฆฌ๊ณ  ๋‘ ๊ฐœ์˜ ํ•จ์ˆ˜ ๋˜๋Š” ๋‘ ๊ฐœ์˜ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๋ฅผ ์„ ํ˜ธํ•œ๋‹ค๋ฉด ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ์„ฑ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์–ด๋–ค ์ด์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋ฐœ๊ฒฌ ๊ฐ€๋Šฅ์„ฑ์€ classmethods๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ถฉ๋ถ„ํ•œ ์ด์œ ๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ๊ฐ–๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๊ฐ•๋ ฅํ•œ ์ฃผ์žฅ์€ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” two-classmethods ์ ‘๊ทผ ๋ฐฉ์‹์„ ๊ฐ€์žฅ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ from_xxx ํŒจํ„ด - @thomasjpfan์ด ์ œ์•ˆํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ sth:

CalibrationDisplay.from_estimator(...)
CalibrationDisplay.from_predictions(...)

2๊ฐœ์˜ ํด๋ž˜์Šค ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ฐ•ํ•œ ๋ฐ˜๋Œ€๊ฐ€ ์—†์„ ๊ฒƒ ๊ฐ™์œผ๋‹ˆ ๊ทธ๋ ‡๊ฒŒ ํ•ด๋ณด์ž. ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ํ˜„์žฌ ์กด์žฌํ•˜๋Š” ํ”Œ๋กฏ์— ๋Œ€ํ•œ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

    • ConfusionMatrixDisplay
    • PrecisionRecallDisplay
    • RocCurveDisplay
    • DetCurveDisplay
    • PartialDependenceDisplay . ์ด ๊ฒฝ์šฐ from_predictions classmethod๋ฅผ ๋„์ž…ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜๋ฏธ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— from_estimator ๋งŒ ์›ํ•ฉ๋‹ˆ๋‹ค.
  • ์œ„์— ๋‚˜์—ด๋œ ๋ชจ๋“  ๋””์Šคํ”Œ๋ ˆ์ด์— ๋Œ€ํ•ด ํ•ด๋‹น plot_... ๊ธฐ๋Šฅ์„ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. plot_det_curve ๋Š” ์•„์ง ์ถœ์‹œ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ์ œ๊ฑฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • #17443 ๋ฐ #18020๊ณผ ๊ฐ™์€ ์ƒˆ๋กœ์šด PR์˜ ๊ฒฝ์šฐ plot ํ•จ์ˆ˜๋ฅผ ๋„์ž…ํ•˜๋Š” ๋Œ€์‹  ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๋ฅผ ์ฆ‰์‹œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์•ฝ๊ฐ„์˜ ์ž‘์—…์ด์ง€๋งŒ #17443 ๋ฐ #18020์ด ์ด๋ฏธ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก 0.24 ์ด์ „์— ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@thomasjpfan @jnothman @amueller @glemaitre์— ์ด์˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@jhennrich @pzelasko , Display ๊ฐœ์ฒด ์ค‘ ํ•˜๋‚˜์— ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๋ฅผ ๋„์ž…ํ•˜๊ธฐ ์œ„ํ•ด PR์„ ์ œ์ถœํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ์œผ์‹ญ๋‹ˆ๊นŒ?

๊ฒฐ์ •ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @NicolasHug! #17443์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค(์ด์˜ ์ œ๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ ํ›„)

๋‚˜๋Š” ์ด์˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด์˜๋„ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ ๋‹ค์Œ์—๋Š” ๋‹ค๋ฅธ ์ˆ˜์—…์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ง€์—ฐ๋œ PR์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
@lucyleeow ๋‚ด๊ฐ€ ๊ทธ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์•˜๊ณ  ์ผ๋ถ€ PR์„ ์ฐพ๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ณด๋‚ด ์ฃผ์„ธ์š”. :)

๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ์ง€๋งŒ ํ˜„์žฌ ๋„ˆ๋ฌด ๋งŽ์€ ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ์•ˆ์„ ๋“ค์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ข‹์€ ์†Œ๋ฆฌ :)

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰