理解线性回归
线性回归是利用数理统计回归分析,来确定变量之间的依赖关系的统计分析方法。如何理解呢,其实就是要寻找数据规律,以便根据数据规律,对新的变量条件进行结果推断。放到数学中来,就是把这个规律看成一个函数,要想办法求解出这个函数的各个参数。可以想像解方程,只不过这里要找的不是方程中的x、y、z,而是寻找合适的系数。
上图中有许多的二维数据点,通过观察发现这些点貌似是有一些规律的,通过描绘蓝色直线可以很直接的观察到,这些数据点围绕在这条直线的周围,并沿着直线的方向进行延伸。这条直线其实就是我们要找的规律。那这条直接怎么样来找呢?找到的直线是不是最好的呢?如果这些点到直线的距离之和如果最小,那这条直接应该就是我们期望的直线(这是svm的思路,寻找一个分割面,能让离分割面最近点到分割面距离最大),但这里我们换一种思路,如果所有数据点的y值与x落在直线上的y值的差值距离的和最小,这条直线也应该是我们期望的。
假设这条直线的函数为 f(x) = y = a * x + b , 其中a和b就是我们要寻找到系数,x和y分别是数据点的横坐标值和纵坐标值。假设这里有n个数据点,第k个点的y值就是yk,上面描述的最小距离和就可以表示为 |f(xk) - yk|,也可以直接用(f(xk) - yk)2替代(L2,最小二乘法),这样不用考虑绝对值的正负区间情况。那么现在就是要找一个合适的a和b,让所有点的(f(xk) - yk)2的和最小。需要注意的是,这里的x和y都是已经知道的数据点,而系数是未知数据。我们为所有点的(f(xk) - yk)2的和命名为J函数,它的未知变量其实就是a、b,最后表示为J(a,b),在多维的情况下可以用一个向量θ表示所有的参数,写成J(θ)。
现在就是想办法求这个系数的函数的最小值,我们能想像J会是一个有谷底的图形,而谷底就是斜度接近或者是0的地方(不能排除有的时候会有多个谷底,你只找到了一个其中一个,但不是最底的那个,就所谓局部最优和全局最优的区别)。
斜度的计算可以对J(a,b)进行求导,为方便可以对a和b两个维度分别进行偏导,也就是分别看a和b维度的斜度。可以想像自己站在谷顶某处,要下到谷底,可以向左下一段,再向右下一段,再交替着一直走下山。
这里其实理论上可以命J’函数为0,带入各数据点来求解a、b,但实际处理时数据噪音以及量级和维度的量级,不方便求解。这里就可以用梯度下降算法了,这里我们将用随机梯度下降方法,在一组简单的数据上,手工进行下降的训练。梯度下降是一种小步逐步逼近最低点的方法,一开始先随机选一个a作为起点,然后选定一个合适的步进量α,用α * J(a)’作为a方向上一次移动的长度,那到底是向左还是向右移动呢?通过观察,如果是在最低点的右侧,斜度是正值,我们要逼近最低点,应该是向左走;如果是在最低点的左侧,斜度是负值,则要向右走,所以应该用a - α * J(a)’,这样就可以向最低点方向走了。α的值一定要选的合适,太小会让逼近的过程太久,太大会出现老是走过了的情况。最后得到了以下公式。b维度的也是类似的。再接下来就可以将数据点的x、y值带入到公式,循环执行,直到a、b都收缩到趋于稳定的状态,也就是α * J(a)’和α * J(b)’已经小于设定的阈值。
这里我们来一些数据,假设我们有这么一组x、y的数据,y有一些是未知的值,我们需要推测它们是什么值。从已知的值我们很容易知道y = 2x - 1,现在就用随机梯度进行a、b的寻找。
以上有误之处,欢迎斧正。