线性回归学习笔记
1.线性回归概述
线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。其在金融、医疗等领域有着广泛的应用。
y=ax+b
一元线性回归可以看作是多元线性回归的一个特例,因此只要分析多元线性回归的特性。
2.算法流程
(1)选取特征值,设计假设函数。
(2)代价函数。
(3)进行梯度下降/正规方程。
当我们需要用线性回归去解释一个现象或尝试做预测的时候,我们首先要做的就是从问题本身出发选取适当的特征,这些特征必须是我们认为能对预测结果起着一定作用的量。然后做出合适的假设函数。当我们拥有假设函数后,为了检验它与真实的偏差也就是它的准确度,我们需要一个代价函数作为评价标准。剩下的就是要用我们拥有的数据为基准,通过某种方法对我们的函数参数不断迭代直至我们的代价函数的值达到收敛,进而得出最终的假设函数。这种方法可以是梯度下降,也可以是运用数学原理结合矩阵运算而进行的正规方程的方法。
2.1算法概要
(1)假设函数
(2)代价函数
(3)梯度下降
2.2梯度下降
梯度下降的算法如上文所述,但其具体需要的迭代次数和效率却需要再加考虑。
特征缩放:
如上图所示,梯度下降的过程中如果不同参数每次迭代的尺度差距很大的话,相应需要迭代的次数就很多,因此将特征进行缩放至 -1到1的范围是很有必要的。具体方法是用特征减去特征均值再除以特征范围
2.3学习率
梯度下降算法的每次迭代受到学习率的影响,如果学习率过小,则达到收敛所需的迭代次数会非常高;如果学习率过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。
学习率的具体设定可以在程序设计完成后通过不断的尝试最终选取合适的值。
2.4正规方程
我们可以发现上述的梯度下降算法的最终目的其实是找到局部最优解,其实就是微积分里的极值点。这就意味着当代价函数关于所有参变量的偏导均为零的时候此时的造假函数达到极值点。
然后再根据矩阵求导的运算法则可以得到:
3编程作业
大致要求就是,假设你是一个连锁食品店的CEO你要通过文本文件里的一个由城市人口和每卖一个食物所能获得的利润以及该城市的总利润所组成的数据表,做出线性回归,预测在某个地方开一个新店所能获得的利润是多少。
Python实现:
https://github.com/TEDIST/ML_exercises/blob/master/multiple_linear_regression.py