Linear regression

今天分享一个很经典的ML算法---LIner regression(线性回归)

线性回归(Linear regression)是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析 ---维基百科

我们可以理解为对一些连续性数据来说,通过观察我们可以通过画出一条线来总结出这些数据的走向趋势,就入下图数据,很显然我们可以找到一条直线来模拟出数据的规律,从而达到给出一个新数据,我们知道他的面积,那么就可以大致预测出对应的价格,当然对于其他情况我们要预测的线可能是各种各样的

房价分析,x轴为面积,y轴为价格

就如这张图,我们想分析出数据走向趋势,最简单的就是画出这样一条直线,


最简单的线性回归方程

但是我们如何确定θ0和θ1的取值呢?


image.png

这里我们通过不停地改变θ0和θ1的值,然后计算出hθ(x)的值,并且与y比较,最后求出其代价函数


代价函数

代价函数是求出每个样本预测值和真正值差平和和
然后再找出最小的代价值
image.png

但是现在问题又出现了,我们如何最小化代价函数呢?
这里我们可以使用梯度下降法或者正规方程

Gradient descent
首先我们画出θ0,θ1和j(θ0,θ1)的三维图


从图很明显看出,我们要找的最小的代价函数,就要尽量找到网状图最低点,从三维图我们不容易看出来,那么二维图呢?


image.png

这样我们就很容易发现最小代价函数对应的θ0,θ1值,
但是我们如何使用数学方程来找到这个最小值呢?这里我们引用梯度下降法

我们任意选取一点,然后找到其下降最快的方向下降一段距离,然后重复这个过程直到我们找到最低点
就像下面这样


image.png

但是如何去找其下降最快的方西呢?
我们首先从一个二维图来寻找方法:


image.png

像这样,我们任意找一个点,我们通过对其求导来找到其下降最快的方向,二维图是这样,三维同样也是,因此我们通过对点求导来找到下降的方向,因此梯度下降的数学表示就是
这里我们的计算步骤不能改变,必须在求完θ0,θ1后再赋值

那么对于线性回归的梯度下降就是:


线性回归以及其代价函数

image.png

线性回归的代价函数是一个弓状函数,术语为凸函数(convex function)
批度下降:每一步梯度下降都遍历整个训练集的样本,因此计算偏导分和

这里α的意思是每次下降的速度,我们称其为学习率
很显然,不同的学习率将会导致不同的结果
如果α太小,我们的学习速率小,梯度下降就会很慢,算法速度就会很长
但是α太大的话,学习速率过大,就很有可能在下降的过程中略过最低点,也就是无法收敛,甚至最终导致发散

我们直到,当Θ1取得局部最优解后,求导会得0,也就是梯度下降就结束了
δ/δ.Θ1 会在接近局部最优时会越来越小,因此α即使不变也能达到最优解

以上我们介绍的是单变量回归,但是事实上变量有很多时候都不是一个

有时候我们遇到的线性回归方程是这样的,这时候我们该怎么办?

这里我们引用矩阵,对与Θ0,Θ1'.....Θn,我们用矩阵表示
n为单个样本中特征数

然后引进x0=1,从而x0....xn表示为
image.png

这样我们就把多变量线性回归经过矩阵变换后可以用单变量的方法去解决

因此我们的梯度下降算法就是
image.png

简化后


我们注意,这里m表示的是样本数,n表示特征数,x(i)则表示是第i个特征

最后我们总结一下单变量和多变量之间的区别


image.png

Feature Scaling特征缩放
在多变量回归方程中,我们有很多个特征,本质上我们希望每个特征对算法的影响应该是相同的,但是很不凑巧,特征之间因为取值范围不同,比如a特征取值范围是1000左右,而b特征取值范围只有10左右,那么我们的代价函数图很有可能就是一个狭长的椭圆,这时候很容易引起梯度下降的时间大幅度的延长
这里我们希望通过均值归一化来解决这个问题,然

均值归一化:
x1= x1-μ/s1
这里μ是特征平均值,s1是最大值减去最小值
后得到的每个x值的结果值都是在 -3<=x<=-1/3, 1/3<=x<=3

你可能感兴趣的:(Linear regression)