問題タブ [imbalanced-data]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
keras - サンプルの重み付けは、不均衡なデータ トレーニングでは役に立ちませんでした
各層に 16 ~ 32 個のセルを持つ 2 層の LSTM ネットワークをトレーニングしていますが、トレーニング用のかなり不均衡なデータセットがありました。私の 7 つのクラス頻度に基づいて、total_samples/class_frequency の単純な式で計算されたサンプルの重みは [3.7, 5.6, 26.4, 3.2, 191.6, 8.4, 13.2] であり、各サンプルのこの重みを (data のタプルに追加します。 、ラベル) Kerasmodel.fit()
関数を実行するためのデータセット ジェネレーターの出力。トレーニング コードは次のとおりです。
次に、保存された最適なモデルを使用して評価し、このコードでパフォーマンス統計を計算しました (私のデータは tensorflow データセットにあります)。
しかし、出力統計に見られるのは、まれなクラス (最高の重み) であっても、重み付けされた統計は、重み付けされていないもの (すべての重みを等しく 1 に設定) よりも全体的に悪いということです。統計は次のとおりです。
加重実行の場合:
重み付けされていない実行の場合:
ここで何が問題なのですか?
python - リストを loss_weights として渡すと、モデル出力ごとに 1 つのエントリが必要になります。Keras は、モデルには 1 つの出力があると教えてくれましたが、もっと多くの出力があると思いました
df
マルチクラス分類問題のデータセットがあります。私はクラスの不均衡が大きいです。すなわち、grade_F
とgrade_G
.
同時に、ここで見られるように、あまり表現されていないクラスについては非常に不正確な予測をしています。
出力次元が 7 のニューラル ネットワークがあります。つまり、予測したい配列は次のとおりです。
そこで、次のニューラル ネットワークを試しました。
そこで、クラスの頻度に反比例する重みのベクトルを与えました。
ただし、出力のサイズは 1 であることがわかりました。