机器学习笔记(4)—逻辑回归(Logistic Regression)

news2024/12/25 23:43:33

文章目录

  • 逻辑回归(Logistic Regression)
    • 分类问题
    • 假说表示
    • 判定边界
    • 代价函数
    • 简化的成本函数和梯度下降
    • 多类别分类:一对多

逻辑回归(Logistic Regression)

分类问题

分类问题中,我们要预测的变量 y y y是一个离散值,而逻辑回归算法,通常运用于分类问题中的二元问题,也就是我们常说的二分类问题

分类问题,正如它的名字,我们尝试用算法来预测某一个结果是否属于某一类(True or False)or (yes or no),比如判断一封电子邮件是否是垃圾邮件,一次交易中是否存在欺诈,区别肿瘤是良性还是恶性,etc,都可以成为是分类问题。

而所谓的“二分类问题”,意味着在结果预测中,可供分辨的类别只有两种,是或者不是。

我们将因变 x x x可能属于的这两个类分别称为负向类(Negative class)和正向类(Positive class),则因变量 y ∈ 0 , 1 y\in{0,1\\} y0,1,其中0代表负向类,1代表正向类。
在这里插入图片描述

如果我们要用一个线性回归算法来解决分类问题,对于分类,因变量 y y y取值0或者1,但如果你使用的是线性回归,那么假设函数的输出值可能远大于1,或者远小于0,即便所有训练样本的标签 y y y都等于0或者1,尽管我们知道标签应该取值0或者1,但如果算法得到的值远大于1或者远小于0,就会感觉到奇怪。

此时,逻辑回归算法解决了这个问题,它将输出值定义在了0-1之间。

逻辑回归算法实际上是一种分类算法。也是二分类中常用的方法。

假说表示

回顾一开始我们使用的癌症分类问题,我们可以使用线性回归的方法拟合出一条直线:
在这里插入图片描述
而根据二分类的要求,我们需要输出0或1,我们可以这样分类:
h θ ( x ) > = 0.5 {h_\theta}\left( x \right)>=0.5 hθ(x)>=0.5时,预测 y = 1 y=1 y=1

h θ ( x ) < 0.5 {h_\theta}\left( x \right)<0.5 hθ(x)<0.5时,预测 y = 0 y=0 y=0
对于这种分布较为均匀的数据,使用中值作为阈值可以很好的完成分类任务,但是如果直线的斜率再高低一些,线性回归模型预测的数值超过了[0,1],在使用0.5作为阈值可能就不合适了。

在这里插入图片描述
所以,我们引入了逻辑回归,该模型的输出变量范围始终在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))

该函数的图像为:
在这里插入图片描述
合起来,我们得到逻辑回归模型的假设:

对模型的理解: g ( z ) = 1 1 + e − z g\left( z \right)=\frac{1}{1+{{e}^{-z}}} g(z)=1+ez1

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=1∣x;θ)
例如,如果对于给定的 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。

判定边界

在具有两个类的统计分类问题中,判定边界或判定表面是超曲面,其将基础向量空间划分为两个集合,每个集合一个集合。 这就是决策边界(decision boundary)
分类器将决策边界一侧的所有点分类为属于一个类,而将另一侧的所有点分类为属于另一个类。
在这里插入图片描述
在逻辑回归中,我们预测:

h θ ( x ) > = 0.5 {h_\theta}\left( x \right)>=0.5 hθ(x)>=0.5时,预测 y = 1 y=1 y=1

h θ ( x ) < 0.5 {h_\theta}\left( x \right)<0.5 hθ(x)<0.5时,预测 y = 0 y=0 y=0

根据上面绘制出的 S 形函数图像,我们知道当

z = 0 z=0 z=0 g ( z ) = 0.5 g(z)=0.5 g(z)=0.5

z > 0 z>0 z>0 g ( z ) > 0.5 g(z)>0.5 g(z)>0.5

z < 0 z<0 z<0 g ( z ) < 0.5 g(z)<0.5 g(z)<0.5

