不均衡クラスの性能測定


不均衡なデータは、単一のクラスまたはカテゴリのより多くのサンプルおよび他の全てのクラスの非常に少ないデータを有するデータを意味する.機械学習の分類問題の問題である.教師付き機械学習分類では,重要な課題の一つである.基本的に2種類の2進分類と多クラス分類である.二値分類では、サンプルは機械学習用語のクラスとして知られている2つのカテゴリーに分けられます.分類は、データセット(特徴およびラベルを有するデータのコレクション)に存在するサンプルのラベルを予測することを意味する.バイナリ分類の簡単な例は、画像が犬か猫かどうか識別します.多クラス分類例は、各桁を表す10のクラスを含む画像に基づいて数字を識別している.
電子メールのスパム検出のような最も現実的なシナリオでは不均衡データが多く存在することが多い.タイプスパムの電子メールはほとんどない.ガン検出の場合は非常に少ない癌タイプの場合、正確に予測されたクラスのサンプルの総数に対する比率である精度は、不均衡データセットの性能評価に使用できない.この状況を説明する例は、スパムと非スパムの電子メールを含むデータセットがあれば、電子メールの総数が1000であり、スパムである電子メールの数が10ならば、すべてのサンプルが非スパムであると予測した場合、モデルの精度は99.90 %になるでしょう.したがって、精度はこのデータセットのモデルの性能を評価するための良い測定であるはずがありません.不均衡データセット上のモデルを評価するための他の性能尺度が必要である.
不均衡データセットベースモデルの性能測定のいくつかは,
  • の精度
  • リコール
  • の特異性
  • F 1スコア
  • 幾何平均242479182
  • インデックス・バランス精度
  • これらのパフォーマンス対策を理解するためには、まずいくつかの用語を理解する必要がある.これらの用語は真のpostive(tp),真の否定(tn),偽陽性(fp),偽陰性(fn)である.
    正の正のクラスは、正のクラスが正確に予測され、真の負の負のクラスが正確に予測されることを意味します.実際のクラスが正で、否定的に予測されるならば、それは偽陰性として知られています.実際のクラスが負で、予測されたクラスがポジティブであるなら、それは偽陽性と呼ばれます.以下の表で与えられた要約です.
    予測陽性
    負の予測
    実際の正
    真陽性( tp )
    偽陰性( fn )
    実際の否定
    偽陽性( FP )
    真の負( tn )
    また、TP、TN、FP、およびFNを記述する画像は以下で与えられる

    精度


    正則予測クラスの総数に正の正クラスを正しく予測した.精度の公式は

    Precision = TP/(TP+FP)


    リコール


    リコールはまた、感度と真の正のレートとして知られています.正しく予測された正クラスの合計実正クラスへの比率です.リコールの式は

    Recall = TP/(TP+FN)


    特異性


    また、真の負の率として知られています.それは、実際の負のクラスに正しく予測された否定クラスの比率です.特異性の式は

    Specificity = TN/(TN+FP)


    F 1スコア


    F 1スコアは、精度とリコールの高調波平均です.F 1スコアの公式は

    F1-score = 2*Precision*Recall/(Precision+Recall)


    幾何平均


    幾何平均はリコールと特異性の積の平方根である.幾何平均の式は

    Geometric Mean = √(Recall*Specificity) or Geometric Mean = √(True Positive Rate * True Negative Rate)


    インデックス・バランス


    これは、パフォーマンスを測定するための新しいメトリックです.まず第一に、真の正の率と真の負の率の違いです.式はDominance = Recall-Specificityである.優勢の値には重みαが割り当てられる.指数平衡精度(IBA)の式はIBA = (1 + α*Dominance)(GMean²)である.簡単に言えば

    IBA = (1 + α*(Recall-Specificity))*(Recall*Specificity)


    Pythonのimbalanced learnライブラリは不均衡クラスのパフォーマンスを測定するためにすべてのこれらのメトリックを提供します.次のようにインポートできます
    from imblearn import metrics
    
    別の方法を見つけるためのコードの例は
    y_true = [1, 1, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2]
    y_pred = [1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2]
    target_names = [ 'class 1', 'class 2'] 
    result = metrics.classification_report_imbalanced(y_true, y_pred, target_names=target_names)
    print(result)
    

    出力



    ここでpreは精度、recはリコール、SPEは特異性、F 1はF 1スコア、ジオは幾何平均、IBAはインデックスバランスの精度とSUMはサポートです.αのデフォルト値はIBAに対して0.1である.