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

ブログ    
ブログ    

推薦する

低速自動運転のためのパノラマ/魚眼カメラによる近距離認識

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

Amazon Lexについて

Amazon Lex は、音声とテキストを使用してあらゆるアプリケーションに会話型インターフェースを...

遺伝的アルゴリズムとPython実装におけるいくつかの異なる選択演算子

序文この論文では、遺伝的アルゴリズムにおけるいくつかの選択戦略についてまとめています。比例ルーレット...

Google Research: ゲーデル賞とクヌース賞受賞者が「脳内のテキスト表現」を分析

このオンラインセミナーで特に注目を集めた講演は、コロンビア大学のコンピューターサイエンス教授であるク...

自動運転車の4つの重要な要素:2040年までに市場価値500億ドル

自動運転車は自動車業界にとって非常に破壊的な技術です。現在、多くのメーカーが物流、自動運転タクシー、...

ネット全体が「被験者3」を真似し、メッシ、アイアンマン、二次元の女の子が即勝利

最近、「被験者 3」について多かれ少なかれ耳にしたことがあるかもしれません。握手、軽く捻挫した足、リ...

Google、かわいい動物動画生成に優れたAI動画ジェネレータ「Lumiere」をリリース

海外メディアの報道によると、1月26日、GoogleはLumiereと呼ばれる人工知能ビデオジェネレ...

JD.com、ビリビリ、ピンドゥオドゥオなど中国企業88社が米国の上場廃止前リストに含まれ、中国コンセプト株がクリアされる可能性

半月も経たないうちに、第6波がまたやってきました!現地時間5月4日、米証券取引委員会は再び「上場廃止...

...

トイレ掃除から純資産435億ドルへ!黄仁訓の成功の秘訣:時計を着けないこと

若者に向けて、Lao Huang 氏から 3 つの提案を紹介します。学ぶことをやめず、できる限り最善...

...

アルコールで動く88mgのマイクロロボットは2時間連続稼働可能

マイクロロボットは極めて狭い空間でも移動できますが、これは人間や従来のロボットでは不可能なことです。...

強力な人工知能まであとどれくらいでしょうか?まず、これらの5つの数学の問題を解くのに10年から20年かかります

[[272461]] 7月30日、成都ハイテクゾーンの景栄会で開催された2019年世界人工知能サミッ...

第2回解析アルゴリズムコンテストが開始され、技術専門家があなたの参加を待っています

データスキルについてまだ不安がありますか?アルゴリズムの革新を適用できる場所はありませんか?こんなに...