关于逻辑回归的思考

1.问题的引出

关于逻辑回归的思考

问题是:

关于逻辑回归的思考

  • 如果出现断崖式的变化,线性拟合的效果就不是很好。
  • 可能需要一个会产生阶跃且连续的函数来进行拟合

2.sigmod函数

g(z)=11+ez=ez1+ez g(z)=\frac{1}{1+e^{-z}}=\frac{e^{z}}{1+e^{z}}

关于逻辑回归的思考

  • 自变量zz的范围是(,+)(-\infty,+\infty),值域的范围gg(0,1)(0,1)
  • 一个很自然的想法就是,以某一个函数zz作为gg的输入,再将gg对应的输出作为概率输出,通过设定阈值,将结果进行分类(二分类,(0-1))。
  • 那么关于数据x\mathbf{x}(或X\mathbf{X}),先构造什么样的zz呢?答案是任意,只要是能够符合数据的就是合理的。所以zz的选取不是固定的!

例1

关于逻辑回归的思考

  • 这个分类自然想到线性模型

    • z=θ0+θ1x1+θ2x2z=\theta_0+\theta_1*x_1 + \theta_2 * x_2

      • z=0z=0时,即θ0+θ1x1+θ2x2=0\theta_0+\theta_1*x_1 + \theta_2 * x_2=0时,恰好对应一条直线

        关于逻辑回归的思考

      • 对于要分类的点,均在直线两侧,那么将他们的坐标带入zz中的结果是z>0z>0z<0z<0(二者区其一)。

      • 问题是sigmodsigmod函数如何对其起作用呢?答案是通过将点带入zz中,对于此时zz的输出(>0>0<0<0)进行设定阈值。根据sigmodsigmod函数的特性,自然可以想到将0.50.5作为阈值。

        • xxzz的作用下输出结果result>0result>0resultresult再在sigmodsigmod函数作用下,输出结果>0.5>0.5,此时判定为类别1
        • xxzz的作用下输出结果result<0result<0resultresult再在sigmodsigmod函数作用下,输出结果<0.5<0.5,此时判定为类别0
  • 大致的设计思路:

    1. z=θ0+θ1x1+θ2x2z=\theta_0+\theta_1*x_1 + \theta_2 * x_2
    2. g(z)=11+ezg(z)=\frac{1}{1+e^{-z}}
    3. 通过gg的输出和设定的阈值进行比较,得出分类结果。
      • 上述未知的量时参数Θ\Theta,这个才怎么求呢?下面再说。

例2

