One Hot Encoder 在机器学习分类模型中的重要性
本文是关于One Hot Encoder的快速解释。
如果我们有如下所示的机器学习数据集:
在上面的机器学习数据集中它们是三个类(Apple,Chicken,Broccoli)如果我给一个Apple数据集输入logistic回归或神经网络,但是它预测的是一只Chicken,所以我们要使用梯度下降来最小化损失函数来正确预测。如果我们使用数字标签分类模型,问题出现在损失函数,由于这个模型学习的是像Apple(1)<Chicken(2)<Broccoli(3)(也就是说模型是顺序的)的最终模型。例如要使用均方误差损失函数在数字标签分类。
L = 1 / m(predict-target)²
现在我将calories 95 dataset of apple的输入提供给逻辑回归模型或神经网络模型,它应该预测Apple(1),但它预测是Chicken(2)因此使用损失函数值我们必须训练我们的网络正确预测,现在让我们看看MSE损失函数是如何工作的。
predict= 2(Chicken)
target = 1(Apple)
(2–1)²=1
现在我们输入Apple值,predict = Broccoli(3) 但目标是apple(1)
predict = 3
target = 1
(3–1)² = 4
正如你所看到的那样,各种损失函数意味着它的训练使得apple远离Broccoli,但是由于最小化或全局最小值的收敛将会很慢并且它可能最终会出现在局部最小值因为我们不能使用凸损失函数的交叉熵损失函数,因此分类问题成为非凸问题。
One Hot encoder
如果模型预测chicken ,但目标类是apple
predict =(0,1,0)
target =(1,0,0)
L =((0,1,0) - (1,0,0))
根据多分类损失函数
L =(0-1)²+(1-0)²+(0-0)²= 2
现在,如果模型预测broccoli ,但目标类是apple
predict =(0,1,0)
target =(0,0,1)
L =((0,0,1) - (1,0,0))
L =(0-1)²+(0-0)²+(1-0)²= 2
我们可以看到,如果我们使用One Hot encoder标签,则损失函数给出相同的误差值,因此它将标签分类为nominal(变量没有固有顺序或排序顺序),而数字标签分类标签具有序数(变量和有序系列)分类问题中不必要的东西。
数字标签缺点:
- 我们不能使用sigmoid或softmax激活函数,这在分类问题中非常重要,因为它将值压缩为0到1或归一化。
- 因此,如果没有sigmoid或softmax激活函数意味着我们不能使用交叉熵损失函数。
- 因此,如果我们不能使用交叉熵损失函数,我们必须选择均方误差损失函数,它主要是非凸损失函数。
我举一个简单的例子说明为什么交叉熵损失函数在分类问题中很重要。
假设它是一个数值问题,那么我们必须使用均方损失函数,我们可以使用Relu激活函数。
Relu是一个简单的非线性激活函数,它使负值为零,如果值为正,则它将是相同的值。
假设我们有一个神经网络,权重被初始化,现在我们在神经网络中为apple输入值95进行正向传播,我们得到一个输出值200.所以我们的目标值是1,但模型预测200,我们使用了relu激活函数。
target = 1
predicted = 200
让我们做MSE,我们做单个数据,所以m是1(m = 1)
L = 1 / m(predicted — target)²
L = 1/1(1-200)²
(-199)² = 39601
Error Rate为39601
现在,如果我们在具有梯度下降的神经网络中应用反向传播(学习率= 0.001)
学习率= 0.01,目标= 1,预测= 200,输入(x)= 95和单输出神经元,因此权重仅为1。
weight=weight(0.01)*(39601)(95)
weight=weight- (0.01)*(3762095)
weight=weight- (37620)
我们可以看到Error Rate如此之高。
但是如果我们使用one hot encoder ,我们可以使用softmax激活函数或sigmoid激活函数和交叉熵损失函数,因为问题是凸的。
现在我们将向模型提供输入,最初模型预测(001)是broccoli,但目标是apple(100)。当我们使用softmax函数时,输出充当概率模型。如果模型预测= (0.8,0.1,0.1)表示输出为apple的概率为0.8%,输出可能是broccoli或chicken 的概率为0.1%。因此,我们将最高百分比作为分类标签。
predict=(0 0 1)
target =(1 0 0)
用于mlogloss损失函数
N = 1,log(0)未定义,因此我们采用predict =(0.0001,0,0.9999)target =(1,0,0)
L = - ((1)log(0.0001)+(0)log(0)+(1)log(0.9999))
L = - ( - 4 + 0-0.00004343)
L~4
当我们比较数字标签loss 值和One Hot Encoder loss 值时,One Hot Encoder Loss要小得多。
4 <39601
如果我们应用梯度下降
weight=weight-α(pi-yi)
在最后一层,我们有三个输出神经元,所以我们有三个权重。但对于数值模型,我们只有一个输出神经元。
weight=weight-0.01 *(0.001-1)
weight1 = weight1-0.01 *(0-0)
weight2 = weight2-0.01 *(0.9999-0)
用于MSE 损失函数
predict =(0,0,1)
target =(1,0,0)
(0–1)²+(0–0)²+(1–0)² = 2
Error rate为2
如果我们用softmax 或sigmoid函数来解决MSE丢失函数的三个类问题我们得到的是2。
Numerical vs One Hot Encoder(MSE Loss function)