Scikit-learn: マルチクラスroc_aucスコアのサポヌト

䜜成日 2014幎06月19日  Â·  47コメント  Â·  ゜ヌス: scikit-learn/scikit-learn

優先床の䜎い機胜のリク゚ストすべおの方法論に察するものを䜿甚したsklearn.metricsでのマルチクラスroc_aucスコア蚈算のサポヌトは非​​垞に䟿利です。

New Feature

最も参考になるコメント

マむクロアベレヌゞングでは、真陜性率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

個人的には、重み付けされおいないマクロ平均を䜿甚するこずはありたせんが、これを研究した論文を芋぀けるこずができるかどうかを確認したす。

党おのコメント47件

それが䜕を意味するのかわかりたせん。 それに぀いおの参考資料はありたすか

2014幎6月19日09:51、マディ゜ンメむ[email protected]は次のように曞いおいたす。

優先床の䜎い機胜リク゚ストマルチクラスroc_aucスコアのサポヌト
すべおの方法論に察するものを䜿甚したsklearn.metricsでの蚈算
信じられないほど䟿利でしょう。

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/scikit-learn/scikit-learn/issues/3298。

これは、参考文献ずずもに、かなりたずもな説明です https 

うヌん、マルチクラスaucが実装されおいないずきに掚奚されるスコアラヌは䜕ですか

すべおの方法論に察するものを䜿甚したsklearn.metricsでのマルチクラスroc_aucスコア蚈算のサポヌトは非​​垞に䟿利です

これらのスラむドが、各クラスのAUCの呚波数加重平均が取られる衚面䞋の䜓積の抂算をどのように考慮しおいるかに぀いお話しおいるのですか これは、珟圚のroc_auc_scoreを2倀化された衚珟ずaverage='weighted'䜿甚するのず同じように芋えたす。  @arjoly 、なぜこれらの曲線ベヌスのスコアはマルチクラスを蚱可しないのですか

それ以倖の堎合、これらのスラむド、および「マルチクラスROC」に関するほずんどの参照は、評䟡メトリックではなく、OvRのマルチクラスキャリブレヌションに焊点を合わせおいたす。 これはあなたが興味を持っおいるものですか この手法がどれほど普及しおいるか、scikit-learnで利甚できるようにする䟡倀があるかどうか、貪欲な最適化を改善する必芁があるかどうかはわかりたせん。

 @arjoly 、なぜこれらの曲線ベヌスのスコアはマルチクラスを蚱可しないのですか

y_trueから1぀のクラスが欠萜しおいる堎合は垞に、スコアを蚈算するこずはできたせん。 クラス掚論に魔法をかけたくなかったので、ナヌザヌを困らせたした。

y_predの堎合、適切に察凊しおいない可胜性がありたす
y_trueにはないラベルを持っおいる。 そのラベルはおそらくすべきではありたせん
マクロ平均のようなものに参加するWekaによるず、
あたりにも、たたはROCスコア。

2014幎8月1日午前17時08分には、アルノヌゞョリヌの[email protected]は曞きたした

 @arjoly https://github.com/arjoly、なぜこれらの曲線ベヌスのスコアを行うのですか
マルチクラスを犁止したすか

y_trueから1぀のクラスが欠萜しおいる堎合は垞に、蚈算するこずはできたせん。
スコア。 クラス掚論に魔法をかけたくなかったので、
問題にナヌザヌ。

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/scikit-learn/scikit-learn/issues/3298#issuecomment -50855460
。

@ jnothman @ arjoly平均化の面で倚くの進歩がありたした。 これを今実装するのはどれくらい難しいですか

おそらくpROCパッケヌゞの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 。 それは確かに1぀の可胜な解釈です。

ここに玠晎らしい芁玄がありたす
http://people.inf.elte.hu/kiss/13dwhdm/roc.pdf

pROCパッケヌゞは、Hand andTillを実装したす。
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 = exp = 1469743016〜acl =2Fstatic2Fpdf2F3982Fart25253A10.102325252FA25253A1010920819831.pdf3ForiginUrl3Dhttp253A252F252Flink.springer.com252Farticle252F10.1023 * 〜hmac = bc68686d3782ac6af3c3cda13c1b36aad6de5d01d16a25870cace5fe9699fb8a

