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

ブログ    

推薦する

マイクロソフト、Bing Chat と Bing Search にダーク モードを導入開始

7月27日、Microsoft Bingエンジニアリングおよび製品責任者のJordi Ribas氏は...

モデルのトレーニングをアウトソーシングするのは本当に安全ですか?新しい研究:アウトソーサーが銀行融資を制御するためにバックドアを挿入する可能性がある

ディープラーニングにはビッグデータと大規模な計算能力に対する厳しい要件があるため、モデルトレーニング...

Kubernetes 上で生成 AI アプリケーションをデプロイするためのステップバイステップ ガイド

翻訳者 |李睿レビュー | Chonglou今日の急速に変化するテクノロジーと市場環境では、人工知能...

ガートナー:テクノロジープロバイダーの33%が2年以内にAIに100万ドル以上を投資する

[[427302]]ガートナーの新しい調査によると、人工知能 (AI) 技術計画を持つテクノロジーお...

ビジネスアナリストにとってAIが意味するもの

[[275322]]今日では、人工知能はもはや流行語ではなく、多くの環境ビジネスアナリストやその他の...

5 分間の技術講演 | 顔認識についてどれくらい知っていますか?

パート01 顔認識技術の概要顔認識技術は生体認証技術の一種で、人物の顔の特定の特徴(目、鼻、口、眉毛...

これらの 9 つの仕事が人工知能に置き換えられない理由

人工知能 (AI) と機械学習 (ML) の機能は徐々に拡大していますが、創造性、共感、感情認識など...

...

Alibaba Damo AcademyのJin Rong氏:テクノロジーから科学へ、中国のAIはどこへ向かうのか?

ダートマス会議から数えると、AIは65年の歴史を歩んできました。特に近年のディープラーニングの台頭に...

5G の出現は AI 連合学習にどのような影響を与えるでしょうか?

開発チームが AI ツールの作成に奔走する中、エッジ デバイスでのアルゴリズムのトレーニングが一般的...

天津市が顔認証訴訟で勝利、コミュニティが顔認証を唯一のアクセス手段として使用することは違法と判断

天津の不動産管理会社は、コミュニティへの出入りの唯一の方法として顔認証を使用していたとして住民から訴...

ハイパーオートメーション – AIの新時代における自動化

「自動化」の本質的な意味は変わりませんが、その用語の使用法は時間の経過とともに確実に変化してきました...

データ処理を簡単にしますか? Baidu EasyDataが初の高度なインテリジェントデータクリーニング機能をリリース

AI モデルを開発する場合、データの量と品質がモデルの有効性に直接影響します。現場でデータを収集した...

30分で独自のディープラーニングサーバーを作成する

新しいプロジェクトを始めるたびに、私はディープラーニング マシンを何度も何度も作成していることに気づ...

中間レビュー: 2020 年に最も注目されたデータ サイエンスと機械学習のスタートアップ 10 社

企業がビッグデータを活用するには、データ サイエンティストと開発者がデータを準備して整理し、アナリス...