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

ブログ    
ブログ    
ブログ    

推薦する

ChatGPTのウェブサイトのトラフィックは3か月連続で減少しており、8月の訪問数は3.2%減の14億3000万回となった。

分析会社シミラーウェブが9月8日に発表した最新データによると、人工知能チャットロボット「ChatGP...

...

機械学習に関する12の現実世界の真実

導入現実世界で働くときには、直面しなければならない事実がいくつかあります。この記事ではそれについて説...

両者は負荷分散アルゴリズムを要約する

さまざまな負荷分散アルゴリズムが存在します。これらを研究する際には、まずこれらの方法の概念を理解する...

ガートナーは、世界のIT支出が2024年に6.8%増加すると予測している。

テクノロジー業界ではレイオフの波が起こっているものの、IT 市場は依然として成長を続けています。ガー...

2021年に人工知能が主流の技術になる

2020年のコロナウイルスの流行により、多くの業界のトレンドが大幅に加速し、2021年もその傾向が続...

GPU ベースの AI を使用して、わずか 36 分で実際の宇宙をシミュレートする

科学者たちはすでに宇宙論の分野で大量のデータを処理するためにスーパーコンピュータを使用することに慣れ...

ガートナー、2022年の銀行・投資サービスにおける3つの注目のテクノロジートレンドを発表

ガートナーは、2022年の銀行および投資サービス業界における3つの注目の技術トレンドとして、生成型人...

OpenAI憲章中国語版

この文書は、OpenAI 内外の多くの人々からのフィードバックを含め、過去 2 年間にわたって改良し...

...

...

テスラロボットに人間の脳意識が搭載される?マスク氏独占インタビュー:AIがミスを犯すことへの恐怖

いつも衝撃的な発言をするマスク氏がまたもや発言した。 最近、Insiderの親会社であるAxel S...

小鵬汽車と徳賽SV自動車有限公司がレベル3自動運転システムの開発で協力

最近、小鵬汽車とDesay SVは戦略的協力協定を締結し、レベル3自動運転システムの開発で協力すると...

イスラエルの企業が従業員の病気偽装を見分けるAIツールを開発

[[417923]]イギリスのデイリーメール紙によると、イスラエルのテクノロジー企業ビナーは最近、企...