逻辑回归学习笔记
1 主要内容
由于上周学习了线性回归的内容,因此这次回顾我想从两者之间的不同以及新学习到的通用知识来进行。
2 应对问题不同
在所研究的问题上,线性回归要做的是得出拟合度高且具有泛型的回归线,最终能对给定特征值做出预测;逻辑回归要做的是分类,要做的是得出拟合度高且具有泛型的判定边界,然后通过给定的特征值,判定该特征值下的分类情况。
3假设函数不同
如果继续按照线性回归的假设函数,那么判断分类的阈值将会很不准确,因此逻辑回归的假设函数应做修改。下面以sigmoid为例:
根据假设函数的特性,输入变量,然后根据得出的参数计算出输出变量等于1的可能性。例如输出变量为0.7,则说明有百分之70的概率为正向类(1),相应的就有百分之30的概率为负向类(0)。这里sigmoid函数并不唯一,只是其的函数特性很适合作为逻辑回归的分类器。
4代价函数不同
这个时候如果代价函数继续按照之前线性回归的方式的话,由于假设函数本身已经发生了变化,因此最终得到的代价函数会是一个非凸函数,这样的函数会有很多的极点,显然是不利于梯度下降的进行的。因此将函数转变成右图所示,它的特点是当y等于1而假设函数也等于1的时候,偏差为0,但如果此时假设函数为0的话偏差就为无限大,同时假设函数离1越近偏差也就越小。当y等于0时同理。
5梯度下降实质不同
这里对逻辑回归的代价函数求其关于参数的偏导后,虽然得到的结果与线性回归的结果相同,但是其本质是不同的原因便是此时的假设函数发生了质的变化。
6通用知识
6.1高级优化
这里python的scipy库里提供了高级优化的方法optimize.minimize查看其相关说明:
minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None,bounds=None, constraints=(), tol=None, callback=None, options=None)
其中最主要的参数有五个,分别是fun(代价函数,这里注意按照说明上所说这里代入的x参数应该是一个一维的数组,这点在实际编程中很关键)。x0(参数),args(传递特征值数组和y),methon(具体优化方法),jac(对代价函数求偏导)。在实际的编程中发现,使用高级优化的算法确实在程序的执行效率上有了很大的提高。
6.2一对多
在实际的分类问题中我们最终要分出的种类可能不是两种,而是多种。
这个时候我们在判断的时候将其中一种分类情况提出,其他与其不同的都划分为一种。这样就又回到0-1分类的问题上了。
6.3正则化
正则化的原因是我们在使用算法进行机器学习的应用时,会出现过拟合的问题,例如:
如上述两图所示,其左右边的图形代表的都是过拟合的问题。这种情况是过度的去拟合了所给的训练集。但是要知道训练集只是真实世界的一部分。如果只是单独的去拟合训练集的话就会失去泛型。
要解决过拟合的问题主要有两种方法,一种是降维,通过例如PCA的方法对之前多个特征进行降维。第二种方法就是正则化了。
正则化的主要思想就是给代价函数加上一个有关参数的项,并赋予一个lamuda权重。通过这种方式,在保证代价函数收敛的同时,参数值尽量的小。
Python 实现:
https://github.com/TEDIST/ML_exercises/blob/master/logic_regression.py
https://github.com/TEDIST/ML_exercises/blob/master/logic_regularization.py
https://github.com/TEDIST/ML_exercises/blob/master/one_vs_all.py