创建时间:2024-03-03
最后编辑时间:2024-03-10
作者:Geeker_LStar
你好呀~这里是 Geeker_LStar 的人工智能学习专栏,很高兴遇见你~
我是 Geeker_LStar,一名初三学生,热爱计算机和数学,我们一起加油~!
⭐(●’◡’●) ⭐
那就让我们开始吧!
嘿嘿,好几篇前,好像是在线性回归那篇吧,我就说要讲逻辑回归,but 当时被数学卡了一下(好吧不只一下) and 正好遇上开学,所以没更,现在来填坑咯~~
实话实说,逻辑回归真的不简单,我打算分两篇把它讲透,这是其中一篇~
一、概述
逻辑回归,英文全称 Linear Regression,简称 LR。虽然名为回归,但它实际上是个二分类算法。
嗯,那既然是个二分类算法,它的输出肯定就不像线性回归一样,是连续的、取值范围为
(
−
∞
,
+
∞
)
(-∞, +∞)
(−∞,+∞) 的实数。
实际上,逻辑回归的输出是一个 0-1 间的实数,后面会讲到,这个实数代表了样本属于正类的概率。通常情况下,当输出 >0.5 时,样本被判定为正类,当输出 <0.5 时,样本被判定为负类,而当输出 =0.5 时,样本被随机划分进某一类。
不过,既然它的名字里带了 “回归”,那这就让我们不得不想,它和线性回归是不是有什么关系呢?
没错,其实逻辑回归是广义线性模型(GLM)的一种,它通过一个连接函数(后面会讲到的 sigmoid 函数)把线性回归的输出结果
w
T
x
+
b
w^Tx+b
wTx+b 映射到
[
0
,
1
]
[0, 1]
[0,1] 之间,即它的输出空间。
关于连接函数和广义线性模型,我会在下一篇中给出更详细的解释。
以上是逻辑回归的概述。
二、预备知识
1. 线性回归
线性回归是一种常用的回归算法,适用于因变量
y
y
y 和自变量
x
x
x 间具有线性关系的时候。
线性回归模型可用
w
T
x
+
b
+
ϵ
,
ϵ
∼
N
(
0
,
σ
2
)
w^Tx+b+\epsilon, \ \epsilon\sim N(0, σ^2)
wTx+b+ϵ, ϵ∼N(0,σ2) 来表示,先依据训练数据拟合出最合适的
w
w
w 和
b
b
b,再去预测测试数据或其它数据。
线性回归模型的输出值是连续的(实数),常用的数值优化算法有最小二乘法、矩阵求导和梯度下降法。
关于线性回归的详细讲解可以参考我之前写的这篇:
【初中生讲机器学习】10. 新手向,线性回归算法原理一篇吃透!
2. sigmoid 函数
yes~ sigmoid 函数就是逻辑回归的连接函数。
先来讲讲什么是 sigmoid 函数。
这是个很漂亮且数学性质很好的函数,表达式如下,其中
z
z
z 是输入:
y
=
1
1
+
e
−
z
y = \frac{1}{1+e^{-z}}
y=1+e−z1
它的图像长这样:
可以看到,sigmoid 函数把原函数值(指 z z z,也可以理解为线性回归的输出结果)映射到 [ 0 , 1 ] [0,1] [0,1] 之间。并且,sigmoid 函数单调递增, − z -z −z 越小,即输入值 z z z 越大,函数越接近于 1, − z -z −z 越大,即输入值 z z z 越小,函数越接近于 0.
以上特点让 sigmoid 函数很适合用于二分类任务,即当预测值 z z z 大于 0 时,判断为正例,反之则判断为负例。
这里先简单介绍一下,下面还会遇到更多与它有关的有趣的问题。
三、数学原理
前面讲过五个算法了,你可能发现了,其实机器学习模型(分类 & 回归模型)的构建过程都差不多,可以简单概括为以下三步:
- 建立预测函数
- 根据预测函数建立损失函数 / 似然函数
- 最小化损失函数 / 最大化似然函数
1. 预测函数
前面说过,逻辑回归通过连接函数 sigmoid 将线性回归的输出结果映射到
[
0
,
1
]
[0, 1]
[0,1] 之间,作为分类的依据。
逻辑回归的预测函数可表示为:
y ^ = 1 1 + e − ( w T x + b ) \hat y = \frac{1}{1+e^{-(w^Tx+b)}} y^=1+e−(wTx+b)1其中 w T x + b w^Tx+b wTx+b 表示线性回归的预测结果。
嗯,估计很多人在学到这的时候和我有一样的疑问——函数那么多,怎么偏偏逻辑回归就选择了 sigmoid 呢? 它特殊在哪?
诸多解释都说,这是因为 sigmoid 连续、光滑、单调递增、可导、范围在 0-1(能代表概率),blablabla,这些都对,但都不是本质。
毕竟,同时满足这些的函数可不止 sigmoid 一个,但是逻辑回归就选择了 sigmoid,这背后必然有更深层的原因。
这个问题我会在下一篇中详细展开,弄明白这个问题,你可能会对逻辑回归有不一样的理解。
我们可以把
y
^
\hat y
y^ 看成 “样本属于正类的概率”,然后进行一波操作。
嗯,至于为什么
y
^
\hat y
y^ 可以看作样本属于正类的概率,也会在下一篇中说明咯~
让我们先开始数学原理的推导吧!精彩启动~
2. 似然函数
似然、似然函数和极大似然估计,我在 【初中生讲机器学习】12. 似然函数和极大似然估计:原理、应用与代码实现 中已经讲的很清楚,如果不理解可以去看~
嗯,其实前面写那篇 ”似然“,就是因为之前学逻辑回归的时候卡在这里了((
一句话概括一下极大似然估计,它是一种在模型(某种概率分布或概率表达式)已知,但模型参数(比如这里的 w w w 和 b b b )未知的情况下,按照 “让已经发生的事情发生的概率最大” 的思想去确定模型参数的方法。
ok,所以首先我们要给出某样本属于正反两个分类的概率表达式:
P
1
(
x
;
w
,
b
)
=
1
1
+
e
−
(
w
T
x
+
b
)
=
e
w
T
x
+
b
1
+
e
w
T
x
+
b
P
0
(
x
;
w
,
b
)
=
1
−
P
1
(
x
;
w
,
b
)
=
1
1
+
e
w
T
x
+
b
P_1(x; w, b) = \frac{1}{1+e^{-(w^Tx+b)}} = \frac{e^{w^Tx+b}}{1+e^{w^Tx+b}} \\ P_0(x; w, b) = 1-P_1(x; w, b) = \frac{1}{1+e^{w^Tx+b}}
P1(x;w,b)=1+e−(wTx+b)1=1+ewTx+bewTx+bP0(x;w,b)=1−P1(x;w,b)=1+ewTx+b1
呃如果你不理解为什么 P1 可以从中间的表达式转换为右边的表达式,你不妨交叉相乘看一下,它俩的确相等。
用一个公式来表示:
P
(
x
;
w
,
b
)
=
y
i
P
1
(
x
;
w
,
b
)
+
(
1
−
y
i
)
P
0
(
x
;
w
,
b
)
P(x;w, b) = y_iP_1(x; w, b)+(1-y_i)P_0(x; w, b)
P(x;w,b)=yiP1(x;w,b)+(1−yi)P0(x;w,b)
这个公式计算的是:在某一参数下,模型认为(预测)该样本属于它实际类别的概率。 简单点说就是,我现在知道这个样本实际属于正类(
y
i
=
1
y_i=1
yi=1),我想知道如果我给模型某些参数,模型告诉我【这个样本属于正类的概率】有多大。
很好理解,该样本实际属于正类的时候取前半部分,获得模型认为 “这个正类样本属于正类的概率” ,该样本实际属于负类的时候取后半部分,获得模型认为 “这个负类样本属于负类 的概率”。
计算这个的目的是为了获得似然函数,前面提到过极大似然估计的基本思想就是 “(参数)应该让已经发生的事情发生的概率最大”,用在这里就是, w , b w, b w,b 应该让(模型预测出的)每个样本属于它实际类别的概率最大。
把上面计算
P
1
(
x
;
w
,
b
)
P_1(x; w, b)
P1(x;w,b) 和
P
0
(
x
;
w
,
b
)
P_0(x; w, b)
P0(x;w,b) 的式子带进去:
P
(
x
;
w
,
b
)
=
y
i
⋅
e
w
T
x
+
b
1
+
e
w
T
x
+
b
+
1
−
y
i
1
+
e
w
T
x
+
b
=
y
i
e
w
T
x
+
b
+
1
−
y
i
1
+
e
w
T
x
+
b
P(x;w, b) = \frac{y_i·e^{w^Tx+b}}{1+e^{w^Tx+b}}+\frac{1-y_i}{1+e^{w^Tx+b}} = \frac{y_ie^{w^Tx+b}+1-y_i}{1+e^{w^Tx+b}}
P(x;w,b)=1+ewTx+byi⋅ewTx+b+1+ewTx+b1−yi=1+ewTx+byiewTx+b+1−yi
对于某个样本 x x x,我们可以通过以上公式计算出模型认为它属于它的类别的概率(有监督学习中分类标签是已知的)。
按照极大似然估计的 “套路”,接下来要做的就是把所有样本的 P ( x ; w , b ) P(x;w, b) P(x;w,b) 相乘,得到关于 w , b w, b w,b 的似然函数。
J ( w , b ) = ∏ i = 1 n y i e w T x i + b + 1 − y i 1 + e w T x i + b J(w, b) = \prod_{i=1}^{n} \frac{y_ie^{w^Tx_i+b}+1-y_i}{1+e^{w^Tx_i+b}} J(w,b)=i=1∏n1+ewTxi+byiewTxi+b+1−yi
well,well,
w
T
x
i
+
b
w^Tx_i+b
wTxi+b 这种带个常数项的形式还是有点复杂了,仿照线性回归中的方法,把
b
b
b 看成一个恒为 1 的分量所对应的权重,然后把原来的
x
x
x 和
(
w
,
b
)
(w, b)
(w,b) 变成下面这样:
x
^
=
(
x
,
1
)
β
=
(
w
,
b
)
\hat x= (x, 1) \\ \beta = (w, b)
x^=(x,1)β=(w,b)
相当于给 x x x 多加了一个分量 1,给 w w w 也多加了一个分量,即 x x x 中新加的 1 所对应的权重 b b b。
ok,式子可以稍微简化一下(其实也没有变得太简单,但是至少看着舒服了一点):
J
(
β
)
=
∏
i
=
1
n
y
i
e
β
T
x
i
^
+
1
−
y
i
1
+
e
β
T
x
i
J(\beta) = \prod_{i=1}^{n} \frac{y_ie^{\beta^T \hat{x_i}}+1-y_i}{1+e^{\beta^Tx_i}}
J(β)=i=1∏n1+eβTxiyieβTxi^+1−yi
emm,连乘容易造成下溢,所以取个对数(即,对数似然函数):
J
(
β
)
=
∑
i
=
1
n
ln
(
y
i
e
β
T
x
i
^
+
1
−
y
i
1
+
e
β
T
x
i
)
J(\beta) = \sum_{i=1}^{n}\ln( \frac{y_ie^{\beta^T \hat{x_i}}+1-y_i}{1+e^{\beta^Tx_i}})
J(β)=i=1∑nln(1+eβTxiyieβTxi^+1−yi)
然后就好办了:
J
(
β
)
=
∑
i
=
1
n
ln
(
y
i
e
β
T
x
i
+
1
−
y
i
)
−
ln
(
1
+
e
β
T
x
i
)
J(\beta) = \sum_{i=1}^{n}\ln({y_ie^{\beta^Tx_i}+1-y_i})-\ln(1+e^{\beta^Tx_i})
J(β)=i=1∑nln(yieβTxi+1−yi)−ln(1+eβTxi)
好好好,现在式子里面唯一还需要搞一下的就是
y
i
y_i
yi 了,我们来分类讨论一下:
{
J
(
β
)
=
∑
i
=
1
n
β
T
x
i
−
ln
(
1
+
e
β
T
x
i
)
,
y
i
=
1
J
(
β
)
=
∑
i
=
1
n
−
ln
(
1
+
e
β
T
x
i
)
,
y
i
=
0
\left\{\begin{matrix} J(\beta) = \sum_{i=1}^{n}{\beta^Tx_i}-\ln(1+e^{\beta^Tx_i}), \ y_i = 1 \\ J(\beta) = \sum_{i=1}^{n}-\ln(1+e^{\beta^Tx_i}), \ y_i = 0 \end{matrix}\right.
{J(β)=∑i=1nβTxi−ln(1+eβTxi), yi=1J(β)=∑i=1n−ln(1+eβTxi), yi=0
嗯,不过两个公式分开的话,计算起来总是不方便的,有没有办法把它俩合为一个公式呢?
没错这肯定是有的,而且据我观察(《观察》),机器学习里面这种把两个式子合二为一的情况还不只在逻辑回归里出现,其它一些涉及到概率计算的地方也有,通常处理这种式子的套路就是:当计算其中一种情况的时候,让另一种情况对应的那一半式子取值为零。
ok 这么说有点抽象,来个例子,把上面两个公式合二为一的结果是:
J ( β ) = ∑ i = 1 n y i β T x i − ln ( 1 + e β T x i ) J(\beta) = \sum_{i=1}^{n}{y_i \beta^Tx_i}-\ln(1+e^{\beta^Tx_i}) J(β)=i=1∑nyiβTxi−ln(1+eβTxi)
解释一下~
当
y
i
=
1
y_i = 1
yi=1 时,第一项就是
β
T
x
i
\beta^Tx_i
βTxi,整个式子和上面分类讨论中
y
i
=
1
y_i = 1
yi=1 的式子一样;当
y
i
=
0
y_i = 0
yi=0 时,第一项变成 0,整个式子和上面分类讨论中
y
i
=
0
y_i = 0
yi=0 的式子一样。
ok!这就是我们得到的似然函数,我们现在要求它的最大值。
emmm 不过,机器学习中几乎所有优化算法都是为 “求最小值” 设计的,so 我们不妨把这个式子取个相反数,然后求它的最小值。
J ( β ) = ∑ i = 1 n − y i β T x i + ln ( 1 + e β T x i ) J(\beta) = \sum_{i=1}^{n}{-y_i \beta^Tx_i}+\ln(1+e^{\beta^Tx_i}) J(β)=i=1∑n−yiβTxi+ln(1+eβTxi)
好嘞,接下来就是比较让人去世的数学环节了eerrrr((((
无约束条件的最小值求解,常用偏导、梯度下降法和牛顿法(其中我能算出来的一般只有偏导(划掉))。我打算单开一篇文章讲这些优化方法。
(想起来这周一还是周二,我和同学大肆吐槽梯度下降,说要是不在凸函数的条件下用梯度下降,经常会寄掉(((bushi)
嗯!不过好在,这坨东西是个凸函数!(嗯这真是非常优秀的数学性质~很难不爱!
至于为什么是凸函数,让我们写出它对
β
\beta
β 的二阶导数…
首先先把一阶导数搞出来:
∂
J
∂
β
=
−
∑
i
=
1
n
y
i
x
i
+
e
β
T
x
i
x
i
1
+
e
β
T
x
i
\frac{\partial J}{\partial \beta} = -\sum_{i=1}^{n}{y_i x_i} + \frac{e^{\beta^Tx_i} x_i}{1+e^{\beta^Tx_i}}
∂β∂J=−i=1∑nyixi+1+eβTxieβTxixi再对一阶导数求导得到二阶导数:
∂
2
J
∂
β
2
=
−
∑
i
=
1
n
e
β
T
x
i
x
i
x
i
T
e
β
T
x
i
(
1
+
e
β
T
x
i
)
2
\frac{\partial^2 J}{\partial \beta^2} = -\sum_{i=1}^{n}{e^{\beta^Tx_i} x_i x_i^T} \frac{e^{\beta^Tx_i}}{(1+e^{\beta^Tx_i})^2}
∂β2∂2J=−i=1∑neβTxixixiT(1+eβTxi)2eβTxi
然后去证这玩意恒为正就 ok,这里不写了((逃))(主要是真的errr什么正定矩阵负定矩阵我自己都还没搞明白((()。
好。。。。接下来我们来梯度下降一波:
首先搞出梯度,啊对就是那个一阶导数~:
∂
J
∂
β
=
−
∑
i
=
1
n
y
i
x
i
+
e
β
T
x
i
x
i
1
+
e
β
T
x
i
\frac{\partial J}{\partial \beta} = -\sum_{i=1}^{n}{y_i x_i} + \frac{e^{\beta^Tx_i} x_i}{1+e^{\beta^Tx_i}}
∂β∂J=−i=1∑nyixi+1+eβTxieβTxixi
然后梯度下降,更新参数(
α
\alpha
α 是学习率,控制每一次梯度下降的速度,学习率太小会导致收敛很慢,学习率太大可能会跳过最小值)。
学习率更新的公式是:
β
new
=
β
old
−
α
∂
J
∂
β
\beta_{\text{new}} = \beta_{\text{old}} - \alpha \frac{\partial J}{\partial \beta}
βnew=βold−α∂β∂J
把偏导带进来:
β
new
=
β
old
−
α
(
−
∑
i
=
1
n
y
i
x
i
+
e
β
T
x
i
x
i
1
+
e
β
T
x
i
)
\beta_{\text{new}} = \beta_{\text{old}} - \alpha \left( -\sum_{i=1}^{n}{y_i x_i} + \frac{e^{\beta^Tx_i} x_i}{1+e^{\beta^Tx_i}} \right)
βnew=βold−α(−i=1∑nyixi+1+eβTxieβTxixi)
ok 然后就一直这么搞,等它到达收敛条件或者达到最大迭代次数就 ok。
补充一下收敛条件是什么。
梯度下降在干什么,在 “找到更小的函数值(及其对应的自变量值)” ,对吧。但是要是一直在一个地方跳来跳去地波动,一直迭代,那这训练就没有终止了。所以,当某一次迭代所获得的 “函数值的减小” 小于某个阈值
ϵ
\epsilon
ϵ 之后,就停止迭代,把最终值作为找到的最小值。
好好好梯度下降还是单独开一篇讲吧(()这篇文章的数学含量已经超标了()这有点令人受不了(((
well~当然,其实还有另一种方式也能推出这个似然函数(并且感觉比上面这种方法还要快一点),也讲一下。
P ( x ^ ∣ β , y i ) = P 1 ( x ∣ β ) y i + P 0 ( x ∣ β ) 1 − y i P(\hat x|\beta, y_i) = P_1(x|\beta)^{y_i} + P_0(x|\beta)^{1-y_i} P(x^∣β,yi)=P1(x∣β)yi+P0(x∣β)1−yi
其实这个公式也很好理解啦(这不就是伯努利分布的公式嘛!),按照之前讲的套路, y i = 1 y_i = 1 yi=1 的时候让 P 0 P_0 P0 项为 0, y i = 0 y_i = 0 yi=0 的时候反之即可。
那么似然函数就是:
J
(
β
)
=
∑
i
=
1
n
ln
(
P
1
(
x
^
i
;
β
)
y
i
+
P
0
(
x
^
i
;
β
)
1
−
y
i
)
=
∑
i
=
1
n
[
y
i
(
ln
(
P
1
(
x
^
i
;
β
)
)
+
(
1
−
y
i
)
ln
(
P
0
(
x
^
i
;
β
)
)
]
=
∑
i
=
1
n
[
y
i
(
ln
(
P
1
(
x
^
i
;
β
)
−
ln
(
P
0
(
x
^
i
;
β
)
)
)
+
ln
(
P
0
(
x
^
i
;
β
)
)
]
=
∑
i
=
1
n
[
y
i
(
ln
(
P
1
(
x
^
i
;
β
)
P
0
(
x
^
i
;
β
)
)
+
ln
(
P
0
(
x
^
i
;
β
)
)
]
=
∑
i
=
1
n
[
y
i
(
ln
(
e
β
T
x
i
)
)
+
ln
1
1
+
e
w
T
x
^
i
+
b
]
=
∑
i
=
1
n
y
i
β
T
x
^
i
−
ln
(
1
+
e
w
T
x
^
i
+
b
)
J(\beta) = \sum_{i=1}^{n} \ln (P_1(\hat x_i; \beta)^{y_i} + P_0(\hat x_i; \beta)^{1-y_i}) \\ = \sum_{i=1}^{n}[y_i(\ln (P_1(\hat x_i; \beta))+ (1-y_i)\ln (P_0(\hat x_i; \beta))] \\ = \sum_{i=1}^{n}[y_i(\ln (P_1(\hat x_i; \beta)-\ln (P_0(\hat x_i; \beta)))+\ln (P_0(\hat x_i; \beta))] \\ = \sum_{i=1}^{n}[y_i(\ln (\frac{P_1(\hat x_i; \beta)}{P_0(\hat x_i; \beta)})+\ln (P_0(\hat x_i; \beta))] \\ = \sum_{i=1}^{n}[y_i(\ln (e^{\beta^Tx_i}))+\ln \frac{1}{1+e^{w^T\hat x_i+b}}] \\ = \sum_{i=1}^{n}y_i{\beta^T\hat x_i}-\ln (1+e^{w^T\hat x_i+b})
J(β)=i=1∑nln(P1(x^i;β)yi+P0(x^i;β)1−yi)=i=1∑n[yi(ln(P1(x^i;β))+(1−yi)ln(P0(x^i;β))]=i=1∑n[yi(ln(P1(x^i;β)−ln(P0(x^i;β)))+ln(P0(x^i;β))]=i=1∑n[yi(ln(P0(x^i;β)P1(x^i;β))+ln(P0(x^i;β))]=i=1∑n[yi(ln(eβTxi))+ln1+ewTx^i+b1]=i=1∑nyiβTx^i−ln(1+ewTx^i+b)
ok。。。就是这个~!(我勒个豆啊手打这些 latex 累死我了,,,,)
嗯!最终推出的似然函数是同一个,也可以用上面讲的梯度下降来求它的最小值~~
这些是从似然函数角度去看的,不过…如果换个角度,从损失函数的视角去看,会发生哪些奇妙的事呢…?
3. 损失函数
前面说过,逻辑回归,名为回归,实际上是个分类算法。在分类算法中最常用的损失函数就是交叉熵损失函数。
交叉熵损失函数衡量的是【实际概率分布】和【模型预测的概率分布】之间的差异,函数值越小,模型预测越准确。
交叉熵损失函数的公式如下,其中
i
i
i 代表类别:
H
(
y
,
y
^
)
=
−
∑
i
y
i
log
(
y
^
i
)
H(y, \hat{y}) = -\sum_{i} y_{i} \log(\hat{y}_{i})
H(y,y^)=−i∑yilog(y^i)
在之前某篇文章中我提到过,计算损失的方式有 “均方误差 MSE”、“平均绝对误差 MAE” 等,相对应的损失函数有均方误差损失函数、平均绝对误差损失函数等。但是为什么逻辑回归算法不用这些损失函数而用交叉熵呢?原因主要有以下几点:
- 分类问题和回归问题的区别:分类问题关注的是样本属于某一类别的概率,交叉熵损失函数衡量的也是两个概率分布之间的差异,而 MSE 衡量的是两个点(实际值与预测值)之间的欧氏距离,但 “概率和概率之间的欧氏距离” 是没有意义的。
- 函数本身的性质:如果用交叉熵+sigmoid,损失函数会是一个凸函数,也就是我们能够找到最小值点;但如果用 MSE+sigmoid,损失函数是一个非凸函数,最终可能会收敛到一个极小值点但找不到最小值点。
- 梯度下降的需求:上面讲过了,逻辑回归里用的比较多的优化算法通常是梯度下降,而交叉熵损失函数通常比 MSE 收敛的更快,因而更适合用于训练。
- 与极大似然估计的联系:yesyes,逻辑回归的一种经典推导方法就是极大似然估计,and 讲完交叉熵损失函数你会发现,这和极大似然估计几乎就是一回事,但是 MSE 就没有这么好的性质了。
一个好的损失函数应不仅满足于 “可以记录损失”,同时也应反映损失的大小。即满足,预测值和真实值相差越大时,损失函数值也越大。这是个非常浅显的道理,并且也不会对损失函数的构建造成什么干扰(甚至会更方便?)。
分两种情况讨论。
第一种情况,样本属于正类(1),但被错分为负类(0)。
根据前面说的,预测函数值
h
θ
(
x
)
h_\theta(x)
hθ(x) 可以理解为样本
x
x
x 属于正类的概率,即:
h
θ
(
x
)
=
P
1
(
x
∣
w
,
b
)
=
e
w
T
x
+
b
1
+
e
w
T
x
+
b
h_\theta(x) = P_1(x|w, b) = \frac{e^{w^Tx+b}}{1+e^{w^Tx+b}}
hθ(x)=P1(x∣w,b)=1+ewTx+bewTx+b而现在已经知道样本属于正类,那么
h
θ
(
x
)
h_\theta(x)
hθ(x) 越小(即模型认为
x
x
x 属于正类的可能性越小),损失函数值应该越大。
下面是一个符合要求的损失函数:
c o s t ( h θ ( x ) , y ) = − log ( h θ ( x ) ) , i f y = 1 cost(h_\theta(x), y) = -\log(h_\theta(x)), \ if \ y=1 cost(hθ(x),y)=−log(hθ(x)), if y=1
其实很好理解啦, h θ ( x ) h_\theta(x) hθ(x) 越小, log ( h θ ( x ) ) \log(h_\theta(x)) log(hθ(x)) 越小(即 “负的越大”),所以 − log ( h θ ( x ) ) -\log(h_\theta(x)) −log(hθ(x)) 就越大,也就代表损失越大咯~
再来讨论第二种情况,样本属于负类(0),但被错分为正类(1)。
这种和第一种差别不大,把第一种整体反过来就 ok 了:现在已知样本属于负类,那么
h
θ
(
x
)
h_\theta(x)
hθ(x) 越大(即模型认为
x
x
x 属于负类的可能性越小),损失函数值应该越大。
公式也很简单,这类 “相同套路,相反情况” 的公式通常比较好写,下面是一个 “配套” 的和上面反过来的公式:
c o s t ( h θ ( x ) , y ) = − log ( 1 − h θ ( x ) ) , i f y = 0 cost(h_\theta(x), y) = -\log(1-h_\theta(x)), \ if \ y=0 cost(hθ(x),y)=−log(1−hθ(x)), if y=0
其实区别就在于 h θ ( x ) h_\theta(x) hθ(x) 变成了 1 − h θ ( x ) 1-h_\theta(x) 1−hθ(x)。
ok 把它俩合成一个:
这个公式也即二分类问题的交叉熵损失函数。
c
o
s
t
(
h
θ
(
x
)
,
y
)
=
−
[
y
i
log
h
θ
(
x
)
+
(
1
−
y
i
)
log
(
1
−
h
θ
(
x
)
)
]
cost(h_\theta(x), y) = -[y_i\log h_\theta(x)+(1-y_i)\log (1-h_\theta(x))]
cost(hθ(x),y)=−[yiloghθ(x)+(1−yi)log(1−hθ(x))]
当 y i y_i yi 取值为 1 时,式子的后半部分因为有 1 − y i 1-y_i 1−yi 而变为 0,整个式子就变为 log h θ ( x ) \log h_\theta(x) loghθ(x),和之前提到的式子的形式 & 结果都一致;当 y i y_i yi 的取值为 0 时,式子的前半部分因为有 y i y_i yi 而变为 0,后半部分和之前提到的式子一致。
好嘞!这就是我们的交叉熵损失函数~~其实蛮好理解的是不是!
ok,我们现在要做的就是计算每个变量的损失函数值,然后让这些损失函数值的和最小。
也就是说,让下面这个式子最小:
c
o
s
t
(
h
θ
(
x
)
,
y
)
=
−
1
m
∑
i
=
1
m
[
y
i
log
h
θ
(
x
)
+
(
1
−
y
i
)
log
(
1
−
h
θ
(
x
)
)
]
cost(h_\theta(x), y) = -\frac{1}{m} \sum_{i=1}^{m} [y_i\log h_\theta(x)+(1-y_i)\log (1-h_\theta(x))]
cost(hθ(x),y)=−m1i=1∑m[yiloghθ(x)+(1−yi)log(1−hθ(x))]
啊,熟悉吗?把
h
θ
(
x
)
h_\theta(x)
hθ(x) 带进去…这式子咱可太熟了。
这不就极大似然估计的式子嘛!!把
θ
\theta
θ 搞出来就 ok 了。
嗯()其实极大似然估计和交叉熵损失函数之间有很密切的联系,不过那就是后话了~
ok!!这些就是逻辑回归算法的数学原理啦!!又写了一周!
(抓紧去写下一篇填坑咯~!)
这篇就到这里啦!文章来源:https://www.toymoban.com/news/detail-846243.html
这篇文章详解逻辑回归算法的数学原理,希望对你有所帮助!⭐
欢迎三连!!一起加油!🎇
——Geeker_LStar文章来源地址https://www.toymoban.com/news/detail-846243.html
到了这里,关于【初中生讲机器学习】14. 手撕公式,一篇带你理解逻辑回归!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!