关于逻辑回归的思考

  • 这个自然想到一个分类边界是圆(分非线性模型
  • 关于逻辑回归的思考
    • z=θ0+θ1x1+θ2x2+θ3x12+θ4x42z=\theta_0 + \theta_1*x_1 +\theta_2*x_2 + \theta_3 * x_1^{2} + \theta_4 * x_4^{2}。(这里不需要x1x2x_1*x_2的交叉项)
      • z=0z=0,此时正是圆的边界。对于要分类的点带入zz中,输出结果>0>0<0<0(二者取其一)
      • 以后的分析和上述例1相同。(sigmodsigmod函数的作用,阈值的选取等,均一致)
  • 大致的设计思路:
    1. z=θ0+θ1x1+θ2x2+θ3x12+θ4x42z=\theta_0 + \theta_1*x_1 +\theta_2*x_2 + \theta_3 * x_1^{2} + \theta_4 * x_4^{2}
    2. g(z)=11+ezg(z)=\frac{1}{1+e^{-z}}
    3. 通过gg的输出和设定的阈值进行比较,得出分类结果。
      • 上述未知的量时参数Θ\Theta,这个才怎么求呢?下面再说。

对比发现

  • 对于上述例1和例2的比较,逻辑回归的整体设计思路大致相同。要解决的两个问题是:
    1. 如何确定一开始的zz,从结果上看,线性模型和非线性模型均可。并没有定法,这个zz的选取得结合具体的XX分布进行选择。
      • 注:XX的分布在高维的时候判定本身就是一个难题,所以zz的确定也不是一件容易的事情。
    2. 假定已经确定了zz的函数表达(但其中的参数Θ\Theta未知),该如何求参数Θ\Theta
      • 求参数的方法,基本上会针对目标函数(损失含糊)采用迭代法(解析解太困难了,有时候甚至不可行)
      • ==问题又变成了:针对$sigmod函数 $找一个什么样的目标函数(损失函数)?==这就是下面要说的事了!

逻辑回归是如何做到分类的?

  • 针对逻辑回归,其中的sigmodsigmod函数和对应的损失函数的确定,是该方法的精髓。

1.模型

假定已知zθ(x)函数z_{\theta}(x),那么将其作为gidmodgidmod函数的输入,g(z)g(z)。那么有一个假设空间hθ(x)h_{\theta}(x)
zθ(x);g(z)=11+ez 已知z_{\theta}(x);g(z)=\frac{1}{1+e^{-z}}

hθ(x)=g(zθ(x))=11+ezθ(x) h_{\theta}(x)=g(z_{\theta}(x))=\frac{1}{1+e^{z_{\theta}(x)}}

其中:hθ(x)(0,1)h_{\theta}(x) \in (0,1)。这个是设计损失函数的关键。

2.策略

关于逻辑回归的思考

损失函数

  1. 对于一个样本损失
    cost(hθ(x),y)={log(hθ(x)),y=1log(1hθ(x)),y=0 cost(h_{\theta(x)},y)=\begin{cases}-log(h_{\theta}(x)),y=1\\-log(1-h_{\theta}(x)),y=0\end{cases}

    • 解释:
      • 在已知分类信息y=1y=1时,希望hθ(x)h_{\theta}(x)的值越接近1最好,这样损失才更小。假设,在y=1y=1时,但是分类错了,即hθ(x)h_{\theta}(x)的值相对来说可能更接近于0(从右侧趋近于0),此时log(hθ(x))-log(h_{\theta}(x))的值会变大,意味着损失增大,而目标就是来最小化这个损失。所有此时针对一个样本在y=1y=1时设计的损失函数是合理的。
      • 在已知分类信息y=0y=0时,希望hθ(x)h_{\theta}(x)的值越接近0最好,这样损失log(1hθ(x))-log(1-h_{\theta}(x))才更小。假设,在y=0y=0时,但是分类错了,即hθ(x)h_{\theta}(x)的值相对来说可能更接近于1(从左侧趋近1),此时log(1hθ(x))-log(1-h_{\theta}(x))的值会变大,意味着损失增大,而目标就是来最小化这个损失。所有此时针对一个样本在y=0y=0时设计的损失函数是合理的。
      • 但是上述的算是有一个问题,那就它是分段函数,不利于优化,所以有了下面的合并。
  2. 技巧上的合并(背后有最大熵理论模型,对数最大似然估计)
    cost(hθ(x(i),y(i))=(y(i)log(hθ(x(i))+(1j(i))log(1hθx(i)) cost(h_{\theta}(x^{(i)},y^{(i)})=-(y^{(i)}*log(h_{\theta}^{(x^{(i)})}+(1-j^{(i)})*log(1-h_{\theta}^{x^{(i)}})

  3. 损失函数:

    1. 经验风险
      J(θ)=1mi=1m(y(i)log(hθ(x(i))+(1j(i))log(1hθx(i)) J(\theta)=-\frac{1}{m} \sum_{i=1}^{m}(y^{(i)}*log(h_{\theta}^{(x^{(i)})}+(1-j^{(i)})*log(1-h_{\theta}^{x^{(i)}})

    2. 结构风险
      J(θ)=1mi=1m(y(i)log(hθ(x(i))+(1j(i))log(1hθx(i))+λj=0nθj2 J(\theta)=-\frac{1}{m} \sum_{i=1}^{m}(y^{(i)}*log(h_{\theta}^{(x^{(i)})}+(1-j^{(i)})*log(1-h_{\theta}^{x^{(i)}}) + \lambda \sum_{j=0}^{n}{\theta_{j}^{2}}

3.算法

对于g(z)=11+ezg(z) =\frac{1}{1+e^{-z}}的求导,
d(g(z))dz=(1+ez)2ez(1)=11+ezez1+ez=11+ez(111+ez)=g(z)(1g(z)) \frac{d(g(z))}{dz}=-(1+e^{-z})^{-2}*e^{-z}*(-1)\\=\frac{1}{1+e^{-z}}*\frac{e^{-z}}{1+e^{-z}}\\=\frac{1}{1+e^{-z}}*(1-\frac{1}{1+e^{-z}})\\=g(z)*(1-g(z))
所以
gθj=gzzθj=g(z)(1g(z))zθj \frac{\partial g}{\partial \theta_j}=\frac{\partial g}{\partial z}\frac{\partial z}{\partial \theta_j}\\=g(z)*(1-g(z))*\frac{\partial z}{\partial \theta_j}
特别地,当zθ(x(i)=θTx(i)z_\theta(x^{(i)}=\theta^{T}x^{(i)},得到zθj=xj(i)\frac{\partial z}{\theta_j}=x_j^{(i)}

此时,
gθj=g(z)(1g(z))zθj=g(z)(1g(z))xj(i) \frac{\partial g}{\partial \theta_j}=g(z)*(1-g(z))*\frac{\partial z}{\partial \theta_j}=g(z)*(1-g(z))*x_{j}^{(i)}

采用梯度下降算法求解参数Θ\Theta

θj:=θjαθjJ(θ),(j=0n) \theta_j := \theta_j - \alpha\frac{\partial}{\partial \theta_j}J(\theta),(j=0 \cdots n)

θjJ(θ)=θj(1mi=1m(y(i)log(hθ(x(i))+(1j(i))log(1hθx(i)))=1mi=1m(y(i)g(θTx(i)))xj(i) \frac{\partial}{\partial \theta_j} J(\theta)=\frac{\partial}{\partial \theta_j}(-\frac{1}{m} \sum_{i=1}^{m}(y^{(i)}*log(h_{\theta}^{(x^{(i)})}+(1-j^{(i)})*log(1-h_{\theta}^{x^{(i)}}))\\\cdots\\\cdots\\=-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}-g(\theta^{T}x^{(i)}))*x_{j}^{(i)}

说明:

  • 上述的计算并没有什么难度,有难度的地方主要有两点:

    1. 关于逻辑回归中的sigmodsigmod函数的使用和一个样本的损失函数的设计和最终的损失函数的设计(对数最大似然)。

    2. 采用标量进行求导或者求偏导,问题着实不大。转化成用矢量计算,会比标量下计算要难一点。

总结:

  1. 逻辑回归可以将连续值通过sigmod+sigmod函数+阈值限定转为离散值问题(二分类问题)
  2. sigmodsigmod函数的使用
  3. 对数最大似然函数
  4. 矢量下求导

参见:
统计学习方法
机器学习实战
https://blog.csdn.net/qq_38923076/article/details/82925183

相关文章: