機械学習でサンプルが不均衡な場合はどうすればよいでしょうか?

機械学習でサンプルが不均衡な場合はどうすればよいでしょうか?

銀行が新規顧客が債務不履行になるかどうかを判断する際、債務不履行にならない顧客と債務不履行になる顧客の比率は通常 99:1 です。実際、債務不履行になる人の数は非常に少ないです。このような分類状況では、モデルが何もせず、すべての人を債務不履行にならない人とみなしても、精度は 99% になる可能性があります。これでは、モデルの評価指標は意味をなさず、「債務不履行になる人を特定する」というモデリングの目的を達成できません。

このようなサンプルの不均衡の例は、生活のあらゆる場所で見られます。これは通常、異常検出、顧客離れ、まれな時間分析、スパム識別、クレジットカードの信用問題、不正取引検出、工場での不良品検出などの低頻度イベントなどのシナリオで発生します。

このようなサンプルの不均衡なタスクに対処する場合、従来の方法では実際のビジネス要件を満たすことができず、できるだけ多くの少数クラスのサンプルを正確に取得することができません。サンプルの不均衡により、分類モデルに重大な偏りが生じるためです。

この記事では、機械学習におけるサンプルの不均衡を処理するための戦略、一般的な方法、ツールを紹介します。

不均衡な分類

データ セット内の各カテゴリのサンプル数は非常に不均衡であり、データ サイズに基づいて次のカテゴリに分類できます。

  • ビッグデータは不均等に分散されています。全体的なデータ規模は大きく、小規模サンプル クラスの割合は小さいですが、小規模サンプルでもほとんどまたはすべての機能がカバーされます。
  • 小さなデータは不均等に分散されます。全体のデータサイズが小さく、サンプル比率が小さいカテゴリの数も少ないため、特徴分布に重大な不均衡が生じます。

不均衡なサンプル分布は、異なるカテゴリ間のサンプル比率の違いに起因しており、サンプルからパターンを抽出することが困難になっています。一般的に10倍を超えると注意が必要となり、20倍になると対処が必要になります。

不均衡処理戦略の例

データセットの拡張

サンプルが不均衡な場合は、一定の割合で小規模クラスのサンプル データを追加してデータ セットを拡張できます。多くの場合、データが多いほど、アルゴリズムが優れています。機械学習では既存のデータを使用してデータ全体の分布を推定するため、多くの場合、データが多いほど分布情報が多くなり、分布の推定精度が向上します。

ただし、小さなカテゴリのサンプルデータを増やすと、大きなカテゴリのデータも増えることがあり、サンプルの不均衡の問題を大幅に解決することはできません。現時点では、大規模カテゴリのサンプル データをアンダーサンプリングし、一部の大規模カテゴリ データを破棄することで問題を解決できます。

評価指標を再選択

精度が、バランスのとれたカテゴリによる分類タスクにおける分類モデルを効果的に評価できないため、モデルが失敗し、ビジネスを誤解させ、大きな損失につながる可能性があります。

最も一般的な評価指標は混同行列です。混同行列とは、分類器によって予測されたカテゴリのサンプルと、その実際のカテゴリ (TP、FN、FP、TN) をカウントする表です。精度 Precision、再現率 Recall、F1 スコア F1-Score などを含みます。

データセットを再サンプリングする

サンプリング戦略を使用すると、データの不均衡を軽減できます。主な方法は2つあります

  • 小クラスデータサンプルをサンプリングして小クラスデータサンプルの数を増やす、つまりオーバーサンプリング
  • 大規模なクラスのデータ サンプルをサンプリングして、そのクラスのデータ サンプルの数を減らすことをアンダーサンプリングと呼びます。

多くの場合、サンプリング アルゴリズムは実装が簡単で、実行が速く、パフォーマンスも良好です。サンプリング戦略を使用する場合は、次の点を考慮してください。

  • 大規模カテゴリ(10,000、100,000以上)のサンプルをアンダーサンプリングする、つまり一部のサンプルを削除する
  • 小さなクラスのサンプルをオーバーサンプリングする(1未満またはそれ以下)、つまり、いくつかのサンプルのコピーを追加する
  • ランダムサンプリングと非ランダムサンプリングの2つのサンプリング方法を試してください
  • 各カテゴリーごとに異なるサンプリング比率を試してください
  • オーバーサンプリングとアンダーサンプリングの両方を使用する

人工データサンプルを生成する