z = θ T x z={\theta^{T}}x z=θTx ,即:
θ T x > = 0 {\theta^{T}}x>=0 θTx>=0 时,预测 y = 1 y=1 y=1
θ T x < 0 {\theta^{T}}x<0 θTx<0 时,预测 y = 0 y=0 y=0

假设我们现在有一个模型:
在这里插入图片描述
并且参数 θ \theta θ是向量[-3 1 1],则当 − 3 + x 1 + x 2 ≥ 0 -3+{x_1}+{x_2} \geq 0 3+x1+x20,即 x 1 + x 2 ≥ 3 {x_1}+{x_2} \geq 3 x1+x23时,模型将预测 y = 1 y=1 y=1
我们可以绘制直线 x 1 + x 2 = 3 {x_1}+{x_2} = 3 x1+x2=3,这条线便是我们模型的分界线,将预测为1的区域和预测为 0的区域分隔开。
在这里插入图片描述

又比如,我们的数据分布呈现这样的情况:
在这里插入图片描述
因为需要用曲线才能分隔 y = 0 y=0 y=0 的区域和 y = 1 y=1 y=1 的区域,我们需要二次方特征: h θ ( x ) = g ( θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 1 2 + θ 4 x 2 2 ) {h_\theta}\left( x \right)=g\left( {\theta_0}+{\theta_1}{x_1}+{\theta_{2}}{x_{2}}+{\theta_{3}}x_{1}^{2}+{\theta_{4}}x_{2}^{2} \right) hθ(x)=g(θ0+θ1x1+θ2x2+θ3x12+θ4x22)是[-1 0 0 1 1],则我们得到的判定边界恰好是圆点在原点且半径为1的圆形。

我们可以用非常复杂的模型来适应非常复杂形状的判定边界。

代价函数

我们要了解如何拟合逻辑回归模型的参数 θ \theta θ,要定义用来拟合参数的优化目标或者叫代价函数,这便是监督学习问题中的逻辑回归模型的拟合问题。
在这里插入图片描述
对于线性回归模型,我们定义的代价函数是所有模型误差的平方和。理论上来说,我们也可以对逻辑回归模型沿用这个定义,但是问题在于,当我们将 h θ ( x ) = 1 1 + e − θ T x {h_\theta}\left( x \right)=\frac{1}{1+{e^{-\theta^{T}x}}} hθ(x)=1+eθTx1带入到这样定义了的代价函数中时,我们得到的代价函数将是一个非凸函数(non-convexfunction)。
在这里插入图片描述这意味着我们的代价函数有许多局部最小值,这将影响梯度下降算法寻找全局最小值。

线性回归的代价函数为: J ( θ ) = 1 m ∑ i = 1 m 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{\frac{1}{2}{{\left( {h_\theta}\left({x}^{\left( i \right)} \right)-{y}^{\left( i \right)} \right)}^{2}}} J(θ)=m1i=1m21(hθ(x(i))y(i))2
我们重新定义逻辑回归的代价函数为: 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( {x}^{\left( i \right)} \right),{y}^{\left( i \right)} \right)} J(θ)=m1i=1mCost(hθ(x(i)),y(i)),其中
在这里插入图片描述

h θ ( x ) {h_\theta}\left( x \right) hθ(x) C o s t ( h θ ( x ) , y ) Cost\left( {h_\theta}\left( x \right),y \right) Cost(hθ(x),y)之间的关系如下图所示:
在这里插入图片描述
这样构建的 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 ) Cost\left( {h_\theta}\left( x \right),y \right) Cost(hθ(x),y)简化如下:
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 [ − 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)))]
用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(\theta) J(θ)会是一个凸函数,并且没有局部最优值。