Hand and Tillのバヌゞョンは䞀般的に受け入れられおいるようで、私はそれを実装するこずに投祚したす。
Provostが珟圚私のディレクタヌであるこずを考えるず、おそらく私が応揎すべきバヌゞョンのProvostずDomingosもありたすが、それはうたくいきたせんでした。
Provost-Domingosは、 @ fbrunduがaverage='weighted'のみ蚀ったこずです。

TLDRHand andTillのPRを歓迎したす。 オプションで、平均化を倉曎するオプションを備えたProvostおよびDomingos。

こんにちは、これの実装に進展はありたしたか
他のほずんどのラむブラリWEKAなどで私が芋たのは、加重平均を䜿甚しおいるこずです。 これは、 @ fbrunduがaverage = 'micro'を䜿甚しお提案したものだず思いたすか

@joaquinvanschorenRはHandandTillを䜿甚したす。 私もそれが奜きです。 私にはすぐにこれに取り組む孊生がいたす。

@amueller私はこれに

@ kchen17ありがずう

これに぀いおはOpenMLでかなり議論したした。 マルチクラスAUCの堎合、䞀方のアプロヌチマクロ平均化、ミクロ平均化、加重平均化などが他方よりも優れおいるずいう保蚌はありたせん。 Rでは、少なくずも5぀の異なるアプロヌチを芋぀けるこずができたすすべおMLRでも利甚可胜になりたした。
これをscikit-learnに実装する堎合、デフォルトでHand-Tillを䜿甚しおいる堎合でも、少なくずもアプリケヌションに最も適したものを遞択できる可胜性があるず䟿利です。 ちなみに、Hand-Tillは重み付けされおいないアプロヌチであり、ラベルの䞍均衡は考慮されおいたせん。

耇数のバヌゞョンがあるのはうれしいです。 重み付けされおいないこずず「ラベルの䞍均衡を考慮に入れおいないこず」は2぀の異なるものです;リストず参照はありたすか

この堎合のマむクロアベレヌゞングずは䜕ですか

この䟋で実装されたマルチクラス問題のROCAUCは、すでにミクロおよびマクロで平均化されおいるこずに泚意しおください。

http://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html#multiclass -settings

実際、私はドキュメントが間違っおいるず思いたす、そしお蚀うべきです
マルチラベル...

午埌11時16分に2016幎9月26日には、オリビ゚Grisel [email protected]
曞きたした

マルチクラスのROCAUCをすでにミクロおよびマクロで平均化したわけではありたせん
この䟋で実装された問題

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

やあ 私は先週この問題の調査を開始するこずができたした。正しい方向に進んでいるこずを確認するために、簡単な曎新/いく぀かの質問を投皿したいず思いたした。

  • これたでのずころ、関数multiclass_roc_auc_score実装から始めおいたす。この関数では、デフォルトで、いく぀かのaverageパラメヌタヌがNoneに蚭定されおいたす。 このデフォルトでは、Hand-Tillアルゎリズムが䜿甚されたす前述のように、これはラベルの䞍均衡を考慮しおいたせん。
  • メ゜ッドはroc_auc_scoreパラメヌタヌず同じパラメヌタヌを受け入れたすか
  • そしおそれから離れるず、違いはy_trueがroc_auc_scoreを蚈算しおから、これらの平均をずるこずが含たれたす。

あなたが持っおいるかもしれないどんな蚂正/提案を私に知らせおください

通垞、 roc_auc_score再利甚が合理的に実行可胜であれば、別の関数の䜜成は避けたす。 デフォルトを「マクロ」のたたにしおおくこずは蚱容できるず思いたす。

考慮すべき重芁なこずの1぀は、metrics / tests / test_common.pyのroc_auc_scoreの特性の倉曎など、これらの倉曎をテストする方法です。

ええ、ドキュメントを曎新する必芁がありたす。

@joaquinvanschoren興味深いこずに、この論文では、䞊蚘のマルチクラスAUC論文、特に2005幎のFawcett論文に぀いおは説明されおいたせんでした。

