概要:
单变量线性回归:
假设函数
代价函数
梯度下降
注意:在使用梯度下降时,应批量同时更新。式中,a为学习率,m为训练集样本个数。
实际问题:
假设你是一家餐厅公司的首席执行官,并且正在考虑在不同的城市开设一家新的分店。这个连锁店已经有很多分店在不同的城市,你有从不同城市的利润和人口的数据。你希望使用这些数据来帮助你选择要扩展到下一个城市。文件ex1data1.txt包含线性回归问题的数据集。第一栏是城市的人口,第二栏是分店在该城市的利润,利润负值表示亏损。
本文采用Python解决该实例问题。
当拿到数据时,由于只是单变量问题,首先考虑导入数据并可视化。
导入数据并可视化
得到数据整体情况
第二步,需要得数据进行进一步处理。由于数据中只有两栏数据,假设函数中含有x0这一项,需要对训练集中的每个样本前加入一个偏差项,即X0=1;然后从数据分别提取X(偏差和人口这两列数据)和y(利润这一列数据),并将X和y矩阵化,同时也初始化系数矩阵theta。
运行查看处理后的数据
第三步,需要定义代价函数,代价函数怎么理解呢,简单说,就是假设函数所得到的值与实际值之间的偏差。
第四步,定义梯度下降算法,通过梯度下降求得最小的代价函数值,以及相应的系数矩阵theta。
第五步,需要对学习率a和循环次数赋值,学习率的赋值还是很有讲究的,取得太小话,梯度下降速度会很慢;取得太大的话,梯度下降有可能会越过最优值,从而出现发散不收敛的情况。一般按着0.001,0.01,0.1,1....或0.003,0.03,0.3,3...来取。这次,来取0.01,循环次数为1500次。
第六步,梯度下降算法运算求得系数矩阵theta以及最小代价函数值,并对人口为35.000,利润为多少进行预测。
查看所得结果
最后,我们来绘制训练出来的线性模型与数据,更直观地查看拟合情况。
查看所得结果
由于梯度下降函数在每次循环都会得到一个代价函数值,这个也可以绘制。请注意,代价函数值在不断减小,这是凸优化的一个例子。
查看运行所得结果
不难看出,随着循环次数越多,代价函数值愈来愈收敛。
领取专属 10元无门槛券
私享最新 技术干货