๋ฎ์ ์ฐ์ ์์ ๊ธฐ๋ฅ ์์ฒญ: sklearn.metrics
๋ค์ค ํด๋์ค roc_auc ์ ์ ๊ณ์ฐ์ ๋ํ ์ง์์ ๋ชจ๋ ๋ฐฉ๋ฒ๋ก ์ ๋ํด ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋งค์ฐ ์ ์ฉํ ๊ฒ์
๋๋ค.
๊ทธ๊ฒ์ด ๋ฌด์์ ์๋ฏธํ๋์ง ํ์คํ์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋ํ ์ฐธ์กฐ๊ฐ ์์ต๋๊น?
2014๋ 6์ 19์ผ 09:51 Madison May ์๋ฆผ @github.com์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
๋ฎ์ ์ฐ์ ์์ ๊ธฐ๋ฅ ์์ฒญ: ๋ค์ค ํด๋์ค roc_auc ์ ์ ์ง์
์ผ๋์ผ ๋ฐฉ๋ฒ๋ก ์ ์ฌ์ฉํ์ฌ sklearn.metrics์์ ๊ณ์ฐ
์์ฒญ๋๊ฒ ์ ์ฉํ ๊ฒ์ ๋๋ค.โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/scikit-learn/scikit-learn/issues/3298.
๋ค์์ ์ฐธ์กฐ์ ํจ๊ป ๊ฝค ๊ด์ฐฎ์ ์ค๋ช ์ ๋๋ค. https://www.cs.bris.ac.uk/~flach/ICML04tutorial/ROCtutorialPartIII.pdf
ํ , ๋ฉํฐ ํด๋์ค auc๊ฐ ๊ตฌํ๋์ง ์์ ๋์ ๊ถ์ฅ ์ค์ฝ์ด๋ฌ๋ ๋ฌด์์ ๋๊น?
sklearn.metrics์์ 1๋1 ๋ฐฉ๋ฒ๋ก ์ ์ฌ์ฉํ์ฌ ๋ค์ค ํด๋์ค roc_auc ์ ์ ๊ณ์ฐ์ ์ง์ํ๋ ๊ฒ์ ๋งค์ฐ ์ ์ฉํ ๊ฒ์ ๋๋ค.
ํด๋น ์ฌ๋ผ์ด๋๊ฐ ๊ฐ ํด๋์ค์ ๋ํ AUC์ ์ฃผํ์ ๊ฐ์ค ํ๊ท ์ ์ทจํ๋ ํ๋ฉด ์๋ ๋ถํผ์ ๋ํ ๊ทผ์ฌ์น๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๊น? ์ด๊ฒ์ ์ด์งํ ํํ ๋ฐ average='weighted'
์ ํจ๊ป ํ์ฌ roc_auc_score
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋์ผํ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค. ( @arjoly , ์ด๋ฌํ ๊ณก์ ๊ธฐ๋ฐ ์ ์๊ฐ ๋ค์ค ํด๋์ค๋ฅผ ํ์ฉํ์ง ์๋ ์ด์ ๋ ๋ฌด์์
๋๊น?)
๊ทธ๋ ์ง ์์ผ๋ฉด ํด๋น ์ฌ๋ผ์ด๋์ "๋ค์ค ๋ฑ๊ธ ROC"์ ๋ํด ์ฐพ์ ์ ์๋ ๋๋ถ๋ถ์ ์ฐธ์กฐ๋ ํ๊ฐ ๋ฉํธ๋ฆญ์ด ์๋ OvR์ ๋ค์ค ๋ฑ๊ธ ๊ต์ ์ ์ค์ ์ ๋ก๋๋ค. ์ด๊ฒ์ด ๋น์ ์ด ๊ด์ฌ์ ๊ฐ๋ ๊ฒ์ ๋๊น? ๋๋ ์ด ๊ธฐ์ ์ด ์ผ๋ง๋ ๋๋ฆฌ ํผ์ ธ ์๋์ง, scikit-learn์์ ์ฌ์ฉํ ๊ฐ์น๊ฐ ์๋์ง, ํ์์ ์ธ ์ต์ ํ๋ฅผ ๊ฐ์ ํด์ผ ํ๋์ง ์ ํ ๋ชจ๋ฆ ๋๋ค.
( @arjoly , ์ด๋ฌํ ๊ณก์ ๊ธฐ๋ฐ ์ ์๊ฐ ๋ค์ค ํด๋์ค๋ฅผ ํ์ฉํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?)
y_true์์ ํ๋์ ํด๋์ค๊ฐ ๋๋ฝ๋ ๋๋ง๋ค ์ ์๋ฅผ ๊ณ์ฐํ ์ ์์ต๋๋ค. ๋๋ ํด๋์ค ์ถ๋ก ์ ๋ง๋ฒ์ ์ถ๊ฐํ๊ณ ์ถ์ง ์์๊ณ ์ฌ์ฉ์๋ฅผ ๊ณค๊ฒฝ์ ๋น ๋จ๋ ธ์ต๋๋ค.
y_pred์ ๊ฒฝ์ฐ ์ ์ ํ๊ฒ ์ฒ๋ฆฌํ์ง ์์ ์ ์์ต๋๋ค.
y_true์๋ ์๋ ๋ ์ด๋ธ์ด ์์ต๋๋ค. ๊ทธ ๋ ์ด๋ธ์ ์๋ง๋
๊ฑฐ์ ํ๊ท (Weka์ ๋ฐ๋ฅด๋ฉด,
๋๋ฌด), ๋๋ ROC ์ ์.
2014๋ 8์ 1์ผ 17:08์ Arnaud Joly [email protected] ์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
( @arjoly https://github.com/arjoly, ์ ์ด๋ฌํ ๊ณก์ ๊ธฐ๋ฐ ์ ์๊ฐ
๋ค์ค ํด๋์ค๋ฅผ ํ์ฉํ์ง ์์ต๋๊น?)y_true์์ ํ๋์ ํด๋์ค๊ฐ ๋๋ฝ๋ ๋๋ง๋ค ๊ณ์ฐํ ์ ์์ต๋๋ค.
์ ์. ๋๋ ํด๋์ค ์ถ๋ก ์ ๋ง๋ฒ์ ์ถ๊ฐํ๊ณ ์ถ์ง ์์๊ณ
๋ฌธ์ ์ ์ฌ์ฉ์.โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/scikit-learn/scikit-learn/issues/3298#issuecomment -50855460
.
@jnothman @arjoly ํ๊ท ํ ์ธก๋ฉด์์ ๋ง์ ์ง์ ์ด ์์์ต๋๋ค. ์ง๊ธ ๊ตฌํํ๊ธฐ๊ฐ ์ผ๋ง๋ ์ด๋ ต์ต๋๊น?
์๋ง๋ pPROC ํจํค์ง์ R ๊ธฐ๋ฅ๊ณผ ์ ์ฌํ ์ ์์ต๋๋ค.
http://www.inside-r.org/packages/cran/pROC/docs/multiclass.roc
์๋ ํ์ธ์, ๋งคํฌ๋ก ํ๊ท ROC/AUC ์ ์์ ์ด์์ ๊ตฌํํ์ง๋ง sklearn์ ์ ํฉํ์ง ํ์ ํ ์ ์์ต๋๋ค.
์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
from sklearn.metrics import roc_auc_score
from sklearn.preprocessing import LabelBinarizer
def multiclass_roc_auc_score(truth, pred, average="macro"):
lb = LabelBinarizer()
lb.fit(truth)
truth = lb.transform(truth)
pred = lb.transform(pred)
return roc_auc_score(truth, pred, average=average)
์ด๋ ๊ฒ ๊ฐ๋จํ ์ ์์๊น?
@fbrundu ์ด๊ฒ์ด ํ์ค ์๋ฏธ๋ผ๋ฉด. ๋ฌผ๋ก ๊ฐ๋ฅํ ํด์์ ๋๋ค.
์ฌ๊ธฐ์ ๋ฉ์ง ์์ฝ์ด ์์ต๋๋ค.
http://people.inf.elte.hu/kiss/13dwhdm/roc.pdf
proOC ํจํค์ง๋ Hand ๋ฐ Till์ ๊ตฌํํฉ๋๋ค.
http://download.springer.com/static/pdf/398/art%253A10.1023%252FA%253A1010920819831.pdf?originUrl=http%3A%2F%2Flink.springer.com%2Farticle%2F10.1023%2FA% 3A1010920819831 & token2 = ํน๊ธ = 1,469,743,016 ~ ACL = % 2Fstatic % 2Fpdf % 2F398 % 2Fart % 25253A10.1023 % 25252FA % 25253A1010920819831.pdf % 3ForiginUrl % 3Dhttp % 253A % 252F % 252Flink.springer.com % 252Farticle % 252F10.1023 % 252FA % 253A1010920819831 *~hmac=bc68686d3782ac6af3c3cda13c1b36aad6de5d01d16a25870cace5fe9699fb8a
Hand์ Till์ ๋ฒ์ ์ ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์๋ค์ฌ์ง๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ฉฐ ์ ๋ ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ๊ตฌํํ๋ ๋ฐ ์ฐฌ์ฑํฉ๋๋ค.
Provost์ Domingos์ ๋ฒ์ ๋ ์์ต๋๋ค. Provost๊ฐ ํ์ฌ ์ ๋๋ ํฐ๋ผ๋ ์ ์ ๊ฐ์ํ ๋ ์ ๊ฐ ์์ํด์ผ ํ ๋ฒ์ ์ด์ง๋ง ์์ง๊น์ง๋ ๊ด์ฌ์ ๋ฐ์ง ๋ชปํ์ต๋๋ค.
Provost-Domingos๋ @fbrundu ๊ฐ average='weighted'
๋ง ๋งํ ๊ฒ์
๋๋ค.
TLDR: Hand and Till PR ํ์ํฉ๋๋ค. ์ ํ์ ์ผ๋ก ํ๊ท ์ ๋ณ๊ฒฝํ ์ ์๋ ์ต์ ์ด ์๋ Provost ๋ฐ Domingos.
์๋
ํ์ธ์, ์ด๋ฅผ ๊ตฌํํ๋ ๋ฐ ์ง์ ์ด ์์์ต๋๊น?
๋ด๊ฐ ๋๋ถ๋ถ์ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์: WEKA)์์ ๋ณธ ๊ฒ์ ๊ฐ์ค ํ๊ท ์ ์ฌ์ฉํ๋ค๋ ๊ฒ์
๋๋ค. ๋๋ ์ด๊ฒ์ด @fbrundu ๊ฐ average='micro' ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๊น?
@joaquinvanschoren R์ ์๊ณผ
@amueller ์ด ์์ ์ ํ ์ ์์ต๋๋ค :)
@kchen17 ๊ฐ์ฌํฉ๋๋ค!
์ฐ๋ฆฌ๋ ์ด๊ฒ์ OpenML์์ ๊ฝค ๋ง์ด ๋
ผ์ํ์ต๋๋ค. ๋ค์ค ํด๋์ค AUC์ ๊ฒฝ์ฐ ํ ์ ๊ทผ ๋ฐฉ์(๊ฑฐ์ ํ๊ท , ๋ฏธ์ธ ํ๊ท , ๊ฐ์ค ํ๊ท ๋ฑ)์ด ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์๋ณด๋ค ๋ซ๋ค๋ ๋ณด์ฅ์ ์์ต๋๋ค. R์์๋ ์ต์ 5๊ฐ์ง ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ฐพ์ ์ ์์ต๋๋ค(ํ์ฌ MLR์์๋ ๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅ).
scikit-learn์์ ์ด๊ฒ์ ๊ตฌํํ ๋ Hand-Till์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉํ๋๋ผ๋ ์ต์ํ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ์ฅ ์ ํฉํ ๊ฒ์ ์ ํํ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ฉด ์ข์ ๊ฒ์
๋๋ค. Hand-Till์ ๊ฐ์ค์น๊ฐ ์๋ ์ ๊ทผ ๋ฐฉ์์ด๋ฉฐ ๋ ์ด๋ธ ๋ถ๊ท ํ์ ๊ณ ๋ คํ์ง ์์ต๋๋ค.
์ฌ๋ฌ ๋ฒ์ ์ด ์์ด์ ๊ธฐ์ฉ๋๋ค. ๊ฐ์ค์น๊ฐ ์๋ ๊ฒ๊ณผ "๋ผ๋ฒจ ๋ถ๊ท ํ์ ๊ณ ๋ คํ์ง ์๋ ๊ฒ"์ ๋ ๊ฐ์ง ๋ค๋ฅธ ๊ฒ์ ๋๋ค. ;) ๋ชฉ๋ก๊ณผ ์ฐธ์กฐ๊ฐ ์์ต๋๊น?
์ด ๊ฒฝ์ฐ ๋ง์ดํฌ๋ก ํ๊ท ์ด๋ ๋ฌด์์ ๋๊น?
์ด ์์์ ๊ตฌํ๋ ๋ค์ค ํด๋์ค ๋ฌธ์ ์ ๋ํด ์ด๋ฏธ ๋ง์ดํฌ๋ก ๋ฐ ๋งคํฌ๋ก ํ๊ท ROC AUC๋ฅผ ํ์ธํ์ต๋๋ค.
http://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html#multiclass -์ค์
์ฌ์ค, ๋๋ ๋ฌธ์๊ฐ ์ฌ๋ฐ๋ฅด์ง ์๋ค๊ณ ์๊ฐํ๋ฉฐ ๋ค์๊ณผ ๊ฐ์ด ๋งํด์ผ ํฉ๋๋ค.
๋ฉํฐ ๋ผ๋ฒจ...
2016๋
9์ 26์ผ 23:16, Olivier Grisel [email protected]
์ผ๋ค:
์ด๋ฏธ ๋ค์ค ํด๋์ค์ ๋ํ ๋ฏธ์ ๋ฐ ๊ฑฐ์ ํ๊ท ROC AUC๊ฐ ์๋๋๋ค.
์ด ์์ ์์ ๊ตฌํ๋ ๋ฌธ์ :http://scikit-learn.org/stable/auto_examples/model_
selection/plot_roc.html#multiclass-settingsโ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/scikit-learn/scikit-learn/issues/3298#issuecomment -249566346,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AAEz65IeU7k2CFwyHxTTAjk-5orIxWe6ks5qt8WsgaJpZM4CFzud
.
๋ง์ดํฌ๋ก ํ๊ท ํ์์ TPR(์ง์์ฑ๋ฅ )์ ๋ชจ๋ ํด๋์ค์ ๋ชจ๋ TP ํฉ๊ณ๋ฅผ ๊ตฌํ๊ณ ๋ชจ๋ ํด๋์ค์ ๋ชจ๋ TP ๋ฐ FN์ ํฉ๊ณ๋ก ๋๋์ด ๊ณ์ฐํฉ๋๋ค(์ฆ, 3๊ฐ ํด๋์ค ๋ฌธ์ ์ ๊ฒฝ์ฐ).
TPR = (TP1+TP2+TP3)/(TP1+TP2+TP3+FN1+FN2+FN3)
ํผ๋ ํ๋ ฌ์ ์:
[[1,2,3],
[4,5,6],
[7,8,9]]
TPR = (1+5+9)/(1+5+9+(2+3)+(4+6)+(7+8))
์์์ฑ ๋น์จ์ ๋ํด ๋์ผํ ์์
์ ์ํํ๋ฉด AUC๋ฅผ ๊ณ์ฐํ ์ ์์ต๋๋ค.
๋งคํฌ๋ก ํ๊ท ํ๋ ๊ฐ ํด๋์ค์ ๋ํ TPR์ ๊ฐ๋ณ์ ์ผ๋ก ๊ณ์ฐํ๊ณ ํ๊ท ํํฉ๋๋ค(ํด๋น ํด๋์ค์ ์์ ์์ ๋ฐ๋ผ ๊ฐ์ค์น ๋ถ์ฌ).
TPR = (1/3)* (TP1/(TP1+FN1) + TP2/(TP2+FN2) + TP2/(TP2+FN2))
๊ฐ์ ์:
TPR = (1/3)* (1/(1+(2+3)) + 5/(5+(4+6)) + 9/(9+(7+8)))
์๋ง๋ ์ด๊ฒ์ด ๋์์ด ๋ ๊ฒ์
๋๋ค(์ ๋ฐ๋๋ฅผ ์ฌ์ฉํ์ง๋ง ์์ด๋์ด๋ ๋์ผํฉ๋๋ค).
http://stats.stackexchange.com/questions/156923/should-i-make-decisions-based-on-micro-averaged-or-macro-averaged-evaluation-mea
๋๋ ๊ฐ์ธ์ ์ผ๋ก ๊ฐ์ค๋์ง ์์ ๊ฑฐ์ ํ๊ท ์ ์ฌ์ฉํ์ง ์์ ๊ฒ์ด์ง๋ง, ์ด๊ฒ์ ์ฐ๊ตฌํ ๋ ผ๋ฌธ์ ์ฐพ์ ์ ์๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.
์ข
์ด:
https://www.math.ucdavis.edu/~saito/data/roc/ferri-class-perf-metrics.pdf
์ด๊ฒ์ R์์ ์ง์๋๋ ๊ฒ์
๋๋ค(์ถ๊ฐ ๋ฌธํ ํฌํจ):
https://mlr-org.github.io/mlr-tutorial/devel/html/measures/index.html
์๋ ํ์ธ์! ์ง๋ ์ฃผ์ ์ด ๋ฌธ์ ๋ฅผ ์กฐ์ฌํ๊ธฐ ์์ํ ์ ์์๊ณ ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ผ๋ก ๊ฐ๊ณ ์๋์ง ํ์ธํ๊ธฐ ์ํด ๋น ๋ฅธ ์ ๋ฐ์ดํธ/๋ช ๊ฐ์ง ์ง๋ฌธ์ ๊ฒ์ํ๊ณ ์ถ์์ต๋๋ค.
average
๋งค๊ฐ๋ณ์๊ฐ ์์์ผ๋ก ์ค์ ๋ multiclass_roc_auc_score
ํจ์์ ๊ตฌํ์ผ๋ก ์์ํ์ต๋๋ค. ์ด ๊ธฐ๋ณธ๊ฐ์ Hand-Till ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํฉ๋๋ค(์ค๋ช
ํ ๋๋ก ๋ ์ด๋ธ ๋ถ๊ท ํ์ ๊ณ ๋ คํ์ง ์์).roc_auc_score
๋งค๊ฐ๋ณ์์ ๋์ผํ ๋งค๊ฐ๋ณ์๋ฅผ ํ์ฉํฉ๋๊น?y_true
2๊ฐ ์ด์์ ๋ ์ด๋ธ ํด๋์ค๊ฐ ์์ ์ ์๋ค๋ ๊ฒ์
๋๋ค. Hand-Till์ ๊ฐ๋ฅํ ๋ชจ๋ ๋ ์ด๋ธ ์์ ์ฐพ๊ณ ์ด๋ฌํ ๊ฐ ์์ ๋ํด roc_auc_score
๋ฅผ ๊ณ์ฐํ ๋ค์ ์ด๋ค์ ํ๊ท ์ ๊ตฌํ๋ ์์
์ ํฌํจํฉ๋๋ค.์์ /์ ์ ์ฌํญ์ ์๋ ค์ฃผ์ธ์!
์ผ๋ฐ์ ์ผ๋ก roc_auc_score
์ฌ์ฌ์ฉํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ๋ก ๊ฐ๋ฅํ๋ค๋ฉด ๋ค๋ฅธ ํจ์๋ฅผ ๋ง๋๋ ๊ฒ์ ํผํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ '๋งคํฌ๋ก'๋ก ๋๋ ๊ฒ์ด ํ์ฉ๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ณ ๋ คํด์ผ ํ ํ ๊ฐ์ง ํต์ฌ ์ฌํญ์ metrics/tests/test_common.py์์ roc_auc_score
์ ํน์ฑ ๋ณ๊ฒฝ์ ํฌํจํ์ฌ ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ํ
์คํธํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
๋ค, ๋ฌธ์๋ฅผ ์
๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
@joaquinvanschoren ํฅ๋ฏธ๋กญ๊ฒ๋ ๊ทธ ๋ ผ๋ฌธ์ ์์์ ์ธ๊ธํ ๋ค์ค ํด๋์ค AUC ๋ ผ๋ฌธ, ํนํ 2005๋ ์ Fawcett ๋ ผ๋ฌธ์ ๋ํด ๋ ผ์ํ์ง ์์์ต๋๋ค. ํ 1-vs-1 ๋ค์ค ํด๋์ค์ ์ฌ์ ๊ทํ์ธ๊ฐ?
๊ทธ๋์ ํ์ฌ ์ฐ๋ฆฌ๋ ๋ค์ค ๋ ์ด๋ธ๋ง ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก 1vs1 ๋ฐ 1vsRest๊ฐ ์๋ ๋ค์ค ํด๋์ค๋ฅผ ์ถ๊ฐํ๊ณ ๊ฐ๊ฐ ๊ฐ์ค ๋ฐ ๋น๊ฐ์ค ๋ณํ์ด ์์ต๋๋ค.
sample
๋ฐ micro
ํ๊ท ์ด AUC์์ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๊ทธ๋์... ์ ๋ multi-class
๋งค๊ฐ๋ณ์๋ฅผ AUC์ ์ถ๊ฐํ ๊ฒ์ ์ ์ํฉ๋๋ค. ovo
๋๋ ovr
์ผ ์ ์์ผ๋ฉฐ ๊ฐ์ค์น ๋งค๊ฐ๋ณ์๋ฅผ ๊ณ ๋ คํ ๊ฒ์
๋๋ค. sample
๋ฐ micro
๋ฅผ ํ์ฉํ๋ ๊ฒ์ ์ ๊ฒ ์ดํด๊ฐ ๋์ง ์๊ธฐ ๋๋ฌธ์ ํ์คํ์ง ์์ต๋๋ค.
@arjoly ๊ทธ๋์ micro
๋ฐ sample
ํ๋ ฌ์ ์ด์ด ์๋ ํ์์ ์๋ํฉ๋๊น? ๊ทธ๊ฒ์ ๊ดํ ๋
ผ๋ฌธ์ด ์์ต๋๊น? ๋๋ ROC ๋ฌธํ์์ ๊ทธ๊ฒ์ ์ฐพ์ง ๋ชปํ์ต๋๋ค.
๊ทธ๊ฒ์ ๋ฌธ์ ๋ ํธ๋ ํธ ์ธก์ ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ๊ฐ์ค ํ๊ท OvO๋ฅผ ์ํํด์ผ ํ๊ณ ๊ฐ์ค ์ต์ ์ ์ค์ ๋ก ๋ณ๊ฒฝํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋์ ๊ธฐ๋ณธ์ ์ผ๋ก OVR์ ์ํํ๊ณ ๊ฐ์ค์น๊ฐ ์๋ OvO๋ ์ข์ ์ ํ์ด๋ผ๊ณ ์ค๋ช ํ๊ณ ์ฐธ์กฐ๋ฅผ ์ถ๊ฐํ ๊น์?
@joaquinvanschoren์ด ์ธ์ฉํ ๋ ผ๋ฌธ ์์ฝ์์๋ ๋ชจ๋ AUC ๋ฒ์ ์ด ๊ฑฐ์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๋ค๊ณ ๋งํฉ๋๋ค.
@amueller : ๊ทํ์ ์๊ฒฌ์ ๋ค์ ์ฝ์ ๊ธฐํ๊ฐ
๊ทธ๊ฒ์ ๋ฌธ์ ๋ ํธ๋ ํธ ์ธก์ ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ๊ฐ์ค ํ๊ท OvO๋ฅผ ์ํํด์ผ ํ๊ณ ๊ฐ์ค ์ต์ ์ ์ค์ ๋ก ๋ณ๊ฒฝํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋์ ๊ธฐ๋ณธ์ ์ผ๋ก OVR์ ์ํํ๊ณ ๊ฐ์ค์น๊ฐ ์๋ OvO๋ ์ข์ ์ ํ์ด๋ผ๊ณ ์ค๋ช ํ๊ณ ์ฐธ์กฐ๋ฅผ ์ถ๊ฐํ ๊น์?
๊ทํ์ ์๋ต์ ๋ฐ๋ผ multiclass=['ovo', 'ovr']
๋งค๊ฐ๋ณ์๋ฅผ ํตํฉํ๋๋ก roc_auc_score
์ ์์ ํ๋ ค๊ณ ํ์ต๋๋ค. OvR์ด ๊ธฐ๋ณธ๊ฐ( roc_auc_score(y_true, y_score, multiclass="ovo" ... )
)์ด์ง๋ง Hand & Till์ด OvO์ธ ๊ฒฝ์ฐ ๊ตฌํ์ OvR ๋ถ๋ถ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น? (์ฆ, y_true๊ฐ ๋ค์ค ํด๋์ค์์ ๊ฐ์งํ๋ฉด "ovr"์ด ๊ตฌํ๋์ง ์์ ๊ฒฝ์ฐ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๊ณ ์ฌ์ฉ์์๊ฒ "ovo"๋ฅผ ์ ๋ฌํ๋๋ก ์ง์ํฉ๋๊น?)
์ฃ์กํฉ๋๋ค. ovo
๋ฐ ovr
;) ๋ชจ๋ ๊ตฌํํ๊ธฐ๋ฅผ ๊ธฐ๋ํ์ต๋๋ค.
@amueller : y_score
์ ์น์๋ง ํ์ธํ์ง๋ง ์ด๊ฒ์ด ์ถฉ๋ถํ์ง ์๋ค๋ ๊ฒ์ ๊ธ์ธ ๊นจ๋ฌ์์ต๋๋ค. (์ฆ, ๋ ์ด๋ธ์ด 0๊ณผ 1๋ง ์๋์ง ํ์ธํ๋ ๊ฒ๋ฟ์ธ๊ฐ์?)
๋ค์ค ๋ ์ด๋ธ์ ์ฌ๋ฌ ๋ ์ด๋ธ์ด ํ ๋ฒ์ ์์ธก๋จ์ ์๋ฏธํฉ๋๋ค.
์ธ์คํด์ค๋น ์์ธก ๋ฒกํฐ. ๋ฉํฐํด๋์ค๋ ๋จ์ผ ํด๋์ค๋ฅผ ์๋ฏธํฉ๋๋ค.
์์ธกํ์ง๋ง ๊ทธ ์์ธก์ 2๊ฐ ์ด์์ ๊ฐ์ ๊ฐ์ง ์ ์์ต๋๋ค.
๋ฐ์ด๋๋ฆฌ).
๋๋๋ก ์ฌ๋๋ค์ ์ถ๋ ฅ์ ์ด์งํํ์ฌ ๋ค์ค ํด๋์ค ์ฌ๋ก๋ฅผ ํด๊ฒฐํ๋ฏ๋ก
์ธ์คํด์ค๋น ์ฌ๋ฌ ์ด์ง ๊ฐ(๋ฐ๋ผ์ ๋ค์ค ๋ ์ด๋ธ)์ ์ป์ต๋๋ค.
์ข
์ข
ํผ๋์ ์ผ๊ธฐํฉ๋๋ค.
2016๋
10์ 8์ผ ํ ์์ผ 16์ 33๋ถ์ Kathy Chen [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@amueller https://github.com/amueller : ์ธ๊ธ๋์์ผ๋ฉฐ ๋ค์์ด ๋ ๊ฒ์ ๋๋ค.
๋ ํตํฉ! ๋ํ ๋ฌป๊ณ ์ถ์์ต๋๋ค. ๋ฐฉ๋ฒ์ ๋ํ ์กฐ์ธ์ด ์์ต๋๊น?
๋ค์ค ํด๋์ค์ ๋ค์ค ๋ ์ด๋ธ์ ์ฐจ์ด์ ์ ๊ฐ์งํฉ๋๊น? ์ฒ์์ ๋๋
y_score์ ์น์๋ฅผ ํ์ธํ์ง๋ง ๋งค์ฐ ๋นจ๋ฆฌ ๊นจ๋ฌ์์ต๋๋ค.
์ถฉ๋ถํ์ง ์์ ๊ฒ์ ๋๋ค.โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/scikit-learn/scikit-learn/issues/3298#issuecomment -252427642,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/ABpQV7Mv0rHGEfrkYi5Xezz3PItyrLZ6ks5qx6mdgaJpZM4CFzud
.
์๋
ํ์ธ์, type_of_target ์ด multi-label
์ multi-class
์ถ๋ ฅ์ ๊ตฌ๋ณํ๋ ๋ชฉ์ ์ ํด๊ฒฐํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. HTH
type_of_target
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. scikit-learn์์ y
์ ์ฐจ์์ ์ค์ ๋ก ๋ค์ค ๋ ์ด๋ธ ๋๋ ๋ค์ค ๋์์ ์ํํ ์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ์งํ์
๋๋ค. @joaquinvanschoren์ด ์ ์ํ ๋๋ก ์ถ๋ ฅ์ ์ด์งํํ๋ฉด scikit-learn์ ํญ์ ๋ค์ค ๋ ์ด๋ธ์ ๊ฐ์ ํฉ๋๋ค.
type_of_target์ y_trues, @amueller๋ฅผ ๊ตฌ๋ณํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
2016๋
10์ 9์ผ 05:18 Andreas Mueller [email protected]
์ผ๋ค:
type_of_target์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. scikit-learn์์
y์ ์ฐจ์์ ์ค์ ๋ก ์ฐ๋ฆฌ๊ฐ ์ํ๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ์งํ์ ๋๋ค.
๋ค์ค ๋ ์ด๋ธ ๋๋ ๋ค์ค ๋์. ์ถ๋ ฅ์ ๋ค์๊ณผ ๊ฐ์ด ์ด์งํํ๋ฉด
@joaquinvanschoren https://github.com/joaquinvanschoren ์ ์
scikit-learn์ ํญ์ ๋ค์ค ๋ ์ด๋ธ์ ๊ฐ์ ํฉ๋๋ค.โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/scikit-learn/scikit-learn/issues/3298#issuecomment -252439908,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AAEz6wa5fnE_LX3LLXbCoc0Z4hBbSAQ0ks5qx95rgaJpZM4CFzud
.
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ, ์ ๋ "์๋น" PR์ ์ ์ถํ์์ ์๋ ค๋๋ฆฌ๊ณ ์ถ์์ต๋๋ค. ์๋ก์ด ํ ์คํธ, ๋ฌธ์ ํํ ๋ฑ์ ์ถ๊ฐํ๊ธฐ ์ํ ๋ชจ๋ฒ ์ฌ๋ก์ ํจ๊ป ๊ตฌํ์ ๋ํ ํผ๋๋ฐฑ์ ๋ฃ๊ณ ์ถ์ต๋๋ค(์: numpy/etc.๋ฅผ ์ง๊ธ๋ณด๋ค ๋ ๋์ ๋ฐฉ์์ผ๋ก ํ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค๊ณ ํ์ ํฉ๋๋ค).
์ง๊ธ๊น์ง ๋์์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
AUC์ ๋ํ ๋ค์ค ํด๋์ค ์ง์์ ์ถ๊ฐํ๋ ๋ฐ ์ง์ ์ด ์์ต๋๊น?
@joaquinvanschoren : #7663์์ @jnothman ์ ์ฝ๋ ๊ฒํ ํ ์์ ์์ ์ค์ ๋๋ค. ์ค๊ฐ๊ณ ์ฌ๊ฐ ๋๋๋ฉด ๋ค์ ์ฃผ์ ๋ ๋ค๋ฅธ ์ ๋ฐ์ดํธ๋ฅผ ์ ์ถํ ๊ฒ์ ๋๋ค.
์๋ ํ์ธ์ @kathyxchen , @jnothman ,
PR์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
AUC์ ๋ํ ๋ค์ค ํด๋์ค ์ง์์ ์ถ๊ฐํ๋ ๋ฐ ์ง์ ์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด ์ฒดํฌ์ธํ์๊ฒ ์ต๋๊น?
์ฐ๋ฆฌ๋ ๋ฌด์์ด ๋ฐ์๋ค์ฌ์ง๊ณ ์์น์ ์ธ์ง ๊ฒฐ์ ํ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช์ต๋๋ค.
๋ค์ค ํด๋์ค์ ๋ํ ROC AUC์ ๊ณต์ํ. ๋ณด๋ค
https://github.com/scikit-learn/scikit-learn/pull/7663#issuecomment -307566895
๊ทธ๋ฆฌ๊ณ ์๋.
๊ทธ๋์ ์น๊ตฌ๋ค. ๋ฉํฐํด๋์ค uc ์ ์์ ์ง์ ์ด ์์ต๋๊น? ํ์ฑ ๋ฐ์ดํฐ ์ธํธ์ ํจ๊ป ๋งค์ฐ ํผ๋์ค๋ฌ์ด ๊ณต์ ๋ฌธ์ ์ฝ๋๋ฅผ ์ฐพ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๋ด ๋ชจ๋ธ์ด ๋์๋ฅผ ์๋นํ ์ ์์ธกํ๋ค๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด๊ฒ์ ๊ฑฐ์ ์๋ฃ๋์์ต๋๋ค. ๋ณํฉํ๊ธฐ ์ ์ API ์ธ๋ถ ์ ๋ณด๋ฅผ ๊ฒฐ์ ํด์ผ ํฉ๋๋ค. https://github.com/scikit-learn/scikit-learn/pull/12789#discussion_r295693965
@trendsearcher ์๋ฅผ ๋ค์ด ์ฃผ์๊ฒ ์ต๋๊น? ์ง๊ธ์ ๋ณํฉ๋์์ง๋ง ๊ทํ๊ฐ ๊ฒฝํํ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ์ถ์ต๋๋ค.
๋์์ด ๋์ด ๊ธฐ์ฉ๋๋ค. ์ด๋ป๊ฒ ์๋ฅผ ๋ค ์ ์์ต๋๊น(๋ง์ ์ฝ๋๊ฐ ์๊ณ ๊ทธ๋ ์ง ์์ ์ ์์ต๋๋ค)
์ง๊ด์ )? ์ผ๋ฐ ํ
์คํธ๋ก ์ธ ์ ์์ต๋๊น?
ัั, 18 ะธัะป. 2019๋ ะณ. ะฒ 00:35, Andreas Mueller [email protected] :
@trendsearcher https://github.com/trendsearcher ์ ๊ณตํ ์ ์์ต๋๊น?
์๋ฅผ ๋ค์ด์ฃผ์ธ์? ์ง๊ธ์ ๋ณํฉ๋์์ง๋ง ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ์ถ์ต๋๋ค.
๊ฒฝํํ๋ค.โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/scikit-learn/scikit-learn/issues/3298?email_source=notifications&email_token=AKS7QOFYRQY7RZJBWUVVJSTP76GDFA5CNFSM4AQXHOO2YY3PNVWWK3TUL52HS4MVVEXJ4
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AKS7QOFQ5LAIZ2ZBR4M4EATP76GDFANCNFSM4AQXHOOQ
.
์๋ ํ์ธ์, ๋งคํฌ๋ก ํ๊ท ROC/AUC ์ ์์ ์ด์์ ๊ตฌํํ์ง๋ง sklearn์ ์ ํฉํ์ง ํ์ ํ ์ ์์ต๋๋ค.
์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
from sklearn.metrics import roc_auc_score from sklearn.preprocessing import LabelBinarizer def multiclass_roc_auc_score(truth, pred, average="macro"): lb = LabelBinarizer() lb.fit(truth) truth = lb.transform(truth) pred = lb.transform(pred) return roc_auc_score(truth, pred, average=average)
์ด๋ ๊ฒ ๊ฐ๋จํ ์ ์์๊น?
@fbrundu ๊ณต์ ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ๋๋ ๋น์ ์ ์ฝ๋๋ฅผ ์๋ํ์ต๋๋ค. ํ์ง๋ง ์ด ํจ์๋ฅผ ํธ์ถํ๋ฉด "๋ ์ด๋ธ ์ด์งํ์์๋ ๋ค์ค ์ถ๋ ฅ ๋์ ๋ฐ์ดํฐ๊ฐ ์ง์๋์ง ์์ต๋๋ค"๋ผ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํจ์์์ "pred=lb.transform(pred)" ์ฝ๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ๊ทธ๋ฌ๋ "์ํ ์๊ฐ ์ผ์นํ์ง ์๋ ์ ๋ ฅ ๋ณ์๋ฅผ ์ฐพ์์ต๋๋ค: [198, 4284]"๋ผ๋ ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์์ ์ค ์ ์๋์ง ์ฌ์ญค๋ด๋ ๋ ๊น์? ๊ฐ์ฌํฉ๋๋ค!
@Junting-์
I meet a problem saying "Multioutput target data is not supported with label binarization".
predict_proba ๋์ predict๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
@fbrundu ๊ตฌํ์ด ์ ํํฉ๋๊น? ๋๋ ๊ทธ๊ฒ์ ์ฌ์ฉํ๊ณ ์๋ํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ง์ดํฌ๋ก ํ๊ท ํ์์ TPR(์ง์์ฑ๋ฅ )์ ๋ชจ๋ ํด๋์ค์ ๋ชจ๋ TP ํฉ๊ณ๋ฅผ ๊ตฌํ๊ณ ๋ชจ๋ ํด๋์ค์ ๋ชจ๋ TP ๋ฐ FN์ ํฉ๊ณ๋ก ๋๋์ด ๊ณ์ฐํฉ๋๋ค(์ฆ, 3๊ฐ ํด๋์ค ๋ฌธ์ ์ ๊ฒฝ์ฐ).
TPR = (TP1+TP2+TP3)/(TP1+TP2+TP3+FN1+FN2+FN3)
ํผ๋ ํ๋ ฌ์ ์:
[[1,2,3],
[4,5,6],
[7,8,9]]
TPR = (1+5+9)/(1+5+9+(2+3)+(4+6)+(7+8))
์์์ฑ ๋น์จ์ ๋ํด ๋์ผํ ์์ ์ ์ํํ๋ฉด AUC๋ฅผ ๊ณ์ฐํ ์ ์์ต๋๋ค.
๋งคํฌ๋ก ํ๊ท ํ๋ ๊ฐ ํด๋์ค์ ๋ํ TPR์ ๊ฐ๋ณ์ ์ผ๋ก ๊ณ์ฐํ๊ณ ํ๊ท ํํฉ๋๋ค(ํด๋น ํด๋์ค์ ์์ ์์ ๋ฐ๋ผ ๊ฐ์ค์น ๋ถ์ฌ).
TPR = (1/3)* (TP1/(TP1+FN1) + TP2/(TP2+FN2) + TP2/(TP2+FN2))
๊ฐ์ ์:
TPR = (1/3)* (1/(1+(2+3)) + 5/(5+(4+6)) + 9/(9+(7+8)))
์๋ง๋ ์ด๊ฒ์ด ๋์์ด ๋ ๊ฒ์ ๋๋ค(์ ๋ฐ๋๋ฅผ ์ฌ์ฉํ์ง๋ง ์์ด๋์ด๋ ๋์ผํฉ๋๋ค).
http://stats.stackexchange.com/questions/156923/should-i-make-decisions-based-on-micro-averaged-or-macro-averaged-evaluation-mea
๋๋ ๊ฐ์ธ์ ์ผ๋ก ๊ฐ์ค๋์ง ์์ ๊ฑฐ์ ํ๊ท ์ ์ฌ์ฉํ์ง ์์ ๊ฒ์ด์ง๋ง, ์ด๊ฒ์ ์ฐ๊ตฌํ ๋ ผ๋ฌธ์ ์ฐพ์ ์ ์๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.