在Tensorflow中使用tf.estimator.DNNClassifier时,如何正确使用weight_column(或者如何制作有偏差的成本函数)?

时间:2018-01-26 11:56:33

标签: python tensorflow neural-network classification tensorflow-estimator

我正在使用https://www.tensorflow.org/api_docs/python/tf/estimator/DNNClassifier

假设我有分类问题。试图对2件事进行分类。 Class1是Happy Face,Class2是Happy Face。在这个特殊的场景中,每天看1000多个样本时,我只想抓住前10名Happy Faces。所以,我只是非常有信心前10名面孔是Happy Faces。因此,如果它将快乐的脸分类为不快乐的脸,我很好。它可能会错过一些(或者说相当于1000年代的100个,它会审查一天)。但是,如果它把一个不幸福的面孔错误地分类为一个快乐的脸......我对结果不满意。

So we could say that:
GOOD = TP = (truth) Happy Face,      (prediction) Happy Face
BAD  = FP = (truth) Not Happy Face,  (prediction) Happy Face
GOOD = TN = (truth) Not Happy Face,  (prediction) Not Happy Face
OK   = FN = (truth) Happy Face,      (prediction) Not Happy Face

相当多,我可以忍受偶尔的FN(假阴性)。但我真的不想要FP(误报)

我感兴趣的是使用权重列“减轻”所有一个类,并“增加”另一个类。

最后,我想要某种有偏见的损失/成本函数。在训练时,FP应该“花费”更多,FN,仍然应该花费,但少一点。看看DNNClassifier,看起来weight_column可能就是答案。

训练时,我可以将所有Happy Faces设置为1.5+的重量(或某些东西,需要进行实验)。我可以把所有不幸福的面孔设置为0.5(或其他)。

所以,它归结为几个问题:

  1. 这是重量栏的用途吗?

  2. 我看到权重列应该是一个功能/输入。在这种情况下,我不希望将权重列用作特征,因为我认为模型会获得权重与分类的相关性,并且严重依赖于该输入作为预测变量。那么,tensorflow是否使用权重列作为输入?我希望不会。

  3. 假设/希望TF不使用权重列进行输入,在预测/评估时,我为权重列传递了什么? 1

  4. 如果weight_column不是答案,那么处理这种情况的推荐解决方案是什么(一个特定类的偏差成本函数)?我不需要该模型在所有分类上100%准确。但是对于一个班级来说,当它说它是一张快乐的脸时,我希望它相当自信它是一个快乐的脸。如果它错过了一些快乐的面孔,它认为他们不是幸福的面孔。没关系。只要我每天获得前10名“最开心”的面孔,我很高兴:)

  5. 感谢您的帮助。我很感激。

1 个答案:

答案 0 :(得分:0)

我认为玩阈值是处理FN和FP权衡的更好方法。你可以这样做:

probability_of_1 = predictions from estimator
if probability_of_1 > YOUR_THRESHOLD:
  output = happy-face
else:
  output = not-happy-face