逻辑回归算法理论

1.逻辑回归理论

机器学习最常用的两种场景无非是分类回归,其中:
分类:预测连续的、具体的数值。比如:支付宝里的芝麻信用分数评估,房价预测等。
回归:对各种事物分门别类,用于离散型预测。比如:图片分类,癌症类型诊断等。
当然机器学习除了分类、回归以外,还可用于聚类降维等。
首先要明白的是逻辑回归是一个分类算法,不要被名字迷惑了,可用于二分类,多分类等。

下面来讲讲逻辑回归的理论知识:

对于分类问题,简单来讲,就是预测概率,对于二分类问题,我们通常用y=0或者y=1来表示样本标签,我们预测该样本标签 y = 0 y=0 y=0的概率为 p p p,这 y = 1 y=1 y=1的概率为 1 − p 1-p 1p,然后我们只用通过比较 p p p 1 − p 1-p 1p的大小,就可以将该样本归于概率更大的一类。对于多分类问题,同样可以这么理解。对于有些场景,我们还可以设置一个阈值,当预测的值大于该阈值时,则可以将该样本划分为某一类(前面比较的 p p p 1 − p 1-p 1p,其实就相当于将阈值设为了0.5)。

首先对于线性回归假设函数:

h θ ( x ) = θ T X = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n {h_\theta}\left( x \right)={\theta^T}X={\theta_{0}}{x_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}} hθ(x)=θTX=θ0x0+θ1x1+θ2x2+...+θnxn

其中: x 1 , x 2 , . . . x n x_1,x_2,...x_n x1,x2,...xn是输入样本的 n n n个特征, θ 0 , θ 1 , . . . θ n \theta_0, \theta_1, ...\theta_n θ0,θ1,...θn为每个特征的权重系数。

我们如果用线性回归来做二分类的话,可能会得到远大于1或者小于0的值,得到的结果可能会让我们有点不好理解,因为概率肯定都是在0~1之间的。

所以我们就对线性回归做了如下的改进,变成下面的逻辑回归假设函数,使模型的输出变量范围始终在0和1之间。 逻辑回归模型的假设是:
h θ ( x ) = g ( θ T X ) h_\theta \left( x \right)=g\left(\theta^{T}X \right) hθ(x)=g(θTX)
其中: X X X 代表特征向量, g g g 代表逻辑函数(logistic function)是一个常用的逻辑函数为S形函数(Sigmoid function),公式为: g ( z ) = 1 1 + e − z g\left( z \right)=\frac{1}{1+{{e}^{-z}}} g(z)=1+ez1
python代码实现:

import numpy as np   
def sigmoid(z):   
   return 1 / (1 + np.exp(-z))

该函数的图像为:
在这里插入图片描述
就可以看到经过逻辑回归运算的输出值都被映射在了[0,1]之间。
所以我们就得到逻辑回归的表达式:
h θ ( x ) = 1 1 + e − θ T X {h_\theta}\left( x \right)=\frac{1}{1+{{e}^{-{\theta^T}X}}} hθ(x)=1+eθTX1

h θ ( x ) h_\theta \left( x \right) hθ(x)的作用是,对于给定的输入变量,根据选择的参数计算输出变量=1的可能性(estimated probablity)即 h θ ( x ) = P ( y = 1 ∣ x ; θ ) h_\theta \left( x \right)=P\left( y=1|x;\theta \right) hθ(x)=P(y=1x;θ) 例如,如果对于给定的 x x x,通过已经确定的参数计算得出 h θ ( x ) = 0.7 h_\theta \left( x \right)=0.7 hθ(x)=0.7,则表示有70%的几率 y y y为正向类,相应地 y y y为负向类的几率为1-0.7=0.3。

2.代价函数

我们知道了逻辑回归算法是怎么运行的了,那么它的参数该 θ 0 , θ 1 , . . . θ n \theta_0, \theta_1, ...\theta_n θ0,θ1,...θn 如何确定呢。
先解释一下损失函数(loss function), 代价函数(cost function),其实就是用来衡量真实值与预测值之间的误差的,误差越大,代价也就越大。
区别就是:
(1)损失函数(Loss function)是定义在单个训练样本上的,也就是只算一个样本的误差;
(2)代价函数(Cost function)是定义在整个训练集上面的,也就是所有样本的误差的总和的平均,也就是损失函数的总和的平均,有没有这个平均其实不会影响最后的参数的求解结果。

所以任务就是寻找一组最优参数 θ 0 , θ 1 , . . . θ n \theta_0, \theta_1, ...\theta_n θ0,θ1,...θn ,使得代价函数最小,即:寻找一组能使得预测值与真实值最为接近的参数。

我们先直接给出他的损失函数:

