机器学习算法2_逻辑回归

1 逻辑回归

1.1 概念

  • 处理二分类问题
  • 逻辑回归是广义的线性回归
  • 将数据集带入Sigmoid分布函数,得到的结果大于0.5则判断为1,否则为0

1.2 推导方法

1.2.1 模型 - Sigmoid 分布函数

数据集
(1) z i = w 0 x 0 + w 1 x 1 + + w i x i = w T x z_{i} = {w_0}{x_0} + {w_1}{x_1} + \cdots + {w_i}{x_i} = {w^T}x \tag1
z i z_i 与线性回归模型很相似,一般情况下: w 0 = b w_0=b , x 0 = 1 x_0=1 ,也就是对应着线性函数中的截距项。

Sigmoid 分布函数
(2) f ( z i ) = 1 1 + e z i f(z_{i})=\frac{1}{1+e^{-z_{i}}} \tag2
对每一个特征 x x 乘上系数 w w ,然后通过 Sigmoid 函数计算 f ( z ) f(z) 值得到概率。其中, z z 可以被看作是分类边界,即将公式(1)代入公式(2)得到:
(3) h w ( x ) = f ( w T x ) = 1 1 + e w T x h_{w}(x) = f({w^T}x) = \frac{1}{1+e^{{w^T}x}} \tag3

Sigmoid 函数图像

