web-dev-qa-db-ja.com

TensorFlowを使用した不均衡なデータのトレーニング

状況:

私のトレーニングデータが2つのラベル間のラベル分布で不均衡な場合に、TensorFlowを最適に使用する方法を疑問に思っています。たとえば、 MNISTチュートリアル が1と0のみを区別するために単純化され、利用可能なすべての画像が1または0であるとします。各タイプの画像の約50%をトレーニングおよびテストする必要がある場合、提供されているTensorFlowチュートリアルを使用してトレーニングするのは簡単です。しかし、データで利用可能な画像の90%が0で、10%だけが1である場合はどうでしょうか?この場合、TensorFlowは定期的に私のテストセット全体を0であると予測し、意味のない90%の精度を達成します。

私がある程度の成功を収めてきた戦略の1つは、0と1の均等な分布を持つトレーニング用のランダムバッチを選択することです。このアプローチにより、すべてのトレーニングデータを使用して、90%未満の精度で適切な結果を生成できますが、はるかに便利な分類器が使用できます。この場合、精度は役に立たないので、選択するメトリックは通常ROC曲線下面積(AUROC)であり、これにより.50よりもかなり高い結果が生成されます。

質問:

(1)私が説明した戦略は、不均衡なデータのトレーニングの受け入れられた、または最適な方法ですか、それともより効果的な方法がありますか?

(2)精度メトリックは不均衡なデータの場合ほど有用ではないため、コスト関数を変更することで最大化できる別のメトリックはありますか?トレーニング後にAUROCを計算できますが、AUROCを最大化するような方法でトレーニングできますか?

(3)不均衡なデータの結果を改善するために、コスト関数に他の変更を加えることができますか?現在、TensorFlowチュートリアルで提供されているデフォルトの提案を使用しています。

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)

これは、より小さいラベルクラスを誤って分類するコストを高くすることで可能になるかもしれないと聞いたことがありますが、その方法はわかりません。

26
MJoseph

(1)戦略を使用しても構いません。私は不均衡なデータも扱っています。最初にダウンサンプリングとアップサンプリングの方法を使用して、トレーニングセットを分散させます。または、アンサンブルメソッドを使用して、均等な分散サブセットで各分類器をトレーニングします。

(2)AUROCを最大化する方法はありません。私の考えでは、AUROCはture positive率とfalse positive率に基づいているため、各インスタンスでどれだけうまく機能しているかはわかりません。したがって、必ずしもクラスを分離する機能を最大化するとは限りません。

(3)クラスインスタンスの比率によるコストの重み付けについては、 Tensorフローのクラス不均衡バイナリ分類子の損失関数 および回答に似ています。

7
Young

不均衡なデータセットに関して、頭に浮かぶ最初の2つの方法は(バランスの取れたバッチ分布を達成するために、正のサンプルの重み付け、サンプリング)です。

陽性サンプルの重み付けこれは、陽性サンプルがはるかに少ないデータセットでトレーニングするときに、誤分類された陽性サンプルの損失を増やすことを意味します。これにより、MLアルゴリズムがインセンティブになり、陽性サンプルに適したパラメーターが学習されます。バイナリ分類の場合、これを実現する簡単なAPIがtensorflowにあります。以下で参照される(weighted_cross_entropy)を参照してください

バッチサンプリングこれには、トレーニングデータの各バッチが正のサンプルから負のサンプルに均等に分布するようにデータセットをサンプリングすることが含まれます。これは、テンソルフローから提供される拒否サンプリングAPIを使用して実行できます。

5
Convergii

私は不均衡なデータと格闘しています。不均衡なデータに対処するための私の戦略は次のとおりです。

1)以下のように、0と1のラベルを同時に計算するコスト関数を使用します。

cost = tf.reduce_mean(-tf.reduce_sum(y*tf.log(_pred) + (1-y)*tf.log(1-_pred), reduction_indices=1))

2)SMOTEを使用して、0と1のラベルの数を同様にするオーバーサンプリング方法。こちらを参照してください http://comments.gmane.org/gmane.comp.python.scikit-learn/5278

両方の戦略は、信用格付けモデルを作成しようとしたときに機能しました。

ロジスティック回帰は、不均衡なデータとデフォルト率の予測などのバイナリ分類を処理するための一般的な方法です。 AUROCは、不均衡なデータに対処するための最良のメトリックの1つです。

4
Byeonggeon Ko

1)はい。これは、不均衡なデータに対処するための好評の戦略です。ただし、この戦略は、SGDを使用している場合にのみニューラルネットワークで有効です。

トレーニングデータのバランスをとるもう1つの簡単な方法は、重み付けされた例を使用することです。不均衡な例を見るときは、インスタンスごとの損失を大きく/小さくするだけで増幅できます。オンライン勾配降下法を使用する場合、不均衡な例を見るときに、より大きな/より小さな学習率を使用するのと同じくらい簡単です。

わからない2。

2
Farseer