3

私はバイナリ分類を行いたい5000行のフィーチャデータセットを持っています。 Iその2クラスベクトルを有する:不均衡なデータセットを使用したバイナリ分類

Y1 - クラスはかなりバランスがとれている(0から52パーセント/ 1- 48%)

Y2 - クラスが非常に不均衡である(0から90パーセント/ 1 - 10%)

データセットをトレーニングセット(4000サンプル)とテストセット(1,000サンプル)に分割しました。

その後、私は、データセットXとクラスベクトルYを取得するために簡単なコードを書いて、X number of minority classlen = 2でバランスの取れたデータセットを作成しました。

たとえば、上記のトレーニングデータセットでは、90%/ 10%クラスのベクトルを使用すると400 1秒と3,200秒になるため、元の400サンプルのクラス1と800サンプルの新しいデータセットが作成されます。クラス0の無作為に選択された400個のサンプルがバランスされます。

4,000サンプル不均衡トレーニングセットから、私は800サンプルバランスデータセットを取得し、学習アルゴリズムのトレーニングに使用します。

次に、追加の1,000サンプル(テストセット)で作成されたモデルを使用します。

平衡コードと平衡不平衡コードの両方でバランスコードを実行しました(平衡クラスのベクトルでは必要ありませんが)。

バランスクラスのベクターを使用する場合、私が1000サンプルのテストセットは、この混乱行列を得る:

[339 126 

288 246] 

    precision recall f1-score support 

0.0  0.54  0.73  0.62  465 
1.0  0.66  0.46  0.54  534 
avg/total 0.61 0.59 0.58 999 

不均衡クラスのベクターを使用する場合、私が1000サンプルのテストセットは、この混乱行列を得る:

[574 274 

73 78] 

    precision recall f1-score support 

0.0  0.89  0.68  0.77  848 
1.0  0.22  0.52  0.31  151 
avg/total 0.79 0.65 0.70 999 

ご覧のとおり、クラス1の精度は非常に低いです。

また、平衡データセット(アンダーサンプリング、クラスタ重心、またはSMOTE SVMを使用したオーバーサンプリングなど)を作成するために、パッケージimbalanced-learnからいくつかのアルゴリズムを使用しましたが、結果は常に同じです - クラス1の精度(マイノリティクラス)は非常に低いままです。

このような状況ではどうすればよいでしょうか?私の目標は、平衡クラスベクトルにあるように、不均衡クラスベクトルのクラス1の精度を約0.6にしようとすることです。

+0

私は似たような状況に遭遇しました。あなたは解決策を見つけましたか? – Charlotte

答えて

0

私はあなたのところでは、表現力に欠けるクラスに比例してより大きな重みを付けています。 XGBoostは、良いモデルを構築するための豊富なパラメータを提供します。 This articleでは、Pythonについて詳しく説明しています。特にscale_pos_weightパラメータを確認してください。

さらに、モデルの精度を評価するための検証セットを追加することも検討します。

関連する問題