簡単な方法は、このクラスのすべてのサンプルの各属性機能の値空間から値をランダムに選択して新しいサンプルを形成すること、つまり、属性値のランダム サンプリングを行うことです。新しい人工サンプルは、経験に基づいて属性値をランダムにサンプリングするか、各属性が互いに独立してサンプリングされていると仮定して、ナイーブベイズに似た方法を使用することで構築できます。これにより、より多くのデータが生成されますが、属性間の線形関係(存在する場合)は保証されません。

SMOTE (Synthetic Minority Over-sampling Technique) と呼ばれる人工データ サンプルを構築する体系的な方法があります。 SMOTE は、小さなクラス内の既存のサンプルのコピーを生成するのではなく、新しい小さなクラスのサンプルを構築するオーバーサンプリング アルゴリズムです。つまり、アルゴリズムによって構築されるデータは、元のデータ セットには存在しない新しいサンプルです。

この方法では、距離メトリックに基づいて小さなカテゴリ内の 2 つ以上の類似サンプルを選択し、サンプルの 1 つを選択し、選択したサンプルの属性にノイズを追加するために、一度に 1 つの属性を処理するために、一定数の隣接サンプルをランダムに選択します。これにより、さらに新しいデータが構築されます。

さまざまな分類アルゴリズムを試す

あらゆる機械学習タスクに、お気に入りの使い慣れたアルゴリズムを使用しているという事実に、多くの人が共感すると思います。ただし、特に不均衡なサンプルなどの分類タスクの場合、タスク自体の特性に応じて、タスクごとに異なるアルゴリズムを選択する必要があります。異なるタスクやデータには異なるアルゴリズムが使用されるため、それらを比較するには異なるアルゴリズムを使用する必要があります。

決定木は、クラスのバランスが崩れたデータに対しては、良好なパフォーマンスを発揮する傾向があります。クラス変数に基づく分割ルールを使用して分類ツリーを作成し、異なるカテゴリのサンプルを強制的に分離します。

モデルにペナルティを課す

同じ分類アルゴリズムを、異なる角度から使用することもできます。たとえば、分類タスクが小さなカテゴリを識別することである場合、分類器の小さなカテゴリのサンプル データの重みを増やし、大きなカテゴリのサンプルの重みを減らすことで、分類器が小さなカテゴリのサンプルに重点を置くようにすることができます。

具体的なアプローチとしては、分類器をトレーニングするときに、分類器が小さなクラスのサンプルを誤分類した場合、分類器が小さなクラスのサンプルを誤分類するための追加コストが追加されます。この追加コストにより、分類器は小さなクラスのサンプルについてより「懸念」するようになる可能性があります。ペナルティ付き SVM アルゴリズムやペナルティ付き LDA アルゴリズムなど。

問題を理解するために新たな視点を試みる

データの不均衡の問題は、分類とは異なる観点から解決できます。小さなクラスのサンプルを外れ値として扱うことができるため、問題は異常検出と変化検出に変換されます。

外れ値検出とは、そのようなまれなイベントを識別することです。たとえば、機械の故障は機械部品の振動によって識別でき、悪意のあるプログラムはシステムコールシーケンスによって識別できます。これらのイベントは通常の状況に比べてまれです。

トレンド検出は、異常なトレンドを検出する点を除いて、外れ値検出と似ています。たとえば、ユーザーのパターンや銀行取引を観察することで、ユーザーの行動の異常な変化を検出します。

小規模クラスのサンプルを外れ値として扱うという考え方への転換は、サンプルを分離または分類するための新しい方法を検討するのに役立ちます。これら 2 つの方法は、異なる視点から考え、問題を解決する新しい方法を試すことができます。

イノベーションに挑戦

問題を慎重に分析して調査し、より簡単に解決できる複数の小さな問題に分割できるかどうかを確認します。

サンプルの不均衡に対処する方法

サンプリングにより

オーバーサンプリング

オーバーサンプリングとも呼ばれ、分類における少数クラスのサンプル数を増やすことでサンプルの不均衡を実現します。より一般的なアルゴリズムは

合成少数オーバーサンプリング技術 (SMOTE) アルゴリズム。

SMOTE: 少数クラス サンプル a に対して、最も近い隣接サンプル b をランダムに選択し、次に a と b を結ぶ線から点 c を新しい少数クラス サンプルとしてランダムに選択します。

文法:

 imblearn . オーバーサンプリング.SMOTE (

サンプリング戦略= '自動'
ランダム状態= なし
k_neighbors = 5
n_ジョブ= 1 )

例:

 コレクションからカウンターをインポート
