1、代价函数
其中:
下面就是要求出theta,使代价最小,即代表我们拟合出来的方程距离真实值最近
共有m条数据,其中代表我们要拟合出来的方程到真实值距离的平方,平方的原因是因为可能有负值,正负可能会抵消
前面有系数的原因是下面求梯度是对每个变量求偏导,可以消去
实现代码:
注意这里的X是真实数据前加了一列1,因为有theta(0)
2、梯度下降算法
代价函数对求偏导得到:
所以对theta的更新可以写为:
其中为学习速率,控制梯度下降的速度,一般取0.01,0.03,0.1,0.3.....
为什么梯度下降可以逐步减小代价函数
假设函数
泰勒展开:
令: ,即负梯度方向乘以一个很小的步长
将代入泰勒展开式中:
可以看出,是取得很小的正数,也是正数,所以可以得出:
所以沿着负梯度放下,函数在减小,多维情况一样。
实现代码
3、均值归一化
目的是使数据都缩放到一个范围内,便于使用梯度下降算法
其中为所有此feture数据的平均值
可以是最大值-最小值,也可以是这个feature对应的数据的标准差
实现代码:
注意预测的时候也需要均值归一化数据
4、最终运行结果
代价随迭代次数的变化
5、使用scikit-learn库中的线性模型实现
导入包
归一化
线性模型拟合
预测
实例及数据请入传送门:https://github.com/lawlite19/MachineLearning_Python/tree/master/LinearRegression
领取专属 10元无门槛券
私享最新 技术干货