機械学習における分類タスクの共通評価指標とPythonコード実装

機械学習における分類タスクの共通評価指標とPythonコード実装

データ ポイントを特定の数の定義済みクラスに分類するように ML モデルをトレーニングすることがタスクであるとします。 分類モデルの構築が完了したら、次のタスクはそのパフォーマンスを評価することです。 ユースケースに応じて、これを実行するのに役立つメトリックは多数あります。 この記事では、「いつ使用するのか?」「それとは何か?」「どのように実装するのか?」といった質問に答えていきます。

[[381730]]

混同マトリックス

混同行列はサイズ(クラス×クラス)の行列として定義されるため、バイナリ分類の場合は 2x2、3 クラス問題の場合は 3x3 などになります。 簡単にするために、バイナリ分類を検討し、マトリックスのコンポーネントを理解しましょう。

真陽性 (TP) - クラスが「真」であり、モデルもそれが「真」であると示す回数を表します。 True Negatives (TN) - クラスが false であり、モデルも false であると示す回数を表します。 偽陽性 (FP) - クラスは偽であるが、モデルでは真として表されることを意味します。

このように覚えておくと、モデルは誤ってそれが正であると認識します

False Negatives (FN) - クラスが「True」であったが、モデルが「False」を示した回数を表します。

このように覚えておくことができます - モデルは誤ってそれを偽の値だと認識します

以下に示すように、sklearn を使用すると混同行列を簡単に取得できます。

  1. sklearnからmetrics をインポートし、 calculate_confusion_matrix(y, y_pred): を定義します。
  2. metrics.confusion_matrix(y, y_pred)を返す

図1に示すように、混同行列の要素はTP、TN、FP、FNです。以下に示すように、プレーンPythonを使用して計算することもできます。TP、TN、FP、FNを計算します。

  1. 定義calculate_TP(y, y_pred):
  2. tp = 0
  3. i、jzip(y、y_pred)場合:
  4. i == j == 1 の場合:
  5. tp += 1
  6. TPを返す
  7. def calculate_TN(y, y_pred):
  8. tn = 0
  9. i、jzip(y、y_pred)場合:
  10. i == j == 0 の場合:
  11. tn += 1
  12. 戻るtn
  13. def calculate_FP(y, y_pred):
  14. 0 の場合
  15. i、jzip(y、y_pred)場合:
  16. i == 0かつj == 1 の場合:
  17. 関数p += 1
  18. 戻り
  19. def calculate_FN(y, y_pred):
  20. 0 の場合
  21. i、jzip(y、y_pred)場合:
  22. i == 1かつj == 0 の場合:
  23. 関数n+=1
  24. 戻り

混同行列は、モデルの詳細なパフォーマンスを理解するために重要であり、その後、ユースケースの感度に応じて、このモデルが適切かどうかを判断できます。 たとえば、医療診断のユースケースでは、病気の痕跡があるかどうかを検査する際に、システムが事実は「はい」なのに「いいえ」と言わないように、モデルの偽陰性率を非常に低くする必要があります。 当該人物が関連検査に合格し、後の段階で確認される可能性があるため、依然として偽陽性率が高くなる可能性があります。

正確さ

正確さにより、モデルがどのように機能するかについての全体的な理解が得られます。 ただし、誤って使用すると、これらの数値を簡単に過大評価する可能性があります。 たとえば、クラス ラベルの分布が偏っている場合、多数派クラスのみを予測するとスコアが高くなります (パフォーマンスの過大評価)。一方、バランスの取れたクラスの場合は、精度がより重要になります。

次のようにsklearnを使用して精度スコアを簡単に取得できます。

  1. sklearnからメトリックをインポート
  2. def calculate_accuracy_sklearn(y, y_pred):
  3. metrics.accuracy_score(y, y_pred)を返します

以下に示すように、Pythonを使用して混同行列の要素から計算することもできます。

  1. def calculate_accuracy(y, y_pred):
  2. tp = calculate_TP(y, y_pred)
  3. tn = calculate_TN(y, y_pred)
  4. fp = calculate_FP(y, y_pred)
  5. fn = calculate_FN(y, y_pred)
  6. (tp+tn) / (tp+tn+fp+fn)を返します

精度