推导过程:

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)))]
考虑:
h θ ( x ( i ) ) = 1 1 + e − θ T x ( i ) {h_\theta}\left( {{x}^{(i)}} \right)=\frac{1}{1+{{e}^{-{\theta^T}{{x}^{(i)}}}}} hθ(x(i))=1+eθTx(i)1
则:
y ( i ) log ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) {{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) y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))
= y ( i ) log ⁡ ( 1 1 + e − θ T x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − 1 1 + e − θ T x ( i ) ) ={{y}^{(i)}}\log \left( \frac{1}{1+{{e}^{-{\theta^T}{{x}^{(i)}}}}} \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-\frac{1}{1+{{e}^{-{\theta^T}{{x}^{(i)}}}}} \right) =y(i)log(1+eθTx(i)1)+(1y(i))log(11+eθTx(i)1)
= − y ( i ) log ⁡ ( 1 + e − θ T x ( i ) ) − ( 1 − y ( i ) ) log ⁡ ( 1 + e θ T x ( i ) ) =-{{y}^{(i)}}\log \left( 1+{{e}^{-{\theta^T}{{x}^{(i)}}}} \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1+{{e}^{{\theta^T}{{x}^{(i)}}}} \right) =y(i)log(1+eθTx(i))(1y(i))log(1+eθTx(i))

