Как использовать оценщик тензора логистической регрессии, аналогичный весам классов Scikit - PullRequest
1 голос
/ 15 мая 2019

Я пытаюсь перенести базовую бинарную модель логистической регрессии 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%, что довольно существенно. И большинство из них исходит из ложных срабатываний, поэтому в модели неправильно передискретизируют отрицательные / ложные случаи.

...