精度メトリックは、識別された陽性サンプルの正しい割合を把握するのに役立ちます。たとえば、私たちのモデルでは、結果が 80 回正であると想定し、その 80 回のうちモデルが正しかった回数を正確に計算します。

次のように計算することもできます。

  1. 定義calculate_precision(y, y_pred):
  2. tp = calculate_TP(y, y_pred)
  3. fp = calculate_FP(y, y_pred)
  4. tp / (tp + fp)を返す

想起

リコール指標は、すべてのグラウンドトゥルースの正例のうち、モデルが正しく識別できた正例の割合を理解するのに役立ちます。 たとえば、データ内に 100 個の陽性サンプルがあると仮定すると、モデルがこれらの 100 個のサンプルのうちいくつを正しくキャプチャできたかを計算します。

以下のように計算することもできます。

  1. def calculate_recall(y, y_pred):
  2. tp = calculate_TP(y, y_pred)
  3. fn = calculate_FN(y, y_pred)
  4. tp / (tp + fn)を返す

確率を出力として持つモデルの場合、しきい値を調整してから、関連する混同行列やその他のプロパティを設定することが常に良い方法です。 さまざまなしきい値の適合率-再現率曲線をプロットし、ユースケースの感度に基づいてしきい値を選択できます。

  1. 定義精度_再現曲線(y, y_pred):
  2. y_pred_class、精度、再現率 = [],[],[]
  3. 閾値 = [0.1, 0.2, 0.3, 0.6, 0.65]
  4. しきい値threshの場合:
  5. for i in y_pred: #y_pred はクラス 1確率値を保持します
  6. i>=threshの場合: y_pred_class.append(1)
  7. そうでない場合: y_pred_class.append(0)
  8. 精度.append(calculate_precision(y, y_pred_class))
  9. 呼び出しを追加します(calculate_recall(y, y_pred_class))
  10. 再現率、精度を返すplt.plot(再現率、精度)

F1スコア

F1 は、精度スコアと再現率スコアを組み合わせて、さまざまなモデルを直接比較するのに役立つ単一の数値を取得します。 これは P と R の調和平均と考えることができます。調和平均は、他の方法とは異なり、非常に大きな値には影響されないため使用されます。 ターゲットが偏ったデータセットを扱う場合、通常は精度ではなく F1 の使用を検討します。

次のように計算できます。

  1. def calculate_F1(y, y_pred):
  2. p = 計算精度(y, y_pred)
  3. r = calculate_recall(y, y_pred)
  4. 2*p*r / (p+r)を返す

AUC-ROC

AUC-ROC は、バイナリ分類問題で非常によく使用される評価メトリックの 1 つです。 これは、TPR(真偽率)をy軸に、FPR(偽偽率)をx軸にプロットした曲線です。TPRとFPRは次のように定義されます。

お気づきかもしれませんが、TPR と Recall は、正しく分類した正しいサンプルの数など、同じ表現をしています。 一方、FPR は、誤分類された負の例の割合です。 ROC プロットは、各しきい値での分類器のパフォーマンスを要約します。 したがって、各しきい値に対して、TPR と FPR の新しい混同行列値が得られ、最終的に ROC 2 次元空間内の点になります。 ROC 曲線の下の AUC (曲線下面積) 値が 1 に近いほど、モデルは優れています。 つまり、一般に、AUC が高い各しきい値では、当社のモデルは他のモデルよりも優れたパフォーマンスを発揮します。

次のように計算できます。

  1. sklearn.metricsからroc_auc_scoreをインポートします
  2.  
  3. roc_auc(y, y_pred)を定義します。
  4. roc_auc_score(y, y_pred)を返す

精度 @ k

Precision@k は、マルチラベル分類設定でよく使用されるメトリックの 1 つです。 この下で、特定の例の上位 k 個の予測を計算し、これらの k 個の予測のうち実際に真のラベルであるものがいくつあるかを数えます。 Precision@kは以下のように計算されます。

Precision@k = (k からの正しい予測の数) / (k 内の項目の数)

  1. 実際のラベル = [1, 1, 0, 0, 1]
  2. 予測ラベル = [1, 1, 1, 0, 0]
  3.  
  4. k=3とする
  5. 精度@k = 2/3 (TP/(TP+FP)同じ)