所以:
∂ ∂ θ j J ( θ ) = ∂ ∂ θ j [ − 1 m ∑ i = 1 m [ − y ( i ) log ⁡ ( 1 + e − θ T x ( i ) ) − ( 1 − y ( i ) ) log ⁡ ( 1 + e θ T x ( i ) ) ] ] \frac{\partial }{\partial {\theta_{j}}}J\left( \theta \right)=\frac{\partial }{\partial {\theta_{j}}}[-\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\log \left( 1+{{e}^{-{\theta^{T}}{{x}^{(i)}}}} \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1+{{e}^{{\theta^{T}}{{x}^{(i)}}}} \right)]}] θjJ(θ)=θj[m1i=1m[y(i)log(1+eθTx(i))(1y(i))log(1+eθTx(i))]]
= − 1 m ∑ i = 1 m [ − y ( i ) − x j ( i ) e − θ T x ( i ) 1 + e − θ T x ( i ) − ( 1 − y ( i ) ) x j ( i ) e θ T x ( i ) 1 + e θ T x ( i ) ] =-\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\frac{-x_{j}^{(i)}{{e}^{-{\theta^{T}}{{x}^{(i)}}}}}{1+{{e}^{-{\theta^{T}}{{x}^{(i)}}}}}-\left( 1-{{y}^{(i)}} \right)\frac{x_j^{(i)}{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}}] =m1i=1m[y(i)1+eθTx(i)xj(i)eθTx(i)(1y(i))1+eθTx(i)xj(i)eθTx(i)]
= − 1 m ∑ i = 1 m y ( i ) x j ( i ) 1 + e θ T x ( i ) − ( 1 − y ( i ) ) x j ( i ) e θ T x ( i ) 1 + e θ T x ( i ) ] =-\frac{1}{m}\sum\limits_{i=1}^{m}{{y}^{(i)}}\frac{x_j^{(i)}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}-\left( 1-{{y}^{(i)}} \right)\frac{x_j^{(i)}{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}] =m1i=1my(i)1+eθTx(i)xj(i)(1y(i))1+eθTx(i)xj(i)eθTx(i)]
= − 1 m ∑ i = 1 m y ( i ) x j ( i ) − x j ( i ) e θ T x ( i ) + y ( i ) x j ( i ) e θ T x ( i ) 1 + e θ T x ( i ) =-\frac{1}{m}\sum\limits_{i=1}^{m}{\frac{{{y}^{(i)}}x_j^{(i)}-x_j^{(i)}{{e}^{{\theta^T}{{x}^{(i)}}}}+{{y}^{(i)}}x_j^{(i)}{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}} =m1i=1m1+eθTx(i)y(i)xj(i)xj(i)eθTx(i)+y(i)xj(i)eθTx(i)
= − 1 m ∑ i = 1 m y ( i ) ( 1 + e θ T x ( i ) ) − e θ T x ( i ) 1 + e θ T x ( i ) x j ( i ) =-\frac{1}{m}\sum\limits_{i=1}^{m}{\frac{{{y}^{(i)}}\left( 1\text{+}{{e}^{{\theta^T}{{x}^{(i)}}}} \right)-{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}x_j^{(i)}} =m1i=1m1+eθTx(i)y(i)(1+eθTx(i))eθTx(i)xj(i)
= − 1 m ∑ i = 1 m ( y ( i ) − e θ T x ( i ) 1 + e θ T x ( i ) ) x j ( i ) =-\frac{1}{m}\sum\limits_{i=1}^{m}{({{y}^{(i)}}-\frac{{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}})x_j^{(i)}} =m1i=1m(y(i)1+eθTx(i)eθTx(i))xj(i)
= − 1 m ∑ i = 1 m ( y ( i ) − 1 1 + e − θ T x ( i ) ) x j ( i ) =-\frac{1}{m}\sum\limits_{i=1}^{m}{({{y}^{(i)}}-\frac{1}{1+{{e}^{-{\theta^T}{{x}^{(i)}}}}})x_j^{(i)}} =m1i=1m(y(i)1+eθTx(i)1)xj(i)
= − 1 m ∑ i = 1 m [ y ( i ) − h θ ( x ( i ) ) ] x j ( i ) =-\frac{1}{m}\sum\limits_{i=1}^{m}{[{{y}^{(i)}}-{h_\theta}\left( {{x}^{(i)}} \right)]x_j^{(i)}} =m1i=1m[y(i)hθ(x(i))]xj(i)
= 1 m ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] x j ( i ) =\frac{1}{m}\sum\limits_{i=1}^{m}{[{h_\theta}\left( {{x}^{(i)}} \right)-{{y}^{(i)}}]x_j^{(i)}} =m1i=1m[hθ(x(i))y(i)]xj(i)

注:虽然得到的梯度下降算法表面上看上去与线性回归的梯度下降算法一样,但是这里的 h θ ( x ) = g ( θ T X ) {h_\theta}\left( x \right)=g\left( {\theta^T}X \right) hθ(x)=g(θTX)与线性回归中不同,所以实际上是不一样的。另外,在运行梯度下降算法之前,进行特征缩放依旧是非常必要的。

简化的成本函数和梯度下降

逻辑回归的代价函数:

在这里插入图片描述

这个式子可以合并成:

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))
即,逻辑回归的代价函数:
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))
= − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] =-\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)]} =m1i=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]
根据这个代价函数,为了拟合出参数,该怎么做呢?我们要试图找尽量让 J ( θ ) J\left( \theta \right) J(θ) 取得最小值的参数$\theta $。
min ⁡ θ J ( θ ) \underset{\theta}{\min }J\left( \theta \right) θminJ(θ)
所以我们想要尽量减小这一项,这将我们将得到某个参数$\theta $。
如果我们给出一个新的样本,假如某个特征 x x x,我们可以用拟合训练样本的参数$\theta ,来输出对假设的预测。另外,我们假设的输出,实际上就是这个概率值: ,来输出对假设的预测。 另外,我们假设的输出,实际上就是这个概率值: ,来输出对假设的预测。另外,我们假设的输出,实际上就是这个概率值:p(y=1|x;\theta)$,就是关于 x x x以$\theta 为参数, 为参数, 为参数,y=1$ 的概率,你可以认为我们的假设就是估计 y = 1 y=1 y=1 的概率,所以,接下来就是弄清楚如何最大限度地最小化代价函数 J ( θ ) J\left( \theta \right) J(θ),作为一个关于$\theta 的函数,这样我们才能为训练集拟合出参数 的函数,这样我们才能为训练集拟合出参数 的函数,这样我们才能为训练集拟合出参数\theta $。

最小化代价函数的方法,是使用梯度下降法(gradient descent)。这是我们的代价函数:
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)))]

如果我们要最小化这个关于 θ \theta θ的函数值,这就是我们通常用的梯度下降法的模板。
在这里插入图片描述

我们要反复更新每个参数,用这个式子来更新,就是用它自己减去学习率 α \alpha α
乘以后面的微分项。求导后得到:

在这里插入图片描述