sklearn.datasets からmake_classification インポートする
imblearn . over_sampling からSMOTE をインポート
# ドキュメントテスト: +NORMALIZE_WHITESPACE
X , y = 分類する(
n_classes = 2
クラス_sep = 2
重み= [ 0.1 , 0.9 ],
n_informative = 3
n_redundant = 1flip_y = 0
n_features = 20
クラスあたりのクラスター数= 1
n_サンプル= 1000
ランダム状態= 10 )
print ( '元のデータセットの形状 %s'
% カウンター( y ))

元のデータセットの形状カウンター

({1: 900, 0: 100})

 スモート= SMOTE ( ランダム状態= 42 )
X_res , y_res = smote.fit_resample ( X , y ) です
print ( 'データセットの形状 %s を再サンプリング'
% カウンター( y_res ))

再サンプリングされたデータセットの形状カウンタ

({0: 900, 1: 900})

SMOTE バリアント borderlineSMOTE、SVMSMOTE

すべての少数クラス サンプルに焦点を当てる基本的な SMOTE アルゴリズムと比較すると、これらの状況は最適ではない決定関数につながる可能性があるため、SMOTE ではいくつかのバリエーションが作成されました。これらの方法では、最適な決定関数の境界上のいくつかの少数クラス サンプルに焦点を当て、最も近い隣接クラスの反対方向にサンプルを生成します。

どちらのタイプの SMOTE も、危険なサンプルを使用して新しいサンプル データを生成します。

  • borderlineSMOTE(kind='borderline-1') の最近傍のランダム サンプル b は、少数クラス サンプル a とは異なるクラスからのものです。
  • borderlineSMOTE(kind='borderline-2') ランダムサンプル b は、任意のクラスに属するサンプルになります。
  • SVMSMOTE() は、サポート ベクター マシン分類器を使用してサポート ベクターを生成し、新しい少数クラス サンプルを生成します。

少数派クラスのサンプルは、次の 3 つのカテゴリに分類されます。

  • ノイズ サンプル ノイズ、少数クラスの最も近い隣接サンプルはすべて、サンプル a とは異なる他のカテゴリから取得されます。
  • 危険なサンプルは危険であり、最も近い隣接サンプルの少なくとも半分が同じクラス(クラス a とは異なる)です。
  • 安全なサンプル。最も近い隣接サンプルはすべて同じクラスからのものです。

文法:

 imblearn.over_sampling.BorderlineSMOTE ( サンプリング戦略= 'auto' ,
ランダム状態= なし
k_neighbors = 5
n_jobs = 1m_neighbors = 10
種類= 'ボーダーライン-1' )
imblearn . オーバーサンプリング.SVMSMOTE (
サンプリング戦略= '自動'
ランダム状態= なし
k_neighbors = 5n_jobs = 1
m_neighbors = 10
svm_estimator = なし
アウトステップ= 0.5 )

適応合成 (ADASYN) 適応合成アップサンプリング

ADASYN: K 最近傍分類器に基づいて誤分類された元のサンプルの近くに新しい少数クラス サンプルを生成することに重点を置いています。

文法:

 imblearn . オーバーサンプリング.ADASYN (
サンプリング戦略= '自動'
ランダム状態= なし
n_neighbors = 5n_jobs = 1
比率= なし)

例:

 コレクションからカウンターをインポート
sklearn.datasets からmake_classification インポートする
imblearn . over_sampling からADASYN をインポート
# ドキュメントテスト: +NORMALIZE_WHITESPACE
X , y = 分類する(
n_classes = 2
クラス_sep = 2
重み= [ 0.1 , 0.9 ],
n_informative = 3
n_冗長= 1
反転_y = 0
n_features = 20
クラスあたりのクラスター数= 1
n_サンプル= 1000
ランダム状態= 10 )
print ( '元のデータセットの形状 %s'
% カウンター( y ))

元のデータセットの形状カウンター

({1: 900, 0: 100})

 ada = ADASYN ( ランダム状態= 42 )
X_res , y_res = ada.fit_resample ( X , y )
print ( 'データセットの形状 %s を再サンプリング'
% カウンター( y_res ))

再サンプリングされたデータセットの形状カウンタ

({0: 904, 1: 900})

RandomOverSamplerはランダムにサンプルをサンプリングし、新しいサンプルを追加します

例: 前の例と同様に、次の例は簡略化されています。

 imblearn.over_sampling からRandomOverSampler インポート
ros = ランダムオーバーサンプラー( andom_state = 0 )
X_resampledy_resampled = ros.fit_resample ( Xy )

代表性の低いサンプルをランダムにサンプリングします。このアルゴリズムでは、異種データ (文字列を含むデータなど) のサンプリングが可能です。アップサンプリングは、元の少数サンプルを繰り返しサンプリングすることによって実行されます。

