Я пытаюсь перенести базовую бинарную модель логистической регрессии sklearn на тензор потока, и я хотел бы использовать класс Estimator, потому что мне просто нужна простая модель. Однако, поскольку мои два класса не сбалансированы, версия sklearn использовала параметр class_weight. Я не вижу эквивалентного варианта для Оценщика.
Я пытаюсь получить такую же функциональность, как:
class_weight = {"false": 1, "true": 10}
model = sklearn.linear_model.LogisticRegression(class_weight = class_weight)
model.fit(X, Y)
Я пытался использовать weight_column, но, похоже, он не тренировался должным образом. У него гораздо больше ложных срабатываний, потому что дисбаланс классов не учитывается должным образом. Я также попытался изучить изменение функции потерь, но каждый пример, который я вижу, не относится к платформе Estimator: Примеры взвешенного обучения в Tensorflow
def input_fn(X, Y):
features = dict(X)
features['weight'] = np.ones(len(X))
dataset = tf.data.Dataset.from_tensor_slices((features, Y))
return dataset.repeat(1).batch(len(Y)) # 1 epoch, no batching
model = tf.estimator.LinearClassifier(feature_columns, weight_column='weight')
model.train(input_fn: lambda: batching_fn(X, Y)
Но при этом точность уменьшается примерно на 6%, что довольно существенно. И большинство из них исходит из ложных срабатываний, поэтому в модели неправильно передискретизируют отрицательные / ложные случаи.