梯度下降推广:多元线性回归(学习速率掌控) ----预测房价


1.假设
一个房屋的出售价格y(千元/平方米)由:
(1)房屋距市中心的距离(km) x1
(2)房屋的大小(平方米)x2
(3)房屋所拥有的房间数x3
(4)房屋的已使用时间x4

这四个因素决定,那么根据训练集确定五个变量θ1 θ2 θ3 θ4 θ0,使得任一房屋的价格可由 y= θ0 + θ1*x1 + θ2*x2 + θ3*x3 + θ4*x4 预测。


2.分析:
要预测房屋价格,实际上是要对五个变量分别使用梯度下降,来找到使得误差函数J(θ) 最小的θ1 θ2 θ3 θ4 θ0 的组合。

这篇文章承接自我的上一篇有关梯度下降的文章:[初识:梯度下降算法 (Gradient Descent)]
在这篇博客中我通过对 x1 x2 (在这里应当对应的是 θ0 θ1 )两个变量进行梯度下降从而得到散点的最优直线拟合。在这里只是问题稍微复杂了一些,需要对五个变量进行梯度下降的处理,来得到最优的房价预测方程。


承接上篇博客,这里直接给出五个变量的梯度下降式子:
这里写图片描述


那么只需要根据这五个式子,就可以利用梯度下降算法得到最优的拟合方程。

然而,我在用代码实现了算法之后,却发现θ1 θ2 θ3 θ4 θ0 无法收敛,每次都运行到我指定的for循环最大次数后才退出。其时间消耗少则五分钟,多更至十多分钟,有时甚至根本无法得到结果(结果显示 not a number)。

但是,经过长时间的探索,终于发现问题竟出在了α的取值上。α 又称学习速率,决定了每一次θ1 θ2 θ3 θ4 θ0 改变幅度的大小,受之前那个拟合散点程序的影响,我这次开始的时候将α 设置的较大(0.1或0.01),或许是因此导致了θ1 θ2 θ3 θ4 θ0 中一部分变量的发散,从而导致循环跳出条件无法满足。
α 值调为0.0001后,五个变量得以迅速收敛,循环次数也由千万级别骤降至四百余次。

可以看到,过小的α有时会导致计算次数增多,增加消耗,有时却能拯救一个无法收敛的程序。可见,对于不同的训练集,α的取值相当灵活。


3.代码实现:

原理与上篇博客中的拟合散点大致相同

(1)给出训练集,学习速率,及有关变量
由于训练集数据过少,而且数据是自己编的,结论应该和实际没什么关系 :(

int Judge ;     //用于判断收敛

//自己脑补了15组数字 :)
double Train_set_x1[15] =
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值