ログ損失

バイナリ分類の問題がある場合には、ログ損失は非常に有効です。 これは、予測が実際のラベルからどれだけ離れているかに基づいて予測の不確実性を考慮した確率を出力するモデルがある場合に使用されます。

次のように計算できます。

  1. def calculate_log_loss(y, y_pred_probs):
  2. ログ損失 = -1.0*(t*log(p) + (1-t)*(t*log(1-p))
  3. log_lossを返す

データセットのバランスが取れていない場合は、クラスの重みを追加して、多数クラスに比べて少数クラスのエラーにペナルティを課すこともできます。コードでは、w1 と w2 はそれぞれ正クラスと負クラスの重みに対応します。

  1. def calculate_log_loss_weighted(y, y_pred):
  2. ログ損失 = -1.0*(w1*t*log(p) + w2*(1-t)*(t*log(1-p))
  3. log_lossを返す

補足: クロスエントロピーと呼ばれるものを使用すると、これをマルチクラス設定に簡単に拡張できます。

ブライアースコア

Brier スコアは通常、タスクが本質的にバイナリ分類である場合に使用されます。 それは単に実際の値と予測値の差を二乗したものです。 N 個のサンプル グループについて、平均をとります。

次のように計算できます。

  1. brier_score(y, y_pred)を定義します。
  2. s=0
  3. i、jzip(y、y_pred)場合:
  4. s += (ji)**2
  5. s * (1/len(y))を返す

この記事では、問題の性質に基づいて機械学習分類モデルを評価する際に、すべてのデータ サイエンティストが念頭に置く必要がある一般的な評価メトリックをいくつか紹介しました。

<<:  嫌がらせ電話をかけてきた相手は実はAIロボットだった?

>>:  20年後には、すべての仕事の半分が人工知能に置き換えられるのでしょうか?これらの「高リスク産業」とは何でしょうか?

ブログ    
ブログ    

推薦する

ICLR 2022: AI が「目に見えないもの」を認識する方法

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

蘇寧における知識抽出分野におけるディープラーニングの試みと実践

[[257470]] 【51CTO.comオリジナル記事】背景近年、膨大なデータの蓄積、計算能力の向...

NetEase Games AIOps実践:異常検知の最適化戦略とプラットフォーム構築

この共有では主に以下の点が紹介されます。 AIOps ロードマップ異常検出プラットフォーム構築インテ...

人工知能は大量失業を引き起こすでしょうか?中国人民政治協商会議全国委員会によるこの調査は、その答えを提供している。

2019年の注目産業よく知られている5G、ブロックチェーン、インターネットに加えてもう一つは人工知...

マイア:人間を模倣するが、人間を超えることはないチェスAI

[[378769]]海外メディアの報道によると、AIは長年にわたり、あらゆる古典的なボードゲームで...

人工知能を世界で初めて活用し、特発性肺線維症治療薬の新たなメカニズムを発見

Insilico Medicine は、人工知能を使用して特発性肺線維症治療薬の新しいメカニズムを世...

ソラを批判した後、ルカン氏は「視覚世界モデル」と題した論文を発表し、AIが物理世界を学習するための鍵を明らかにした。

ソラの登場はAI界全体に熱狂を巻き起こしたが、ルカンは例外だった。 OpenAI による Sora ...

最高人民検察院は、虚偽訴訟の監視に人工知能とビッグデータを活用することを検討している。

虚偽の訴訟は、他人の正当な権利と利益を侵害するだけでなく、社会の健全性を著しく損ない、司法の公平性、...

「映画を見る」こと以外に、人工知能は医療の分野で何ができるのでしょうか?

6月26日に開催されたセコイア・グローバル・ヘルスケア産業サミットで、スタンフォード大学のフェイフ...

AIの次の目的地はどこでしょうか?

[[318187]]私たちはインテリジェント変革の時代に生きており、人工知能技術はあらゆる分野の人...

ディープラーニング: オートエンコーダの基礎と種類

ディープラーニングが私たちの社会に大きな影響を与えようとしていることは明らかです。 Mobibit ...

...

...

Apple、Google Play ランキングアルゴリズム

すべてのアプリにおいて、製品自体が登場する前、アイデアが生まれた時点で、すでに製品マーケティングの問...