逻辑回归 Logistic regression

逻辑回归 Logistic regression

参考文献
	https://zhuanlan.zhihu.com/p/74874291
  • 背景

    • Logistic Regression 虽然被称为回归,但其实际上是分类模型,并常用于二分类。
  • Logistic 分布

    • 一种连续型的概率分布
      F ( X ) = P ( X ≤ x ) = 1 1 + e − ( x − μ ) / γ (分布函数) F(X) = P(X \leq x)= \frac{1}{1+e^{-(x-\mu)/\gamma}} \tag{分布函数} F(X)=P(Xx)=1+e(xμ)/γ1(分布函数)

      f ( x ) = F ′ ( X ) = P ( X ≤ x ) = e − ( x − μ ) / γ γ ( 1 + e − ( x − μ ) / γ ) 2 (密度函数) f(x)=F'(X) = P(X \leq x)= \frac{e^{-(x-\mu)/\gamma}}{\gamma(1+e^{-(x-\mu)/\gamma})^2} \tag{密度函数} f(x)=F(X)=P(Xx)=γ(1+e(xμ)/γ)2e(xμ)/γ(密度函数)

      • μ μ μ 表示位置参数 γ > 0 γ>0 γ>0形状参数
    • 图像
      image-20221006122903490

      • Sigmoid 函数就是 Logistic 的分布函数在 μ = 0 , γ = 1 \mu=0,\gamma=1 μ=0,γ=1 的特殊形式。
    • code

      import math
      
      import matplotlib.pyplot as plt
      
      import numpy as np
      
      e = math.e
      mu = 0
      gamma = 1
      x = np.arange(-10, 10, 0.2)
      
      # y = 1/(1+pow(e, -(x-mu)/gamma))
      y = pow(e, -(x - mu) / gamma) / (gamma * pow(1 + pow(e, -(x - mu) / gamma), 2))
      plt.title("f(X)")
      plt.plot(x, y)
      
      plt.show()
      
      
  • Logistic 回归

    • 背景

      • Logistic 回归主要用于分类问题,我们以二分类为例,对于所给数据集假设存在这样的一条直线可以将数据完成线性可分。
    • 决策边界
      h w ( x ) = w 1 x 1 + w 2 x 2 + b = 0 h_w(x)=w_1x_1+w_2x_2+b=0 hw(x)=w1x1+w2x2+b=0

      • h w ( x ) > 0 h_w(x) > 0 hw(x)>0 判断 x x x 的类别为 1,反之判断为 0。
      • 这个过程其实是感知机。
      • Logistic 回归还需要加一层,
        • 它要找到分类概率 P ( y = 1 ) P(y=1) P(y=1) 与输入向量 x x x 的直接关系, P ( y = 1 ∣ x ) P(y=1|x) P(y=1∣x)
        • 然后通过比较概率值来判断类别。
    • 二分类问题

      • 数据集
        D = ( x i , y i ) , x ⊆ R n , y ∈ ( 0 , 1 ) , i = 1 , . . , N D=(x_i,y_i),\\ x\subseteq R^{n}, y \in (0,1),i=1,..,N D=(xi,yi),xRn,y(0,1),i=1,..,N

      • w T x + b w^Tx+b wTx+b 的取值是连续的,它不能拟合离散变量,

        • 可以考虑用它来拟合条件概率 p ( Y = 1 ∣ x ) p(Y=1|x) p(Y=1∣x) ,因为概率的取值也是连续的。

        • 但是对于 w ≠ 0 w≠0 w=0(若等于零向量则没有什么求解的价值),

        • w T x + b w^Tx+b wTx+b 取值为 R R R ,不符合概率取值为 0 到 1,因此考虑采用广义线性模型

          • 最理想的是单位阶跃函数,但是这个阶跃函数不可微
            P ( y = 1 ∣ x ) = { 0 , z < 0 0.5 , z = 0 1 , z > 0 z = w T x + b P(y=1|x)=\left\{ \begin{aligned} 0 & , & z < 0 \\ 0.5 & , & z = 0 \\ 1 & , & z > 0 \end{aligned} \right.\\ z=w^Tx+b P(y=1∣x)= 00.51,,,z<0z=0z>0z=wTx+b

            • P ( y = 1 ∣ x ) P(y=1|x) P(y=1∣x) 为结点 x x x 为1的概率。
          • 对数几率函数是一个常用的替代函数:
            y = 1 1 + e − ( w T + b ) l n y 1 − y = w T + b (对数几率函数) y=\frac{1}{1+e^{-(w^T+b)}}\\ ln\frac{y}{1-y}=w^T+b \tag{对数几率函数} y=1+e(wT+b)1ln1yy=wT+b(对数几率函数)

            • y y y x x x 的标签为1的概率, 1 − y 1-y 1y x x x 的标签为0的概率,二者比值为几率

            • y y y 视为类后验概率估计,重写公式有:
              l n P ( y = 1 ∣ x ) 1 − P ( y = 1 ∣ x ) = w T + b ln\frac{P(y=1|x)}{1-P(y=1|x)}=w^T+b ln1P(y=1∣x)P(y=1∣x)=wT+b

              P ( y = 1 ∣ x ) = w T x + b P(y=1|x)=w^Tx+b P(y=1∣x)=wTx+b

              • y y y x x x 的label
              • 输出 y = 1 y=1 y=1 的对数几率是由输入 x x x线性函数表示的模型,这就是逻辑回归模型
            • 使用对数几率的意义

              • Logistic 回归是使用线性回归模型的预测值
              • 逼近分类任务真实标记的对数几率
              • 优点
                • 直接对分类的概率建模,无需实现假设数据分布,从而避免了假设分布不准确带来的问题(区别于生成式模型);
                • 不仅可预测出类别,还能得到该预测的概率,这对一些利用概率辅助决策的任务很有用;
                • 对数几率函数是任意阶可导的凸函数,有许多数值优化算法都可以求出最优解。
      • 思路

        • 先拟合决策边界(不局限于线性,还可以是多项式),
          h w ( x ) = w 1 x 1 + w 2 x 2 + b = 0 h_w(x)=w_1x_1+w_2x_2+b=0 hw(x)=w1x1+w2x2+b=0

        • 再建立这个边界与分类的概率联系,从而得到了二分类情况下的概率。
          P ( y = 1 ∣ x ) = h w ( x ) P(y=1|x)=h_w(x) P(y=1∣x)=hw(x)

  • 求解模型参数

    • 方法

      • 在统计学中,常常使用极大似然估计法来求解,
        • 即找到一组参数,使得在这组参数下,我们的数据的似然度(概率)最大。
    • 似然函数和损失函数


      • P ( y = 1 ∣ x ) = p ( x ) P ( y = 0 ∣ x ) = 1 − p ( x ) P(y=1|x)= p(x)\\ P(y=0|x)= 1-p(x) P(y=1∣x)=p(x)P(y=0∣x)=1p(x)

        • p ( x ) p(x) p(x) 为结点 x x x 的标签为1的概率。
        • 1 − p ( x ) 1-p(x) 1p(x) 为结点 x x x 的标签为0的概率。
      • 似然函数
        L ( w ) = ∏ i = 0 n [ p ( x i ) ] y i   [ 1 − p ( x i ) ] 1 − y i L(w) = \prod_{i=0}^n[p(x_i)]^{y_i}~[1-p(x_i)]^{1-y_i} L(w)=i=0n[p(xi)]yi [1p(xi)]1yi

      • 对数似然函数
        L ( w ) = ∑ i = 0 n [ y i l n [ p ( x i ) ] + ( 1 − y i ) l n [ ( 1 − p ( x i ) ) ] = ∑ i = 0 n [ y i l n [ p ( x i ) 1 − p ( x i ) ] + l n [ ( 1 − p ( x i ) ) ] = ∑ i = 0 n [ y i ( w ⋅ x i ) − l n [ 1 + e w ⋅ x i ] ] L(w) = \sum_{i=0}^n \Big[y_iln[p(x_i)]+(1-y_i)ln[(1-p(x_i))\Big]\\ =\sum_{i=0}^n\Big[y_iln[\frac{p(x_i)}{1-p(x_i)}]+ln[(1-p(x_i))\Big]\\ =\sum_{i=0}^n\Big[y_i(w \cdot x_i )-ln[1+e^{w\cdot x_i}]\Big] L(w)=i=0n[yiln[p(xi)]+(1yi)ln[(1p(xi))]=i=0n[yiln[1p(xi)p(xi)]+ln[(1p(xi))]=i=0n[yi(wxi)ln[1+ewxi]]

        • w w w 为参数
      • 损失函数

        • 衡量的是模型预测错误的程度。如果取整个数据集上的平均对数似然损失,有:
          L ( w ) = − 1 n l n ( L ( w ) ) \mathcal{L}(w) = -\frac{1}{n}ln(L(w)) L(w)=n1ln(L(w))

          • 我们最大化似然函数最小化损失函数实际上是等价的。
      • 求解
        L ( w ) = − 1 n ∑ i = 0 n [ y i l n [ p ( x i ) ] + ( 1 − y i ) l n [ ( 1 − p ( x i ) ) ] \mathcal{L}(w) = -\frac{1}{n}\sum_{i=0}^n \Big[y_iln[p(x_i)]+(1-y_i)ln[(1-p(x_i))\Big]\\ L(w)=n1i=0n[yiln[p(xi)]+(1yi)ln[(1p(xi))]

        • 梯度下降

          • 梯度下降是通过 J ( w ) J(w) J(w) w w w 的一阶导数来找下降方向,

          • 并且以迭代的方式来更新参数,更新方式为
            g i = δ L ( w ) δ w i = ( p ( x i ) − y i ) x i w i k + 1 = w i k − α g i g_i = \frac{\delta\mathcal{L}(w)}{\delta w_i}=(p(x_i)-y_i)x_i\\ w^{k+1}_{i} = w^{k}_i - \alpha g_i gi=δwiδL(w)=(p(xi)yi)xiwik+1=wikαgi

            • k k k 为迭代次数
            • y y y 为标签
            • i i i 为参数序号
            • α \alpha α 为平衡参数
            • 更新参数后,可以通过比较 ∣ ∣ L ( w k + 1 ) − L ( w k ) ∣ ∣ ||\mathcal{L}(wk+1)−\mathcal{L}(wk)|| ∣∣L(wk+1)L(wk)∣∣ 小于阈值或者到达最大迭代次数来停止迭代。
        • 牛顿法

          • 在现有极小点估计值的附近对 f ( x ) f(x) f(x) 做二阶泰勒展开,进而找到极小点的下一个估计值.

          • 需要目标函数是二阶连续可微的。

          • 假设 w k w^k wk 为当前的极小值估计值,那么有:
            φ ( w ) = L ( w k ) + L ′ ( w k ) ( w − w k ) + 1 2 L ′ ′ ( w k ) ( w − w k ) 2 \varphi(w) = \mathcal{L}(w^k) + \mathcal{L}'(w^k)(w-w^k) + \frac{1}{2}\mathcal{L}''(w^k)(w-w^k)^2 φ(w)=L(wk)+L(wk)(wwk)+21L′′(wk)(wwk)2

            f ( x ) = f ( x 0 ) + f ′ ( x 0 ) 1 ! ( x − x 0 ) + f ′ ′ ( x 0 ) 2 ! ( x − x 0 ) 2 + . . . + o [ ( x − x o ) n ] f(x) = f(x_0)+\frac{f'(x_0)}{1!}(x-x_0)+\frac{f''(x_0)}{2!}(x-x_0)^2+...+o[(x-x_o)^n] f(x)=f(x0)+1!f(x0)(xx0)+2!f′′(x0)(xx0)2+...+o[(xxo)n]

            • φ ′ ( w ) = 0 \varphi'(w)=0 φ(w)=0
              0 = L ′ ( w k ) + L ′ ′ ( w k ) ( w − w k ) w = w k − L ′ ( w k ) L ′ ′ ( w k ) 0 = \mathcal{L}'(w^k) +\mathcal{L}''(w^k)(w-w^k)\\ w = w^k - \frac{\mathcal{L}'(w^k)}{\mathcal{L}''(w^k)} 0=L(wk)+L′′(wk)(wwk)w=wkL′′(wk)L(wk)

            • 令将 w w w 表示为 w k + 1 w^{k+1} wk+1
              w k + 1 = w k − L ′ ( w k ) L ′ ′ ( w k ) = w k − H k − 1 ⋅ g k w^{k+1} = w^k - \frac{\mathcal{L}'(w^k)}{\mathcal{L}''(w^k)}\\ = w^k-H^{-1}_k \cdot g_k wk+1=wkL′′(wk)L(wk)=wkHk1gk

            • H k − 1 H^{-1}_k Hk1 为海森矩阵,对应梯度下降法中的 α \alpha α
              H m n = δ 2 L ( w ) δ w m δ w n = h w ( x ( i ) ) ( 1 − p w ( x ( i ) ) ) x m ( i ) x n ( i ) H_{mn}=\frac{\delta^2\mathcal{L}(w)}{\delta w_m\delta w_n}=h_w(x^{(i)})(1-p_w(x^{(i)}))x^{(i)}_mx^{(i)}_n Hmn=δwmδwnδ2L(w)=hw(x(i))(1pw(x(i)))xm(i)xn(i)

              • h w ( x ( i ) ) h_w(x^{(i)}) hw(x(i)) 类似真正的标签

你可能感兴趣的:(机器学习,逻辑回归,机器学习,python)