为什么会用纯Python来实现呢?这种陶(hao)冶(wu)情(yong)操(chu)的做法肯定也不是我自己闲着蛋疼搞着玩的。。。 明明有更好的科学计算库不用,非要纯手写正面硬刚,除了老师用挂科作为威胁还能有谁?
下面是一大纯手打的堆理推导... 写的逻辑有些混乱,后续有时间再慢慢整理 觉得麻烦的小伙伴就不用看了,反正我代码里也写的有注释,代码稍后传上github后更新连接
---------------------------------------------------------------------------------------------------------------
多元线性回归 最小二乘法实现
线性回归包括一元线性回归和多元线性回归,一元的是只有一个x和一个y。多元的是指有多个x和一个y。
对于平面中的这n个点,可以使用无数条曲线来拟合。要求样本回归函数尽可能好地拟合这组值。综合起来看,这条直线处于样本数据的中心位置最合理。 选择最佳拟合曲线的标准可以确定为:使总的拟合误差(即总残差)达到最小。有以下三个标准可以选择:
(1)用“残差和最小”确定直线位置是一个途径。但很快发现计算“残差和”存在相互抵消的问题。
(2)用“残差绝对值和最小”确定直线位置也是一个途径。但绝对值的计算比较麻烦。
(3)最小二乘法的原则是以“残差平方和最小”确定直线位置。用最小二乘法除了计算比较方便外,得到的估计量还具有优良特性。这种方法对异常值非常敏感。
样本x为一个多维向量,x=[x1,x2,…xd]
那么权重W也是与X同维度的一个向量,W=[w1,w2,…wd]
所以Y对x的预测可以写为Y=W ∙ x+b(这里为内积的形式),但通常将b移到W向量里面去,写为W=[b,w1,w2,…wd],改变后的W用θ
表示,θ=[θ0,θ1,θ2,…θd]
因为W的维度变了所以我们也要给x对应的多加一个维度,此时的x为[x0,x1,…xd],使x0等于1,让其在矩阵相乘时匹配刚才在W中加入的b
现在Y=W ∙