非常に不均衡なデータの分類問題があります。過剰サンプリングと過少サンプリング、および過小評価されているカテゴリカル出力のコストを変更すると、より適切なフィッティングにつながることを読んだことがあります。これが行われる前は、テンソルフローは各入力を大多数のグループとして分類します(そして、90%を超える精度、つまり、意味がありません)。
各グループの逆パーセンテージの対数が、私が試した中で最高の乗数になったことに気づきました。コスト関数のより標準的な操作はありますか?これは正しく実装されていますか?
from collections import Counter
counts = Counter(category_train)
weightsArray =[]
for i in range(n_classes):
weightsArray.append(math.log(category_train.shape[0]/max(counts[i],1))+1)
class_weight = tf.constant(weightsArray)
weighted_logits = tf.mul(pred, class_weight)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(weighted_logits, y))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)