(4) y i = { 0 h w ( x ) < 0.5 1 h w ( x ) 0.5 y_i = \left\{\begin{matrix} 0 & h_w(x) < 0.5\\ 1 & h_w(x) \geq 0.5 \end{matrix}\right. \tag4

1.2.2 目标函数 - 对数损失函数

(5) J ( w ) = 1 m i = 1 m [ y i log ( h w ( x i ) ) + ( 1 y i ) log ( 1 h w ( x i ) ) ] J(w) = - \frac{1}{m} \sum_{i=1}^m \left [ y_i \log (h_{w}(x_i)) + (1-y_i) \log(1-h_{w}(x_i)) \right ]\tag5
目标就是求得 公式(5) 对数损失函数的 最小值
由于非凸函数,不能像最小二乘法求得全局最小值,所以需要用到梯度下降算法求解

1.2.3 求解方法

1.2.3.1 梯度下降法

针对公式(5)求导,得到梯度下降的方向
(5) J w = 1 m X T ( h w ( x ) y ) \frac{\partial{J}}{\partial{w}} = \frac{1}{m}X^T(h_{w}(x)-y) \tag5
得到梯度的方向后,会定义一个 常数 α \alpha (学习率 Learning Rate),执行权重更新:
(6) w w α J w w \leftarrow w - \alpha \frac{\partial{J}}{\partial{w}} \tag6

如下图,每次更新 w 0 w_0 w 1 w_1 , w 2 w_2 … 直到获得最优解w*

不断更新w的过程,即是:

(7) w w α 1 m X T ( h w ( x ) y ) w {\color{Magenta} \Longleftarrow} w - \alpha \frac{1}{m}X^T(h_{w}(x)-y) \tag7

1.2.4 性能度量

【 占位 - todo 】

2 Softmax

2.1 概念

  • 处理多分类问题
  • 应用于分类任务的输出层

2.2 推导方法

2.2.1 模型

数据集
(8) { ( x 1 , y 1 ) ,   , ( x i , y i ) } \left \{ \left ( x_1,y_1 \right ), \cdots ,\left ( x_i,y_i \right ) \right \} \tag8

(9) z i = w i 0 x i + w i 1 x i + + w i k x i = w k T x i z_i = {w_{i0}}{x_i} + {w_{i1}}{x_i} + \cdots + {w_{ik}}{x_i} = {w_{k}^{T}}x_i \tag9

其实 y i y_i 这里是类别,有 { 1 ,   , k } \left \{ 1, \cdots, k \right \} 个类别,通过 Softmax函数 求得每个类别的概率:

(10) p ( y i ) = e z i i = 1 k e z i p(y_i) = \frac{e^{z_i}}{\sum_{i=1}^{k} e^{z_i}} \tag{10}

公式(9) 这里为什么是 w k T x i w_{k}^{T}x_i ,这里演示一下 z i z_i 的计算过程

CSDN图标

z 1 = w 11 x 1 + w 21 x 2 + w 31 x 3 z 2 = w 12 x 1 + w 22 x 2 + w 33 x 3 z 3 = w 13 x 1 + w 23 x 2 + w 33 x 3 z_1 = w_{11}x_1 + w_{21}x_2 + w_{31}x_3 \\ z_2 = w_{12}x_1 + w_{22}x_2 + w_{33}x_3 \\ z_3 = w_{13}x_1 + w_{23}x_2 + w_{33}x_3

公式(10), p ( y i ) p(y_i) 计算演示,注意:图中的 y i y_i 应该是 p ( y i ) p(y_i)

p ( y 1 ) = e z 1 e z 1 + e z 2 + e z 3 = e 3 e 3 + e 1 + e 3 20 20 + 2.7 + 0.05 0.88 p ( y 2 ) = e z 2 e z 1 + e z 2 + e z 3 = e 1 e 3 + e 1 + e 3 2.7 20 + 2.7 + 0.05 0.12 p ( y 3 ) = e z 3 e z 1 + e z 2 + e z 3 = e 3 e 3 + e 1 + e 3 0.05 20 + 2.7 + 0.05 0 p( y_1) =\frac{e^{z_1}}{e^{z_1} +e^{z_2}+e^{z_3}} = \frac{e^3}{e^3 +e^1+e^{-3}} \approx \frac{20}{20 + 2.7 + 0.05} \approx 0.88 \\ p(y_2) =\frac{e^{z_2}}{e^{z_1} +e^{z_2}+e^{z_3}} = \frac{e^1}{e^3 +e^1+e^{-3}} \approx \frac{2.7}{20 + 2.7 + 0.05} \approx 0.12 \\ p(y_3) =\frac{e^{z_3}}{e^{z_1} +e^{z_2}+e^{z_3}} = \frac{e^{-3}}{e^3 +e^1+e^{-3}} \approx \frac{0.05}{20 + 2.7 + 0.05} \approx 0

p ( y i ) = p ( y 1 ) + p ( y 2 ) + p ( y 3 ) = 0.88 + 0.12 + 0 = 1 \sum p(y_i) = p(y_1) + p(y_2) + p(y_3) = 0.88 + 0.12 + 0 = 1

看着计算过程,我们不难得到,我们的 模型函数

(11) h w ( x i ) = [ p ( y i = 1     x i   ;   θ ) p ( y i = 2     x i   ;   θ ) p ( y i = k     x i   ;   θ ) ] = 1 l = 1 k e θ l T x i [ e θ 1 T x i e θ 2 T x i e θ k T x i ] h_{w}(x_i) =\begin{bmatrix} p(y_i = 1 \ | \ x_i \ ; \ \theta ) \\ p(y_i = 2 \ | \ x_i \ ; \ \theta ) \\ \cdots \\ p(y_i = k \ | \ x_i \ ; \ \theta ) \end{bmatrix} = \frac{1}{\sum_{l=1}^{k}e^{\theta _{l}^{T}x_i}}\begin{bmatrix} e^{\theta _{1}^{T}x_i} \\ e^{\theta _{2}^{T}x_i} \\ \cdots \\ e^{\theta _{k}^{T}x_i} \end{bmatrix} \tag{11}

2.2.2 目标函数 - loss函数

(12) J ( θ ) = 1 m [ i = 1 m j = 1 k 1 { y i = j }   log e θ j T x i l = 1 k e θ l T x i ] = 1 m [ i = 1 m ( 1 y i ) log ( 1 h θ ( x i ) ) + y i log ( h θ ( x i ) ) ] = 1 m [ i = 1 m j = 1 k 1 { y i = j }   p ( y i = j     x i   ;   θ ) ] \begin{aligned} J(\theta ) &= -\frac{1}{m} \left [\sum_{i=1}^m\sum_{j=1}^k 1 \left \{ y_i = j \right \} \ \log\frac{e^{\theta _{j}^{T}x_i}}{\sum_{l=1}^{k}e^{\theta _{l}^{T}x_i}} \right ] \\ &= - \frac{1}{m} \left [ \sum_{i=1}^m (1-y_i) \log(1-h_{\theta }(x_i)) + y_i \log (h_{\theta }(x_i)) \right ] \\ &= -\frac{1}{m} \left [\sum_{i=1}^m\sum_{j=1}^k 1 \left \{ y_i = j \right \} \ p(y_i = j \ | \ x_i \ ; \ \theta ) \right ] \tag{12} \end{aligned}

公式(12)中的 1 { y i = j } 1 \left \{ y_i = j \right \} 是一个指示性函数,即当大括号中的值为真时(即 y i = j y^i = j ),结果为1,否则为0

2.2.3 求解方法

2.2.3.1 梯度下降法

推导过程 可以参考 Softmax回归
这里不详细解释,过程可以参考 1.2.3.1 梯度下降法 理解

2.2.4 性能度量

【 占位 - todo 】

3 sklearn

3.1 逻辑回归

3.1.1 例子

from sklearn.linear_model import LogisticRegression

model = LogisticRegression(tol=0.001, max_iter=10000)  # 设置数据解算精度和迭代次数
model.fit(x, y)
model.coef_, model.intercept_

3.1.2 参数说明

模型参数详解 Google的文档

3.2 Sofrmax回归

3.2.1 例子

【 占位 - todo 】

3.2.2 参数说明

【 占位 - todo 】

4 优缺点

【 占位 - todo 】

5 算法对比

5.1 逻辑回归 vs 线性回归

  • 逻辑回归处理二分类问题
  • 线性回归处理连续值问题

5.2 逻辑回归/Softmax回归 vs 神经网络

6 疑问

  1. 逻辑回归的对数损失函数为什么是凸函数,要用梯度下降算法??
    可以参考这两篇文章
    机器学习总结之逻辑回归Logistic Regression
    Proofs you probably weren’t taught
  2. 逻辑回归和Softmax回归除了梯度下降的方法,还有没有其他的求解方法?

参考资料

逻辑回归
第三章_线性模型:对数几率回归
逻辑回归算法面经
详解softmax函数以及相关求导过程
softmax 损失函数以及梯度推导计算
简单易懂的softmax交叉熵损失函数求导
Softmax回归
Logistic and Softmax Regression (逻辑回归和Softmax回归)

猜你喜欢

转载自blog.csdn.net/q370835062/article/details/83010848