理论推导

  在以前的博客(机器学习入门学习笔记:(2.1)线性回归理论推导 )中推导了单元线性回归多元线性回归的模型。
  将线性回归模型简写为: y=ωTx+b <script type="math/tex" id="MathJax-Element-1505">y = \omega^Tx+b</script>;
  对数线性回归模型可以写成: ln(y)=ωT+b <script type="math/tex" id="MathJax-Element-1506">ln(y) = \omega^T + b</script>;本质上仍然是线性回归,只不过拟合的是非线性的ln函数了。
  更一般地,考虑单调可微函数 g(.) <script type="math/tex" id="MathJax-Element-1507">g(.)</script>,令 y=g1(ωTx+b) <script type="math/tex" id="MathJax-Element-1508">y = g^{-1}(\omega^T x + b)</script>;这个模型就叫做广义线性回归模型。(直接抄书的,实在不擅长背定义QAQ)
  对于二分类任务,输出标记为 y{0,1} <script type="math/tex" id="MathJax-Element-1509">y\in\lbrace0, 1\rbrace</script>,而线性回归的预测结果 h(x)=ωTx+b <script type="math/tex" id="MathJax-Element-1510">h(x) = \omega^T x + b</script>,很明显是一个连续值,所以需要将其转换为 0/1 <script type="math/tex" id="MathJax-Element-1511">0 / 1</script>值。
   所以要用到单位阶越函数

y=0,h(x)<0;0.5,h(x)=0;1,h(x)>0;
<script type="math/tex; mode=display" id="MathJax-Element-1512">y = \begin{cases}0, h(x)<0;\\0.5, h(x)=0;\\1, h(x) >0;\end{cases}</script>
即,若预测值大于0,就判为正例;若预测值小于0,就判为负例;临界值处,任意判别。
  我们都知道,阶跃函数不可导,不连续,而 g1(.) <script type="math/tex" id="MathJax-Element-1513">g^{-1}(.)</script>必须是一个可微的函数,所以阶跃函数不能用作 g1(.) <script type="math/tex" id="MathJax-Element-1514">g^{-1}(.)</script>,还需要找一个连续函数代替阶跃函数。
  我们常用 对数几率函数(logistic function)来进行替代:
y=11+ez
<script type="math/tex; mode=display" id="MathJax-Element-1515">y = \frac{1}{1+e^{-z}}</script>
  画出图形会看到它形似S,所以也是一种sigmoid函数。
  把对数几率函数作为 g1(.) <script type="math/tex" id="MathJax-Element-1516">g^{-1}(.)</script>,代入到广义线性回归的公式中:
y=11+e(ωTx+b)
<script type="math/tex; mode=display" id="MathJax-Element-1517">y = \frac{1}{1+e^{-(\omega^Tx+b)}}</script>
  做一些化简,可以得到:
