我们先从最简单的线性回归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循环,这样效率不是很高,我们用向量计算,效率会提高很多。
使用向量化运算:
领取专属 10元无门槛券
私享最新 技术干货