二进制逻辑回归-我们需要一个热编码标签吗



我有一个逻辑回归模型,它是我参考这个链接创建的

标签是布尔值(值为0或1(。

在这种情况下,我们是否需要对标签进行one_hot编码?

问这个问题的原因是:我使用下面的函数来寻找交叉熵,并且损失总是为零。

def cross_entropy(y_true, y_pred):
y_true = tf.one_hot([y_true.numpy()], 2)
print(y_pred)
print(y_true)
loss_row = tf.nn.softmax_cross_entropy_with_logits(labels=y_true, logits=y_pred)
print('Loss')
print(loss_row)
return tf.reduce_mean(loss_row)

EDIT:-渐变将[无,无]作为返回值(用于以下代码(。

def grad(x, y):
with tf.GradientTape() as tape:
y_pred = logistic_regression(x)
loss_val = cross_entropy(y, y_pred)       
return tape.gradient(loss_val, [w, b])

示例值

loss_val=>tf张量(307700.47,shape=((,dtype=float32(

w=>tf.Variable'变量:0'shape=(171,1(dtype=float32,numpy=阵列([[0.7456649],[-0.35111237],[-6848465],[0.22650407]]

b=>tf.Variable'变量:0'shape=(1,(dtype=float32,numpy=数组([1.1982833],dtype=fluat32(

在二进制逻辑回归的情况下,不需要one_hot编码。它通常用于多项式逻辑回归。

如果您正在进行普通(二进制(逻辑回归(带有0/1个标签(,则使用损失函数tf.nn.sigmoid_cross_entropy_with_logits((。

如果你正在进行多类逻辑回归(也称为softmax回归或多项逻辑回归(,那么你有两个选择:

  1. 以1-hot格式(例如[1, 0, 0][0, 1, 0]…(定义标签,并使用损失函数tf.nn.softmax_cross_entropy_with_logits((

  2. 将标签定义为单个整数(例如1、2、3…(,并使用损失函数tf.nn.sparse_softmax_cross_entropy_with_logits((

对于后两者,您可以在StackOverflow问题中找到更多信息:

什么';sparse_softmax_cross_entropy_with_logits和softmax_crost_entropy_wwith_logits之间的区别是什么?

最新更新