Ich habe ein Klassifizierungsproblem mit stark unausgeglichenen Daten. Ich habe gelesen, dass Über- und Unterabtastung sowie die Änderung der Kosten für unterrepräsentierte kategoriale Ausgaben zu einer besseren Anpassung führen. Bevor dies durchgeführt wurde, kategorisierte Tensorflow jede Eingabe als Mehrheitsgruppe (und gewann eine Genauigkeit von über 90%, so bedeutungslos das auch ist).
Ich habe festgestellt, dass das Protokoll des inversen Prozentsatzes jeder Gruppe den besten Multiplikator ergibt, den ich versucht habe. Gibt es eine Standardmanipulation für die Kostenfunktion? Ist das richtig implementiert?
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)