如果你计算一下的话,你会得到这个等式:
θ 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}{({h_\theta}({{x}^{(i)}})-{{y}^{(i)}}){x_{j}}^{(i)}} θj:=θjαm1i=1m(hθ(x(i))y(i))xj(i)
我把它写在这里,将后面这个式子,在 i = 1 i=1 i=1 m m m 上求和,其实就是预测误差乘以 x j ( i ) x_j^{(i)} xj(i) ,所以你把这个偏导数项 ∂ ∂ θ j J ( θ ) \frac{\partial }{\partial {\theta_j}}J\left( \theta \right) θjJ(θ)放回到原来式子这里,我们就可以将梯度下降算法写作如下形式:
θ 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}{({h_\theta}({{x}^{(i)}})-{{y}^{(i)}}){x_{j}}^{(i)}} θj:=θjαm1i=1m(hθ(x(i))y(i))xj(i)

所以,如果你有 n n n 个特征,也就是说:
在这里插入图片描述

,参数向量$\theta 包括 包括 包括{\theta_{0}}$ θ 1 {\theta_{1}} θ1 θ 2 {\theta_{2}} θ2 一直到 θ n {\theta_{n}} θn,那么你就需要用这个式子:

θ 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}{({h_\theta}({{x}^{(i)}})-{{y}^{(i)}}){{x}_{j}}^{(i)}} θj:=θjαm1i=1m(hθ(x(i))y(i))xj(i)来同时更新所有 θ \theta θ的值。

现在,如果你把这个更新规则和我们之前用在线性回归上的进行比较的话,你会惊讶地发现,这个式子正是我们用来做线性回归梯度下降的。

那么,线性回归和逻辑回归是同一个算法吗?要回答这个问题,我们要观察逻辑回归看看发生了哪些变化。实际上,假设的定义发生了变化。

对于线性回归假设函数:

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

而现在逻辑函数假设函数:

h θ ( x ) = 1 1 + e − θ T X {h_\theta}\left( x \right)=\frac{1}{1+{{e}^{-{\theta^T}X}}} hθ(x)=1+eθTX1

因此,即使更新参数的规则看起来基本相同,但由于假设的定义发生了变化,所以逻辑函数的梯度下降,跟线性回归的梯度下降实际上是两个完全不同的东西。

当我们在谈论线性回归的梯度下降法时,我们谈到了如何监控梯度下降法以确保其收敛,我通常也把同样的方法用在逻辑回归中,来监测梯度下降,以确保它正常收敛。

当使用梯度下降法来实现逻辑回归时,我们有这些不同的参数$\theta ,就是 ,就是 ,就是{\theta_{0}}$ θ 1 {\theta_{1}} θ1 θ 2 {\theta_{2}} θ2 一直到 θ n {\theta_{n}} θn,我们需要用这个表达式来更新这些参数。我们还可以使用 for循环来更新这些参数值,用 for i=1 to n,或者 for i=1 to n+1。当然,不用 for循环也是可以的,理想情况下,我们更提倡使用向量化的实现,可以把所有这些 n n n个参数同时更新。

我们之前在谈线性回归时讲到的特征缩放,看到了特征缩放是如何提高梯度下降的收敛速度的,这个特征缩放的方法,也适用于逻辑回归。
如果你的特征范围差距很大的话,那么应用特征缩放的方法,同样也可以让逻辑回归中,梯度下降收敛更快。

多类别分类:一对多

第一个例子:假如说你现在需要一个学习算法能自动地将邮件归类到不同的文件夹里,或者说可以自动地加上标签,那么,你也许需要一些不同的文件夹,或者不同的标签来完成这件事,来区分开来自工作的邮件、来自朋友的邮件、来自家人的邮件或者是有关兴趣爱好的邮件,那么,我们就有了这样一个分类问题:其类别有四个,分别用 y = 1 y=1 y=1 y = 2 y=2 y=2 y = 3 y=3 y=3 y = 4 y=4 y=4 来代表。

第二个例子是有关药物诊断的,如果一个病人因为鼻塞来到你的诊所,他可能并没有生病,用 y = 1 y=1 y=1 这个类别来代表;或者患了感冒,用 y = 2 y=2 y=2 来代表;或者得了流感用 y = 3 y=3 y=3来代表。

