机器学习:Logstic回归

2022-09-19 10:40:24 浏览数 (1)

一、分类

如果某个问题的解可以分为几个离散的值,则称这种问题为分类问题。如果只有0或1两种解,则称为一个二元分类问题,其中0称为负类,1称为正类,由于二元分类问题比较简单,下面都以二元分类问题为例,最后会介绍多元分类问题。分类问题如果采取线性回归的方式去拟合,会得到很差的结果。如下图,假设我们按照

h_{theta}(x)

的值来分类,小于0.5的为负类,否则为正类。此时,如果训练样本中有一个很远的正类(最右边的×),那么可能的拟合结果为蓝色的线,这样会有很多样本被错误分类。且线性回归的假设函数

h_{theta}(x)

取值可能大于1或者小于0,与分类的离散型取值不符合。

二、假设函数

在线性回归中,我们的假设函数为

h_{theta}(x) = theta^Tx

,为了使得假设函数的取值介于

[0,1]

之间,我们设假设函数为

h_{theta}(x) = theta^Tx

,其中

g(z) = frac{1}{1 e^{-z}}

g(z)

称为Logistic函数,也称为Sigmoid函数,其函数图像如下,无穷大时分别趋近于1和0。于是,

h_{theta}(x) = frac{1}{1 e^{-theta^Tx}}

,称这种假设函数对应的回归为Logistic回归。

现在来解释一下,Logistic回归中,假设函数的含义:

h_{theta}(x) = P(y=1|x;theta)

,即在模型参数

theta

下,

x

成立的条件下,

y

取值为x 的概率。

三、决策边界

已经有了假设函数了,现在考虑什么时候将某个样本预测为正类,什么时候预测为负类。由于

h_{theta}(x)

表示在模型参数

theta

下,

x

成立的条件下,

y

取值为x 的概率,所以,显而易见地,当

h_{theta}(x)ge0.5

时,我们预测为正类,否则为负类,当然

h_{theta}(x) = 0.5

时归为正类和负类都可以,这里归为正类,观察logistic函数图像,我们可以得知,当

z = theta^Txge0

g(z) ge 0.5

如下图所示的训练集,假设我们用

theta^T = [-3,1,1]

进行拟合,我们可以发现如果预测

y = 1

,则

-3 x_1 x_2 ge0

,画出这条线(图中红色的直线),则这条线上方的都被预测为正类,下方的都被预测为负类,这条线就被称为决策边界,决策边界属于假设函数的一个属性,只由模型参数决定,与数据集无关。

类似于线性回归中,可以在特征中添加额外的高次多项式项达到拟合非线性数据的目的,在Logistic回归中,也有这样的操作:

四、代价函数

如果使用线性回归中的代价函数,由于假设函数的改变,会使得代价函数变成一个非凸函数(如下图左,有很多局部最优解),这样就不能用梯度下降法了,所以我们需要设法将函数转变为一个凸函数。

定义:

Cost(h_{theta}(x),y) = left{ begin{aligned} -log(h_{theta}(x)) if y = 1\ -log(1-h_{theta}(x)) if y = 0 end{aligned} right.

,其函数图形(y=1时)如下:

通过图像我们可以发现一下两个性质:

  • 如果预测值为1的概率为100%,且实际值为1时,代价为0
  • 如果预测值为1的概率小于100%,且实际值为1时,预测的概率越小,代价越大,如果概率为0则代价变成无穷大。

y = 0的图像类似,镜像翻转就是,不做分析。

五、简化代价函数和梯度下降

对于上面的代价函数,我们可以将其合并成一个式子:

Cost(h_{theta}(x,y)) = -ylog(h_{theta}(x)) - (1-y)log(1-h_{theta}(x))

,于是

J_{theta} = -frac{1}{m}[displaystylesum_{i=1}^m y^{(i)}log(h_{theta}(x^{(i)})) (1-y^{(i)})log(1-h_{theta}(x^{(i)}))]

​,我们的目的就是找到一组解最小化

J_{theta}

​ 。

根据梯度下降法的思想,对于

theta_j

​ ,我们每一次将其更新为

theta_j := theta_j - alpha frac{partial}{partialtheta_j}J(theta)

​,代入

J_{theta}

​ ,对于每个

theta_j

​ 求偏导数,得到:

theta_j :=theta_j - alphafrac{1}{m}displaystylesum_{i=1}^m(h_{theta}(x^{(i)}) - y^{(i)})x_j^{(i)}

​,这个式子和线性回归中的梯度下降是一样的,区别在于,这里的

h_{theta}(x) = frac{1}{1 e^{-theta^Tx}}

​​,同样这里的更新也是需要同时更新的,可以用向量化一步搞定。

六、高级优化

可以使用Matlab库中自带的优化版梯度下降进行计算,函数入下

七、多元分类问题

介绍完二元分类问题,现在来看多元分类问题。

假设我们的训练集中有三种物品,我们可以训练三个分类器如右图,分别将其中的一类当正类,其他都当负类,然后进行一次二元分类。计算完三个分类器后,在预测时,向三个分类器中输入一个数据,将会分别返回三个概率,选择概率最大的那个当做预测类别。

八、正则化

8.1 过拟合问题

还是以房价预测为例,如果用线性函数拟合,会出现如上图左的情况,发生欠拟合、高偏差;如果使用更高阶的函数,图像可以非常好的拟合数据(上图右),但是很明显这并不符合生活常识,称之为过拟合、高方差。即,当出现太多的属性时,训练出的假设可能非常好的训练集,但是不能很好的预测新样本数据,即不能很好的泛化新数据。

对于Logistic 回归 ,也会出现过拟合的现象:

解决方法:

  1. 减少属性的数量。
    • 手动选择需要保留的属性
    • 模型选择算法
  2. 正则化。

8.2 正则化的代价函数

如上图,如果采用高阶函数拟合数据会发生过拟合的问题,正则化的思路时将不重要的属性加入一定的惩罚,如下面的式子所示,如果属性3和属性4不重要,则在代价函数后面加上

1000theta_3^2 1000theta_4^2

这两项,那么在训练的时候,为了使得代价函数变小,那么

theta_3

theta_4

的值就会变得很小,这样最终的函数就会变得平滑,趋近于一个二次函数。

如果不知道如何选取属性,可以将所有属性都加上惩罚,则代价函数入下:

J(theta)=frac{1}{2m}[displaystylesum_{i=1}^m(h_{theta}(x^{(i)}) - y^{(i)})^2 lambdadisplaystylesum_{i=1}^mtheta_j^2]

,其中

lambda

称为正则化参数。当然,如果

lambda

​ 过大,会使得函数图形最后变成一条直线,出现欠拟合的问题。注意一般情况下,

theta_0

是不加惩罚的,因为这是偏置参数。

8.3 线性回归的正则化

8.3.1 梯度下降法

就是将代价函数 :

J(theta)=frac{1}{2m}[displaystylesum_{i=1}^m(h_{theta}(x^{(i)}) - y^{(i)})^2 lambdadisplaystylesum_{i=1}^mtheta_j^2]

分别求偏导,得到每次模型参数的更新值。

8.3.2 正规方程法

同时,当

lambda > 0

时,保证矩阵可逆,一定程度上也解决了矩阵不可逆的情况。

8.4 Logistic回归的正则化

8.4.1 梯度下降

Jleft( theta right)=frac{1}{m}sumlimits_{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)]} frac{lambda }{2m}sumlimits_{j=1}^{n}{theta _{j}^{2}}

求导。

8.4.2 高级优化函数

0 人点赞