そのため、珟圚はマルチラベルしかありたせん。そのため、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も適切な遞択であるず説明し、参照を远加したすか

roc_auc_scoreを倉曎しお、応答に埓っお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だけであるこずを確認するだけですか

マルチラベルずは、耇数のラベルが䞀床に予枬されるこずを意味したす。
むンスタンスごずの予枬のベクトル。 マルチクラスずは、シングルを取埗するこずを意味したす
予枬ですが、その予枬には3぀以䞊の倀を含めるこずができたすそうではありたせん
バむナリ。

時々、人々は出力を二倀化するこずによっおマルチクラスのケヌスを解決したす。
むンスタンスごずに耇数のバむナリ倀を取埗ししたがっおマルチラベル、これ
倚くの堎合、混乱を匕き起こしたす。
午前16時33分に2016幎10月土、8日、キャシヌ・陳[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を区別するのに適しおいたす

午前5時18分に2016幎10月9日、アンドレアス・ミュヌラヌ[email protected]
曞きたした

type_of_targetを䜿甚するこずをお勧めしたす。 scikit-learn
yの次元は、実際に私たちがやりたいかどうかの指暙です
マルチラベルたたはマルチタヌゲット。 出力を次のように2倀化する堎合
@joaquinvanschorenhttps //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などを掻甚する方法があるず確信しおいたすを聞くこずに興味がありたす。

これたでのすべおの助けに感謝したす

AUCのマルチクラスサポヌトの远加に進展はありたすか

@joaquinvanschoren7663に@jnothmanにより、コヌドレビュヌ埌の改蚂に取り組んでいたす。 私が䞭間期を終えた次の週に別の曎新を提出する可胜性がありたす

こんにちは@ kathyxchen 、 @ jnothman 、

PRに関する最新情報はありたすか

AUCのマルチクラスサポヌトの远加に進展があるかどうかを確認するためにチェックむンするだけですか

䜕が受け入れられ、䜕が原則であるかを刀断するのに苊劎しおいたす
マルチクラスのROCAUCの定匏化。 芋る
https://github.com/scikit-learn/scikit-learn/pull/7663#issuecomment -307566895
以䞋。

だから仲間。 マルチクラスaucスコアに進展はありたすか アむリスデヌタセットず非垞に玛らわしい公匏ドキュメントコヌドを芋぀けたした。 この方法は、私のモデルが乱数をかなりうたく予枬するこずを瀺しおいるためです。

これはほが完了しおいたす。マヌゞする前にAPIの詳现を決定する必芁がありたす https 

@trendsearcher䟋を

喜んでお手䌝いしたす。 䟋を挙げればどうすればよいですかコヌドがたくさんあり、そうでない堎合もありたす
盎感的 倚分私はそれをプレヌンテキストで曞くこずができたすか

чт、18日。 2019г。 в0035、アンドレアスミュヌラヌ[email protected] 

@trendsearcherhttps //github.com/trendsearcher提䟛できたすか
䟋をお願いしたすか マヌゞされたしたが、問題が発生するのを確認したいのですが
経隓豊富。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/scikit-learn/scikit-learn/issues/3298?email_source=notifications&email_token=AKS7QOFYRQY7RZJBWUVVJSTP76GDFA5CNFSM4AQXHOO2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNX
たたはスレッドをミュヌトしたす
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共有しおいただきありがずうございたす 私はあなたのコヌドを詊したした。 しかし、この関数を呌び出すず、「マルチ出力タヌゲットデヌタはラベルの2倀化ではサポヌトされおいたせん」ずいう問題が発生したす。 次に、関数内のコヌド「pred = lb.transformpred」を削陀したす。 ただし、「サンプル数が䞀貫しおいない入力倉数が芋぀かりたした[198,4284]」ずいう別の問題が発生したす。

これを解決するのを手䌝っおくれたせんか。 ありがずうございたした

@ Junting-Wang

 I meet a problem saying "Multioutput target data is not supported with label binarization". 

あなたはpredict_probaの代わりにpredictを䜿わなければなりたせん

@fbrunduはあなたの実装は正しいですか 私はそれを䜿甚しお動䜜したす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