第三个例子:如果你正在做有关天气的机器学习分类问题,那么你可能想要区分哪些天是晴天、多云、雨天、或者下雪天,对上述所有的例子, y y y 可以取一个很小的数值,一个相对"谨慎"的数值,比如1 到3、1到4或者其它数值,以上说的都是多类分类问题,顺便一提的是,对于下标是0 1 2 3,还是 1 2 3 4 都不重要,我更喜欢将分类从 1 开始标而不是0,其实怎样标注都不会影响最后的结果。

在多分类问题中,结果的类型不止2个,我们的数据集看起来可能像:
在这里插入图片描述
在这里插入图片描述
我们用三角形表示 y = 1 y=1 y=1,方框表示 y = 2 y=2 y=2,叉叉表示 y = 3 y=3 y=3。我们下面要做的就是使用一个训练集,将其分成3个二元分类问题。

我们先从用三角形代表的类别1开始,实际上我们可以创建一个,新的"伪"训练集,类型2和类型3定为负类,类型1设定为正类,我们创建一个新的训练集,如下图所示的那样,我们要拟合出一个合适的分类器。

在这里插入图片描述
这里的三角形是正样本,而圆形代表负样本。可以这样想,设置三角形的值为1,圆形的值为0,下面我们来训练一个标准的逻辑回归分类器,这样我们就得到一个正边界。

为了能实现这样的转变,我们将多个类中的一个类标记为正向类( y = 1 y=1 y=1),然后将其他所有类都标记为负向类,这个模型记作 h θ ( 1 ) ( x ) h_\theta^{\left( 1 \right)}\left( x \right) hθ(1)(x)。接着,类似地第我们选择另一个类标记为正向类( y = 2 y=2 y=2),再将其它类都标记为负向类,将这个模型记作 h θ ( 2 ) ( x ) h_\theta^{\left( 2 \right)}\left( x \right) hθ(2)(x),依此类推。
最后我们得到一系列的模型简记为: h θ ( i ) ( x ) = p ( y = i ∣ x ; θ ) h_\theta^{\left( i \right)}\left( x \right)=p\left( y=i|x;\theta \right) hθ(i)(x)=p(y=ix;θ)其中: i = ( 1 , 2 , 3.... k ) i=\left( 1,2,3....k \right) i=(1,2,3....k)

最后,在我们需要做预测时,我们将所有的分类机都运行一遍,然后对每一个输入变量,都选择最高可能性的输出变量。

总之,我们已经把要做的做完了,现在要做的就是训练这个逻辑回归分类器: h θ ( i ) ( x ) h_\theta^{\left( i \right)}\left( x \right) hθ(i)(x), 其中 i i i 对应每一个可能的 y = i y=i y=i,最后,为了做出预测,我们给出输入一个新的 x x x 值,用这个做预测。我们要做的就是在我们三个分类器里面输入 x x x,然后我们选择一个让 h θ ( i ) ( x ) h_\theta^{\left( i \right)}\left( x \right) hθ(i)(x) 最大的 i i i,即 max ⁡ i   h θ ( i ) ( x ) \mathop{\max}\limits_i\,h_\theta^{\left( i \right)}\left( x \right) imaxhθ(i)(x)

知道了基本的挑选分类器的方法,选择出哪一个分类器是可信度最高效果最好的,那么就可认为得到一个正确的分类,无论 i i i值是多少,我们都有最高的概率值,我们预测 y y y就是那个值。这就是多类别分类问题,以及一对多的方法,通过这个小方法,你现在也可以将逻辑回归分类器用在多类分类的问题上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1547325.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文阅读笔记——Rethinking Pointer Reasoning in Symbolic Execution

文章目录 前言Rethinking Pointer Reasoning in Symbolic Execution12.1、基本情况概述12.2、摘要12.3、引言12.4、方法12.4.1、基本版本12.4.1.1、内存加载和存储12.4.1.2、状态合并 12.4.2、改进12.4.2.1、地址范围选择12.4.2.2、内存清理12.4.2.3、符号化的未初始化内存12.4…

