简单线性回归算法实现

我们先从最简单的线性回归y = ax + b开始。 假设我们现在有5组样本数据. (1,1) (2,3) (3,2) (4,3) (5,5) . 只是为了说明线性回归的原理,所以只用了少量数据。实际问题中,这么少的数据去训练一个模型意义是不大的。

那么如果只给我们两组数据(1,1) (5,5), 那么我们利用中学的二元一次方程解,就可以算出来a = 1, b = 0. 也就是y=x这条直线就可以完美拟合两个点了。 但是现在我们是5个点。 怎么样画一条直线,使5个都在这条直线上呢? 答案肯定是:根本没有这样的直线。那么我们只能找一条直线 使得5个点到这条直线距离总和最小了, 从而说这条直线最大程度的拟合了这5个点。

我们用 y = ax +b 作为预测y的值,当x = 1 时,预测的y的值为 a + b, 而实际我们的y的值为1. 那么它们的误差即为(1-(a+b)). 当x = 2时,预测的y值为 2a+b, 而实际我们的y的值为3,那么它们的误差为(3-(2a+b)) . 为了计算绝对误差,我们给误差加上平方,这样做是为了防止出现正负误差互相抵消。比如说1个点的误差是正值2,一个点的误差是负值-2,那么它们加起来最后岂不是没有误差了。

我们加上平方后,就可以防止这个问题出现了。那为什么不用误差的绝对值呢? 当然绝对值在我们5个点的情况下,误差估计的的确是更准确,但是但我们的点有很多的时候,我们要拟合出最好的a,b,为了让我们的函数可导,平方是个不错的选择。当我们有m个点的时候,我们的目标就变成了:

我们最后算出了使得我们的误差达到最小的a,b的值。让我们用代码来实现看看:

结果如下:

我们算出最优的模型为 y = 0.8 * x + 0.4. 计算a的值,我们用了for循环,这样效率不是很高,我们用向量计算,效率会提高很多。

使用向量化运算:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180627G1K22C00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券