机器学习(二)
线性回归与Logistic回归
线性回归与Logistic回归不是一类问题!光看名字,很容易让人误导是一类算法,其实不然。说到这两个的区别,线性回归是用来解决回归问题,而Logistic回归是用来解决二分类问题。一个回归,一个分类,而这俩也是机器学习主要解决的两大类型。其中回归可以理解为输出为连续的,比如找到一条线或者曲线(二维空间)来预测房价;分类问题则是输出为有限个离散数据,比如将图片分为猫,狗,鸟三类。(回归与分类如图所示)
回归
分类
由此可见,线性回归与Logistic分类完全是来解决不同类型问的,不可混为一谈。
接下来就这两个算法依次来介绍。
1.线性回归
首先确定线性回归是用来解决回归问题的,回归问题本质就是找到一个函数能尽可能的拟合所有样本点,以2维空间为例(因为好画图),就是要找到一条线要尽可能的通过所有样本点,当这条线为一条直线时(即线性),就称为线性回归。
三维空间中就是找到一个平面拟合样本点
注意,这里的x1与x2是同一个样本的不同特征,h(x)即是我们尝试要找的平面,也就是预测值。既然有了预测值,那用什么来评估我们找的这个平面合不合理呢?这就引出了线性回归的损失函数:最小二乘法。
其中m为样本个数,损失函数的直观解释就是分别将所有的样本点通过h(x)得到我们的预测值,用预测值与真实值的差的平方作为评价标准,加1/2是为了求导后好算,求导是为了用梯度下降法。当h(x)越接近真实值y,这个损失函数J的值就越小。
其实关于为什么要用最小二乘法当做损失函数,是因为假设样本都服从高斯分布(因为在无任何条件下,高斯分布是最符合客观规律的一种分布),则利用最大似然估计法,可得如下结果:
此时去掉常数项,就变成了最小二乘法:
这也是为什么要用最小二乘法作损失函数的原因,由高斯分布利用最大似然函数最后推导的嘛。
然而当我们只用上面的公式,很容易造成过拟合的风险,所以在这个损失函数的基础上加上L2正则化防止过拟合,关于过拟合以及L2正则化等相关的内容可参考我另一篇文章:常用损失函数与参数优化。 这时新的目标函数为:
接下来我们要做的就是最小化这个目标函数,利用经典的梯度下降法更新参数:
其中:
当然一般做法是利用批量梯度下降法,原理是一次性用batch_size个样本一起来更新参数。
所以总的来说,线性回归就是用最小二乘法加上L2正则化(L1也行)作为损失函数,利用梯度下降法进行更新参数的一种算法。至于非线性回归,则加上一个非线性激励即可,有点像神经网络中神经元的原理。
2.Logistic回归
首先明确的是Logistic回归是用于二分类问题的。有时候线性回归也可以用做二分类,如图:
线性回归其实也不算真正意义上的分类,只是上图中数据比较有特点,用这条直线拟合的时候刚还在两类中间,就像分类一样。可是当出现如下图数据时:
如果用线性回归做分类(紫色线),为了拟合右下角的数据(红色圈出来的),紫色线偏差很多。而用Logistic回归就不会出现这种问题(绿色线)。
接下来讲Logistic回归的。首先Logistic函数为:
这也就是经典的sigmoid函数,其函数图像为:
说白了其实相当于用样本构建一个线性函数,然后添加一个sigmoid函数的激励,让其成为一个非线性函数,跟神经网络的的神经元原理相似。那为什么Logistic回归中要用sigmoid函数呢?那是因为原问题是二分类问题,分类结果可以看做是0,1。我们最终需要知道样本属于1类的概率是多少,既然是概率,那就需要一个函数将结果压缩至0~1的范围(概率定义),而sigmoid函数就具有这样的好处,在我的深度学习类文章里有更详细的提及。
既然有了预测值概率,那就需要一个损失函数来评估我们的模型。先甩结论,用的是交叉熵当做损失函数(这是我之前博客里写的):
接着我们来推导损失函数交叉熵的来源。想想伯努利(Bernoulli)分布,也就是俗称的0-1分布:
h(x)为我们预测等于1的概率。我们可以用一个式子来表示任意样本的概率:
觉得纳闷的分别取y = 1 和 y = 0(因为是二分类,y只取0,1两个数)试试就知道了。
既然有了概率,我们就用似然函数来表示所有样本的概率:
取对数后得到:
看出来这是什么了吗?还没有?试试y = 1 或者 y = 0带进去,假如带y = 1:
别忘了这是对数似然函数噢,我们要取这个函数的最大值,加个负号就变成求最小值,就变成了交叉熵的定义了啊!
其中h(x)就是pred预测值。由此可以看出用交叉熵作为损失函数是用了最大似然估计思想推导出来的结果。
有了损失函数接下来就好办了,老套路,利用梯度下降法来更新参数:
以上就是线性回归与Logistic回归的内容~