RelayAttention:让大型语言模型更高效地处理长提示符

一、前言 虽然大型语言模型 (LLM) 近年来取得了非常显著的进展&#xff0c;也在各种自然语言处理任务中展现出强大的能力。然而&#xff0c;LLM 的在实际的应用落地层面也面临着一些实际挑战&#xff0c;其中之一就是效率和成本问题&#xff0c;导致了在垂直行业实际落地的应用…

网际协议 - IP

文章目录 目录 文章目录 前言 1 . 网际协议IP 1.1 网络层和数据链路层的关系 2. IP基础知识 2.1 什么是IP地址? 2.2 路由控制 3. IP地址基础知识 3.1 IP地址定义 3.2 IP地址组成 3.3 IP地址分类 3.4 子网掩码 IP地址分类导致浪费? 子网与子网掩码 3.5 CIDR与…

笔记本如何调节亮度?笔记本亮度调节方法

对于经常长时间面对笔记本电脑的小伙伴们来说&#xff0c;屏幕亮度过暗或者过亮&#xff0c;都会对眼睛造成伤害。那么&#xff0c;我们如何调节笔记本亮度至适中呢?下面为大家介绍3种简单的调节屏幕亮度的方法&#xff0c;一起来看看吧! 笔记本亮度调节方法一&#xff1a; 1、…

【MySQL】4.MySQL日志管理与数据库的备份和恢复

备份的目的只要是为了灾难恢复&#xff0c;备份还可以测试应用&#xff0c;回滚数据&#xff0c;修改和查询历史数据&#xff0c;审计等 日志在备份、恢复中起着重要作用 一、数据库备份的重要性 在生产环境中&#xff0c;数据的安全性至关重要 任何数据丢失都可能产生严重的…

关系型数据库mysql(7)sql高级语句

目录 一.MySQL常用查询 1.按关键字&#xff08;字段&#xff09;进行升降排序 按分数排序 &#xff08;默认为升序&#xff09; 按分数升序显示 按分数降序显示 根据条件进行排序&#xff08;加上where&#xff09; 根据多个字段进行排序 ​编辑 2.用或&#xff08;or&…

centos 7 安装磐维(PanWeiDB)数据库(单机)

前置环境准备 文件系统环境要求 文件系统环境所要求的扇区必须为512bytes&#xff0c;查看方法如下&#xff1a; [rootdevops-core-highapp3-b-32 ~]#df -h /apps/ [rootdevops-core-highapp3-b-32 ~]#ll /dev/mapper/vg--docker-lvapp [rootdevops-core-highapp3-b-32 ~]#f…

Apache ActiveMQ OpenWire 协议反序列化命令执行漏洞分析 CVE-2023-46604

Apache ActiveMQ 是美国阿帕奇&#xff08;Apache&#xff09;软件基金会所研发的一套开源的消息中间件&#xff0c;它支持Java消息服务、集群、Spring Framework等。 OpenWire协议在ActiveMQ中被用于多语言客户端与服务端通信。在Apache ActiveMQ 5.18.2版本及以前&#xff0…

小程序富文本图片宽度自适应

