SMOTE アルゴリズムを使用せずに、マルチクラスの不均衡なデータをどのように処理できますか?

SMOTE アルゴリズムを使用せずに、マルチクラスの不均衡なデータをどのように処理できますか?

この記事は、公開アカウント「Reading the Core」(ID: AI_Discovery)から転載したものです。

機械学習における一般的な問題は、ターゲット クラスに非常に不均衡な量のデータが存在する、不均衡なデータを処理することです。

[[344863]]

マルチクラス不均衡データとは何ですか?

分類問題の対象クラス(2 つ以上)が均等に分布していない場合、不均衡データと呼ばれます。この問題が適切に処理されない場合、クラスの不均衡なデータを使用したモデリングは多数派クラスに偏るため、モデルは惨事になります。不均衡なデータに対処するにはさまざまなアプローチがありますが、最も一般的なのはオーバーサンプリングと合成サンプルの作成です。

SMOTE アルゴリズムとは何ですか?

SMOTE は、データセットから合成例を生成するオーバーサンプリング手法であり、少数派クラスの予測力を向上させます。情報の損失はありませんが、いくつかの制限があります。

合成サンプル

制限:

  • SMOTE は高次元データには適していません。
  • クラスの重複が発生し、データにノイズがさらに発生する可能性があります。

したがって、この問題を回避するには、「class_weight」パラメータを使用してクラスに手動で重みを割り当てることができます。

クラスの重みを使用するのはなぜですか?

クラスの重みは、異なる重みを持つクラスにペナルティを課すことで損失関数を直接変更し、少数クラスのパワーを意図的に増加させ、多数クラスのパワーを減少させます。したがって、SMOTE よりもうまく機能します。この記事では、不均衡な学習問題に適したデータの重みを取得するための最も一般的な手法をいくつか紹介します。

(1) Sklearnユーティリティ

クラスの重みは、sklearn を使用して取得および計算できます。モデルをトレーニングする際にこれらの重みを少数クラスに追加すると、クラスの分類パフォーマンスが向上します。

  1. sklearn.utilsからclass_weightをインポートします。class_weight class_weight = class_weight.compute_class_weight('balanced,
  2. np.unique(ターゲット_Y)、
  3. target_Y)モデル= LogisticRegression ( class_weight class_weight = class_weight)
  4. model.fit(X,target_Y) # ['balanced', 'calculated balanced', 'normalized'] は操作できるハイパーパラメータです。

ロジスティック回帰から Catboost まで、ほぼすべての分類アルゴリズムには、class_weight パラメーターがあります。しかし、XGboost はバイナリ分類には scale_pos_weight を使用し、バイナリおよびマルチクラスの問題には sample_weight を使用します。

(2)数と長さの比

非常に簡単です。行数を各クラスのカウント数で割るだけです。

  1. 重み= df [target_Y].value_counts()/len(df)
  2. モデル= LGBMClassifier ( class_weight = weights )model.fit(X,target_Y)

(3)ウェイトを滑らかにする

これは重量を選択する最良の方法の 1 つです。 labels_dict は各クラスのカウントを含む辞書オブジェクトであり、対数関数は不均衡なクラスの重みを平均化します。

  1. 定義class_weight(labels_dict, mu = 0.15 ):
  2. 合計= np .sum(labels_dict.values())キー= labels_dict .keys()重み= dict () i がキーに含まれる場合:
  3. score = np .log(mu*total/float(labels_dict[i])) weight[i] = score if score > 1else 1return weight# random labels_dict
  4. labels_dict = df [target_Y].value_counts().to_dict() weights = class_weight (labels_dict) model = RandomForestClassifier ( class_weight = weights )
  5. モデルをフィット(X,target_Y)

(4)サンプル重み戦略

以下の関数は、XGboost アルゴリズムのサンプル重みを取得するために使用される class_weight パラメータとは異なります。トレーニング例ごとに異なる重みを返します。サンプルの重みは、データと同じ長さの配列で、各サンプルに適用されたモデル損失の重みが含まれます。

  1. バランスサンプル重みを定義します(y_train、クラス重み係数):
  2. クラス= np .unique(y_train、= 0 )
  3. classes.sort() class_samples = np .bincount(y_train) total_samples = class_samples .sum() n_classes = len (class_samples) weights = total_samples / (n_classes * class_samples * 1.0)
  4. class_weight_dict = {key : value for (key, value) in zip(classes, weights)}
  5. class_weight_dict[クラス[1]] = class_weight_dict[クラス[1]] *
  6. class_weight_coefsample_weights = [class_weight_dict[i] y_train 内の i について]
  7. return sample_weights#使用方法
  8. 重み= BalancedSampleWeights (target_Y、class_weight_coef)
  9. モデル= XGBClassifier (サンプルの重み= 重み )
  10. モデルをフィット(X, ターゲットY)

(5)クラス重みとサンプル重み:

サンプルの重みは、各トレーニング サンプルの重みを提供するために使用されます。つまり、トレーニング サンプルとまったく同じ数の要素を持つ 1D 配列を渡す必要があります。クラスの重みは、各ターゲット クラスに重みを提供するために使用されます。つまり、分類するクラスごとに 1 つの重みを渡す必要があります。

これらは、分類器のクラス重みとサンプル重みを見つけるためのいくつかの方法です。これらのテクニックはすべて私のプロジェクトで機能したので、ぜひ試してみてください。きっと大いに役立つでしょう。

<<:  精密人工知能:原子核物理学と素粒子物理学における新たな力

>>:  95歳のハーバード大学出身者が、機械学習をゼロから始めるための必読書を執筆しました。本のリソースは現在公開されています。

ブログ    

推薦する

最も人気のある 5 つの AI プログラミング言語

はじめに: AI 開発についてさらに詳しく知りたいですか? この記事では、AIプログラムを作成する際...

任正非氏と世界の人工知能専門家との対話の全文記録:ファーウェイの5G技術は米国にのみ販売されている

[[278050]]ファーウェイの創業者兼CEOである任正非氏は、人工知能分野の2人の専門家と対談し...

...

...

ロボット、勤務中!これらの人々は職を失うのでしょうか?

近年、先端技術の発展により、科学技術は日々変化しており、職業や仕事内容も変化しています。最近、人力資...

AIが復活! GPT-3を使用して亡くなった婚約者を複製し、アメリカ人男性は愛する人をデジタル形式で永遠に生きさせました

「死は本当の消滅ではないが、忘却は永遠の消失である。」なくなってしまったとしても忘れないでください。...

科学者たちは、脳波を3%という低いエラー率で直接テキストに変換する「心を読む」方法を開発した。

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

教師あり学習と教師なし学習:専門家がギャップを定義

教師あり学習、教師なし学習、半教師あり学習の特徴と、それらが機械学習プロジェクトでどのように使用され...

...

...

Dropbox のエンジニアがロスレス圧縮アルゴリズム「Pied Piper」を開発

Dropbox のエンジニアたちは世界をより良い場所にするために取り組んでおり、HBO のコメディー...

エンドゲームゲームを使用して人工ニューラルネットワークアルゴリズムを理解する

[[431963]]この記事はWeChatの公開アカウント「Zhibin's Python ...

人工知能が教育改革にどのように貢献しているかをご覧ください

人工知能によってもたらされる将来の教育の変革と発展は、新たな機会を生み出すだけでなく、より大きな課題...

1 つの記事で 4 つの基本的なニューラル ネットワーク アーキテクチャを理解する

[[260546]]ニューラル ネットワークを使い始めたばかりのときは、ニューラル ネットワーク ア...