ln(y1y)=ωTx+b
<script type="math/tex; mode=display" id="MathJax-Element-1518">\ln(\frac{y}{1-y}) = \omega^Tx+b</script>
  其中,y是正例的可能性,(1-y)是负例的可能性。
  那么,这个 ln(y1y) <script type="math/tex" id="MathJax-Element-1519">\ln(\frac{y}{1-y})</script>其实就是“对数几率”,等式右边的是什么不用说了吧。可以看出,对数几率回归实质上就是使用线性回归模型( ωTx+b <script type="math/tex" id="MathJax-Element-1520">\omega^Tx+b</script>)来逼近这个对数几率( ln(y1y) <script type="math/tex" id="MathJax-Element-1521">\ln(\frac{y}{1-y})</script>)。
  好的,那么问题来了。如何求解出这个模型中的未知参数 ω <script type="math/tex" id="MathJax-Element-1522">\omega</script>和 b <script type="math/tex" id="MathJax-Element-1523">b</script>呢?
  只考虑二分类的情况下,将y换成后验概率P(y=1|x)<script type="math/tex" id="MathJax-Element-1524">P(y=1|x)</script>来表示,同理1-y可以换成 P(y=0|x) <script type="math/tex" id="MathJax-Element-1525">P(y=0|x)</script>。
  则有:
{ln(P(y=1|x)P(y=0|x))=ωTx+bP(y=1|x)+P(y=0|x)=1
<script type="math/tex; mode=display" id="MathJax-Element-1526">\begin{cases}\ln(\frac{P(y=1|x)}{P(y=0|x)}) = \omega^Tx+b\\P(y=1|x)+P(y=0|x)=1\end{cases}</script>
  解得:
P(y=1|x)=eωTx+b1+eωTx+bP(y=0|x)=11+eωTx+b
<script type="math/tex; mode=display" id="MathJax-Element-1527">\begin{cases}P(y=1|x)=\frac{e^{\omega^Tx+b}}{1+e^{\omega^Tx+b}}\\P(y=0|x)=\frac{1}{1+e^{\omega^Tx+b}}\end{cases}</script>
  通过极大似然法来估计 ω <script type="math/tex" id="MathJax-Element-1528">\omega</script>和 b <script type="math/tex" id="MathJax-Element-1529">b</script>:
L(ω,b)=i=1mln(P(yi|xi;ω,b))
<script type="math/tex; mode=display" id="MathJax-Element-1530"> L(\omega,b) = \sum_{i=1}^m\ln(P(y_i|xi;\omega,b)) </script>
  为表述方便,使用一个新矩阵 β <script type="math/tex" id="MathJax-Element-1531">\beta</script>来表示 ω <script type="math/tex" id="MathJax-Element-1532">\omega</script>和 b <script type="math/tex" id="MathJax-Element-1533">b</script>,令β={ωb}<script type="math/tex" id="MathJax-Element-1534">\beta=\left\{\begin{matrix}\omega & b\end{matrix}\right\}</script>。
  同时也要给x矩阵补上一列1,令 x={x1} <script type="math/tex" id="MathJax-Element-1535">x^{'} = \left\{\begin{matrix} x & 1\end{matrix}\right\}</script>。因为要对应参数b,补上1,保证结果不变。
  那么, ωTx+b=βTx <script type="math/tex" id="MathJax-Element-1536">\omega^Tx+b = \beta^Tx^{'}</script>。
  由于是二分类,即只有 y=0 <script type="math/tex" id="MathJax-Element-1537">y=0</script>和 y=1 <script type="math/tex" id="MathJax-Element-1538">y=1</script>的情况,那么可以将似然项重写为 y=0 <script type="math/tex" id="MathJax-Element-1539">y=0</script>和 y=1 <script type="math/tex" id="MathJax-Element-1540">y=1</script>的情况相加:
p(yi|xi;β)=yi×p(y=1|xi;β)+(1yi)×p(y=0|xi;β)
<script type="math/tex; mode=display" id="MathJax-Element-1541"> p(y_i|x_i;\beta) = y_i \times p(y=1|x_{i}^{'};\beta) + (1-y_i) \times p(y=0|x_{i}^{'};\beta)</script>
  ”西瓜书“上是这么写的,当然这样也不难理解。其实为了后面推导方便和容易理解,我们可以换成对数几率的形式来表示,原理依然是一样的,无非是加了个对数:
ln[p(yi|xi;β)]=yi×ln[p(y=1|xi;β)]+(1yi)×ln[p(y=0|xi;β)]
<script type="math/tex; mode=display" id="MathJax-Element-1542"> \ln[p(y_i|x_i;\beta)] = y_i \times \ln[p(y=1|x_{i}^{'};\beta)] + (1-y_i) \times \ln[p(y=0|x_{i}^{'};\beta)]</script>
  将上式代入到前面极大似然的公式中: L(β)=mi=1ln(P(yi|xi;β)) <script type="math/tex" id="MathJax-Element-1543">L(\beta) = \sum_{i=1}^m\ln(P(y_i|xi;\beta))</script>
  联立前面推出的后验概率的结果:
P(y=1|x)=eωTx+b1+eωTx+bP(y=0|x)=11+eωTx+b
<script type="math/tex; mode=display" id="MathJax-Element-1544">\begin{cases}P(y=1|x)=\frac{e^{\omega^Tx+b}}{1+e^{\omega^Tx+b}}\\P(y=0|x)=\frac{1}{1+e^{\omega^Tx+b}}\end{cases}</script>
  得到最后的结果:
L(β)=i=1m(yiβTxiln(1+eβTxi))
<script type="math/tex; mode=display" id="MathJax-Element-1545">L(\beta)=\sum_{i=1}^{m}(y_i \beta^Tx_i^{'} - \ln(1+e^{\beta^Tx_i^{'}}))</script>

  由于是极大似然,我们需要求出其极大值,所以有:

β=argmaxmL(β)
<script type="math/tex; mode=display" id="MathJax-Element-1546">\beta^*=argmax_mL(\beta)</script>
  求出使 L(β) <script type="math/tex" id="MathJax-Element-1547">L(\beta)</script>最大的最优解等价于求出使 L(β) <script type="math/tex" id="MathJax-Element-1548">-L(\beta)</script>最小的解,所以有:
β=argmaxmL(β)=argminmL(β)=i=1m(yiβTxi+ln(1+eβTxi))
<script type="math/tex; mode=display" id="MathJax-Element-1549">\beta^*=argmax_mL(\beta)=argmin_mL(\beta)\\=\sum_{i=1}^{m}(-y_i \beta^Tx_i^{'} + \ln(1+e^{\beta^Tx_i^{'}}))</script>
  最后可以通过凸优化中的梯度下降法、牛顿法等方法来求出 L(β) <script type="math/tex" id="MathJax-Element-1550">L(\beta)</script>函数的最优解 β <script type="math/tex" id="MathJax-Element-1551">\beta^*</script>。

以上仅是个人学习笔记分享用,也留作我自己以后温习。
(>.<)

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