我试图将基本的sklearn逻辑回归模型移植到tensorflow,我想使用Estimator类,因为我只需要一个简单的模型。但是,由于我的两个类不平衡,因此sklearn版本使用了class_weight参数。我没有看到Estimator的等效变体。
我正在尝试获得与以下功能相同的功能:
class_weight = {"false": 1, "true": 10}
model = sklearn.linear_model.LogisticRegression(class_weight = class_weight)
model.fit(X, Y)
我尝试使用weight_column,但似乎无法正确训练。由于没有正确解决班级不平衡的问题,因此有很多误报。我还尝试研究更改损失函数,但我看到的每个示例都不适用于Estimator框架:Weighted Training Examples in 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%左右,这是非常重要的。而且大多数来自假阳性,因此该模型并未适当地对否定/假案例进行过采样。