C o s t ( h θ ( x ) , y ) = − y × l o g ( h θ ( x ) ) − ( 1 − y ) × l o g ( 1 − h θ ( x ) ) Cost\left( {h_\theta}\left( x \right),y \right)=-y\times log\left( {h_\theta}\left( x \right) \right)-(1-y)\times log\left( 1-{h_\theta}\left( x \right) \right) Cost(hθ(x),y)=y×log(hθ(x))(1y)×log(1hθ(x))

其中: y y y 为样本的真实标签, h θ ( x ) h_\theta(x) hθ(x) 为预测的标签值。
其可以拆分为:
i f : y = 1 if :y=1 if:y=1 C o s t ( h θ ( x ) , y ) = − l o g ( h θ ( x ) ) Cost\left( {h_\theta}\left( x \right),y \right)=-log\left( {h_\theta}\left( x \right) \right) Cost(hθ(x),y)=log(hθ(x))
i f : y = 0 if :y=0 if:y=0 C o s t ( h θ ( x ) , y ) = − l o g ( 1 − h θ ( x ) ) Cost\left( {h_\theta}\left( x \right),y \right)=-log\left( 1-{h_\theta}\left( x \right) \right) Cost(hθ(x),y)=log(1hθ(x))

这样构建的 C o s t ( h θ ( x ) , y ) Cost\left( {h_\theta}\left( x \right),y \right) Cost(hθ(x),y)函数的特点是:当实际的 y = 1 y=1 y=1 h θ ( x ) {h_\theta}\left( x \right) hθ(x)也为 1 时误差为 0,当 y = 1 y=1 y=1 h θ ( x ) {h_\theta}\left( x \right) hθ(x)不为1时误差随着 h θ ( x ) {h_\theta}\left( x \right) hθ(x)变小而变大;当实际的 y = 0 y=0 y=0 h θ ( x ) {h_\theta}\left( x \right) hθ(x)也为 0 时代价为 0,当 y = 0 y=0 y=0 h θ ( x ) {h_\theta}\left( x \right) hθ(x)不为 0时误差随着 h θ ( x ) {h_\theta}\left( x \right) hθ(x)的变大而变大。

将构建的
C o s t ( h θ ( x ) , y ) = − y × l o g ( h θ ( x ) ) − ( 1 − y ) × l o g ( 1 − h θ ( x ) ) Cost\left( {h_\theta}\left( x \right),y \right)=-y\times log\left( {h_\theta}\left( x \right) \right)-(1-y)\times log\left( 1-{h_\theta}\left( x \right) \right) Cost(hθ(x),y)=y×log(hθ(x))(1y)×log(1hθ(x))
带入代价函数得到:
J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) J\left( \theta \right) = \frac{1}{m}\sum\limits_{i=1}^{m}{Cost{\left( {h_\theta}\left( \mathop{x}^{\left( i \right)} \right),\mathop{y}^{\left( i \right)} \right)}} J(θ)=m1i=1mCost(hθ(x(i)),y(i))

J ( θ ) = 1 m ∑ i = 1 m [ − y ( i ) log ⁡ ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]} J(θ)=m1i=1m[y(i)log(hθ(x(i)))(1y(i))log(1hθ(x(i)))]
即:
J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] J\left( \theta \right)=-\frac{1}{m}\sum\limits_{i=1}^{m}{[{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]} J(θ)=m1i=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]
其中: i i i为样本索引, ( i = 1 , 2 , . . . m ) (i=1,2,...m) (i=1,2,...m)
Python代码实现:

import numpy as np
    
def cost(theta, X, y):
    
  theta = np.matrix(theta)
  X = np.matrix(X)
  y = np.matrix(y)
  first = np.multiply(-y, np.log(sigmoid(X* theta.T)))
  second = np.multiply((1 - y), np.log(1 - sigmoid(X* theta.T)))
  return np.sum(first - second) / (len(X))

在得到这样一个代价函数以后,我们便可以用梯度下降算法来求得能使代价函数最小的参数了。算法为:

Repeat { θ j : = θ j − α ∂ ∂ θ j J ( θ ) \theta_j := \theta_j - \alpha \frac{\partial}{\partial\theta_j} J(\theta) θj:=θjαθjJ(θ) (simultaneously update all ) }

求导后得到:

Repeat { θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j := \theta_j - \alpha \frac{1}{m}\sum\limits_{i=1}^{m}{{\left( {h_\theta}\left( \mathop{x}^{\left( i \right)} \right)-\mathop{y}^{\left( i \right)} \right)}}\mathop{x}_{j}^{(i)} θj:=θjαm1i=1m(hθ(x(i))y(i))xj(i) (simultaneously update all ) }
其中: j j j表示样本的特征索引, x j x_j xj表示样本的样本的第 j j j个特征, θ j \theta_j θj表示样本第 j j j个特征的权重系数, j = 1 , 2 , . . . n j=1,2,...n j=1,2,...n

最后为了避免过拟合,还可以在添加正则化,即:在代价函数中添加惩罚项,对于添加了正则项的代价函数,在求导时,也需要对正则项进行求导。

3.总结

所以总的一个过程就是:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值