在熊猫中标记平滑(软目标)

时间:2016-09-05 17:50:32

标签: python pandas machine-learning

在Pandas中,有get_dummies方法可以对分类变量进行单热编码。现在我想进行标签平滑,如Deep Learning书的第7.5.1节所述:

  

标签平滑通过用目标{替换硬 0 1 分类目标,基于具有 k 输出值的softmax来规范化模型分别为{1}}和eps / k

在Pandas数据框中进行标签熏制最有效和/或最优雅的方法是什么?

1 个答案:

答案 0 :(得分:8)

首先,让我们使用更简单的等式(ϵ表示从“真实标签”移动的概率质量,并分配给所有剩余的等式。

1 -> 1 - ϵ
0 -> ϵ / (k-1) 

你可以简单地使用上面很好的数学属性,因为你所要做的只是

x -> x * (1 - ϵ) + (1-x) * ϵ / (k-1)

因此,如果您的虚拟列是a, b, c, d,只需执行

indices = ['a', 'b', 'c', 'd']
eps = 0.1
df[indices] = df[indices] * (1 - eps) + (1-df[indices]) * eps / (len(indices) - 1)

用于

>>> df
   a  b  c  d
0  1  0  0  0
1  0  1  0  0
2  0  0  0  1
3  1  0  0  0
4  0  1  0  0
5  0  0  1  0

返回

        a         b         c         d
0  0.900000  0.033333  0.033333  0.033333
1  0.033333  0.900000  0.033333  0.033333
2  0.033333  0.033333  0.033333  0.900000
3  0.900000  0.033333  0.033333  0.033333
4  0.033333  0.900000  0.033333  0.033333
5  0.033333  0.033333  0.900000  0.033333

正如所料。