今天分享一个很经典的ML算法---LIner regression(线性回归)php
**线性回归(Linear regression)**是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析 ---维基百科算法
咱们能够理解为对一些连续性数据来讲,经过观察咱们能够经过画出一条线来总结出这些数据的走向趋势,就入下图数据,很显然咱们能够找到一条直线来模拟出数据的规律,从而达到给出一个新数据,咱们知道他的面积,那么就能够大体预测出对应的价格,固然对于其余状况咱们要预测的线多是各类各样的函数
就如这张图,咱们想分析出数据走向趋势,最简单的就是画出这样一条直线,
学习
可是咱们如何肯定θ0和θ1的取值呢? 这里咱们经过不停地改变θ0和θ1的值,而后计算出hθ(x)的值,而且与y比较,最后求出其代价函数
代价函数是求出每一个样本预测值和真正值差平和和 而后再找出最小的代价值
3d
可是如今问题又出现了,咱们如何最小化代价函数呢? 这里咱们可使用梯度降低法或者正规方程blog
Gradient descent 首先咱们画出θ0,θ1和j(θ0,θ1)的三维图ip
从图很明显看出,咱们要找的最小的代价函数,就要尽可能找到网状图最低点,从三维图咱们不容易看出来,那么二维图呢?
这样咱们就很容易发现最小代价函数对应的θ0,θ1值, 可是咱们如何使用数学方程来找到这个最小值呢?这里咱们引用梯度降低法get
咱们任意选取一点,而后找到其降低最快的方向降低一段距离,而后重复这个过程直到咱们找到最低点 就像下面这样 可是如何去找其降低最快的方西呢? 咱们首先从一个二维图来寻找方法:
像这样,咱们任意找一个点,咱们经过对其求导来找到其降低最快的方向,二维图是这样,三维一样也是,所以咱们经过对点求导来找到降低的方向,所以梯度降低的数学表示就是数学
那么对于线性回归的梯度降低就是:
it
线性回归的代价函数是一个弓状函数,术语为凸函数(convex function) 批度降低:每一步梯度降低都遍历整个训练集的样本,所以计算偏导分和
这里α的意思是每次降低的速度,咱们称其为学习率 很显然,不一样的学习率将会致使不一样的结果 若是α过小,咱们的学习速率小,梯度降低就会很慢,算法速度就会很长 可是α太大的话,学习速率过大,就颇有可能在降低的过程当中略过最低点,也就是没法收敛,甚至最终致使发散
咱们直到,当Θ1取得局部最优解后,求导会得0,也就是梯度降低就结束了 δ/δ.Θ1 会在接近局部最优时会愈来愈小,所以α即便不变也能达到最优解
以上咱们介绍的是单变量回归,可是事实上变量有不少时候都不是一个
有时候咱们遇到的线性回归方程是这样的,这时候咱们该怎么办? 这里咱们引用矩阵,对与Θ0,Θ1'.....Θn,咱们用矩阵表示 而后引进x0=1,从而x0....xn表示为
这样咱们就把多变量线性回归通过矩阵变换后能够用单变量的方法去解决 所以咱们的梯度降低算法就是
简化后 最后咱们总结一下单变量和多变量之间的区别
Feature Scaling特征缩放 在多变量回归方程中,咱们有不少个特征,本质上咱们但愿每一个特征对算法的影响应该是相同的,可是很不凑巧,特征之间由于取值范围不一样,好比a特征取值范围是1000左右,而b特征取值范围只有10左右,那么咱们的代价函数图颇有可能就是一个狭长的椭圆,这时候很容易引发梯度降低的时间大幅度的延长 这里咱们但愿经过均值归一化来解决这个问题,然
均值归一化: x1= x1-μ/s1 这里μ是特征平均值,s1是最大值减去最小值 后获得的每一个x值的结果值都是在 -3<=x<=-1/3, 1/3<=x<=3