私はバイナリ分類を行いたい5000行のフィーチャデータセットを持っています。 Iその2クラスベクトルを有する:不均衡なデータセットを使用したバイナリ分類
Y1 - クラスはかなりバランスがとれている(0から52パーセント/ 1- 48%)
Y2 - クラスが非常に不均衡である(0から90パーセント/ 1 - 10%)
データセットをトレーニングセット(4000サンプル)とテストセット(1,000サンプル)に分割しました。
その後、私は、データセットX
とクラスベクトルY
を取得するために簡単なコードを書いて、X number of minority class
len = 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にしようとすることです。
私は似たような状況に遭遇しました。あなたは解決策を見つけましたか? – Charlotte