解决这个问题 创建一个util.js文件,图片的最大宽度设置为100%就行了 function formatRichText(html) {let newContent html.replace(/\<img/gi, <img style"max-width:100%;height:auto;display:block;");return newContent; }module.exports {formatRichT…

2024-03-26 Android8.1 px30 WI-FI 模块rtl8821cu调试记录

一、kernel 驱动&#xff0c;我这里使用v5.8.1.2_35530.20191025_COEX20191014-4141这个版本&#xff0c;下载这个版本的驱动可以参考下面的文章。 2021-04-12 RK3288 Android7.1 USB wifi bluetooth 模块RTL8821CU 调试记录_rk平台rtl8821cu蓝牙调试-CSDN博客 二、Makefile文…

基于nodejs+vue考试信息报名系统python-flask-django-php

本文拟采用nodejs技术和express 搭建系统框架&#xff0c;后台使用MySQL数据库进行信息管理&#xff0c;设计开发的考试信息报名系统。通过调研和分析&#xff0c;系统拥有管理员、学生和教师三个角色&#xff0c;主要具备登录注册、个人信息修改、对系统首页、个人中心、学生管…

在项目中数据库如何优化?【MySQL主从复制(创建一个从节点复制备份数据)】【数据库读写分离ShardingJDBC(主库写,从库读)】

MySQL主从复制 MySQL主从复制介绍MySQL复制过程分成三步&#xff1a;1). MySQL master 将数据变更写入二进制日志( binary log)2). slave将master的binary log拷贝到它的中继日志&#xff08;relay log&#xff09;3). slave重做中继日志中的事件&#xff0c;将数据变更反映它自…

JS等比压缩图片方法

AI给出来的答案&#xff0c;AI真的能改变世界&#xff0c;以后程序员这个职业真的有可能不存在了。 function compressImage(image, callback) {// 创建一个 canvas 元素const canvas document.createElement(canvas);canvas.width 48;canvas.height 48;// 获取 canvas 的绘…

【学海拾贝】| 关于Python的 PEP 484规则了解:类型提示,函数注解

在实际的工厂在实际的工程代码的开发中&#xff0c;常常可以碰到这种情况 上网查了之后发现这是PEP484规则~ 文章目录 1 Type Hints for Variables&#xff08;变量在这里插入图片描述2 Function Annotations&#xff08;函数注解&#xff09;3 Type Checking Tools&#xff08…

【比特币】比特币的奥秘、禁令的深层逻辑与风云变幻

导语&#xff1a; 比特币(Bitcoin)&#xff0c;这个充满神秘色彩的数字货币&#xff0c;自诞生以来便成为各界瞩目的焦点。它背后所蕴含的Mining机制、禁令背后的深层逻辑以及市场的风云变幻&#xff0c;都让人欲罢不能。今天&#xff0c;我们将深入挖掘比特币的每一个角落&…

视觉图像处理与FPGA实现第七次作业——生成512深度、8位宽度的双端口存储器IP,并分析IP包资料构成

一、生成IP 打开Vivado&#xff0c;点击IP Catalog&#xff0c;搜索memory&#xff0c;双击对应IP核 调整参数为——512深度、8位宽度&#xff0c;双端口&#xff0c;然后一直默认点击OK 二、分析IP构成 查看IP细节&#xff0c;查看设计资源和仿真资源 双击打开文件 设计文件…

代码随想录 图论-并查集

代码随想录 (programmercarl.com) 寻找图中是否存在路径这道题中的类可看做并查集的标准类 目录 1971.寻找图中是否存在路径 684.冗余连接 685.冗余连接II 1971.寻找图中是否存在路径 1971. 寻找图中是否存在路径 已解答 简单 相关标签 相关企业 有一个具有 n 个顶…

NOIP,CSP-J,CSP-S——输入输出进阶

一、输入scanf 格式&#xff1a; int a,b; scanf("%d%d", &a, &b) 类似于 int a,b; cin>>a,b; 双引号里面的两个“%d”表示要输入两个int类型的变量的占位符。然后是要输入的变量名&#xff0c;前面要加“&”&#xff0c;如果有多个变量则用…

SystemUI修改系统状态栏右边的ICON背景颜色

文件在 status_bar.xml 。 如下&#xff1a; <com.android.keyguard.AlphaOptimizedLinearLayout android:id"id/system_icon_area"android:layout_width"0dp"android:layout_height"match_parent"android:background"#ff0000"andr…

我的 Android 性能书上架了!内附书籍介绍

大家好&#xff0c;我是拭心。 很高兴地向大家宣布&#xff0c;我的新书《Android 性能优化入门与实战》上架了&#xff01; 点击下面的小程序进行购买&#xff1a; 封面介绍 这本书的封面来自之前的投票文章 # 投票啦&#xff01;最新安卓进阶书籍封面由你来定&#xff0c;从四…