アンダーサンプリング

アンダーサンプリングとも呼ばれ、分類における多数派クラスのサンプル数を減らすことでサンプルの不均衡を実現します。

RandomUnderSampler 直接ランダム選択削除法

RandomUnderSampler 関数は、データのサブセットをランダムに選択することで、カテゴリ間でデータのバランスをとる迅速かつ非常に簡単な方法です。

文法:

 imblearn.under_sampling からRandomUnderSample インポート
model_undersample = ランダムアンダーサンプル()
x_undersample_resampledy_undersample_resampled = model_undersample . fit_sample ( Xy )
  • 注 1: replacement=True が設定されている場合、ブートストラップが使用されます。
  • 注 2: 文字列を含むデータなど、非構造化データも許可されます。
  • 注3: デフォルトのパラメータを使用する場合、非繰り返しサンプリングが採用されます。

NearMissはNNヒューリスティックアルゴリズムに基づいています

NearMiss 関数は、サンプルを選択するためのヒューリスティック ルールをいくつか追加し、バージョン パラメーターを設定することで 3 つのヒューリスティック ルールを実装します。

 imblearn . under_sampling からNearMiss をインポート
nm1 = ニアミス( バージョン= 1 )
X_resampled_num1y_resampled = nm1。fit_resample ( Xy )
  • version=1: N 個の最も近い負のサンプルとの平均距離が最小の正のサンプルを選択します。
  • バージョン = 2: 最も遠い N 個の負のサンプルとの平均距離が最小の正のサンプルを選択します。
  • バージョン = 3: 2 ステップ アルゴリズム ---- まず、各負のサンプルに対して、最も近い M 個の正のサンプルを保持します。次に、N 個の最も近い隣接サンプルとの平均距離が最大である陽性サンプルが選択されます。

<<:  オフライン認識率が最大99%のオープンソースPython顔認識システム〜

>>:  インテリジェントなクラウドネイティブアプリケーションの台頭

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

2030年までに、人工知能のせいで世界中で8億人が失業するでしょう!ビル・ゲイツの失業者へのアドバイス

[[219257]]人工知能は本質的には人間のシミュレーションです。人間の思考をシミュレートする方法...

人工知能はサーバーを冷却するために大量の水を必要とする

あらゆる計算集約型のアクティビティと同様に、ChatGPT のような AI システムでは大量の処理と...

生成 AI 規制: 「ディープフェイク技術」は大規模言語モデルの自由意志を実証するか?

特定のスタイルの生成 AI プロンプトを与えるということは、AI に想像力を働かせてほしいということ...

転移学習: データが不十分な場合に深く学習する方法

[[191502]]ディープラーニング技術を使用して問題を解決する際に最もよく見られる障害は、モデル...

シンプルなアルゴリズムで分散システムのパフォーマンスが瞬時に10倍以上向上

1. 概要この記事では、多数のクライアントが同時にデータを書き込む場合に、分散ファイルシステム HD...

人間は知能を持っているのに、なぜモノのインターネットには人工知能が必要なのでしょうか?

IoT にインテリジェンスが必要なのはなぜですか?人工知能は登場しましたが、具体的な概念はなく、ま...

人工知能ロボットの開発にはどのプログラミング言語を選択すればよいでしょうか?

この記事では、ロボット開発で使用される最も人気のあるプログラミング言語のトップ10を見ていきます。そ...

レッドハットのCEOがAIの取り組みとソースコードの混乱について語る

今年初めの Red Hat Summit で、Red Hat は OpenShift AI によるプ...

完全武装したこの「アイアンマン」は、走ったり、人命を救ったり、さらには飛行可能な初のヒューマノイドロボットになるかもしれません。

ビッグデータダイジェスト制作著者: カレブトンガ火山の噴火により、洪水や地震などの自然災害に見舞われ...

人工知能の4つの主な種類を探る

人工知能(AI)は、環境、教育、医療などの重要な問題の解決に新たな可能性をもたらします。人工知能は、...

四足歩行ロボットが二足歩行で階段を降りることを学びます。脚型システムより83%効率が高い

テスラと競争したロボットを覚えていますか? これは、チューリッヒにあるスイス連邦工科大学のスピンオフ...

...

中国で初めて申請を通過し、オンラインで入手可能になったAI大規模モデル製品8つ

8月31日、中国科学院傘下の百度、バイトダンス、センスタイム、紫東台中、百川知能、知普華章など8つの...

人工知能時代の機械の未来

この記事では、人間が持っているが機械がまだ獲得していないいくつかの必要な能力を列挙し、現在の開発動向...

...