统计学习好玩,但不好学。无论是课本、讲义还是论文,都充斥着连篇累牍的公式,当然这是科学文献严密性的需要,只是对初学者来说,学习门槛太高。最近在看《统计学习要素》(The Elements of Statistical Learning),随手心得,仅供参考。
第三章-线性回归
如果我们已知了X和Y之间满足线性关系,在得到X和Y的数据之后,怎样估计它们之间的线性系数w呢?
这其实是在解一个线性方程组,xw = y。这个等式的意义是,用w作为x列向量的加权,得到y。但理论上,如果y并不在x的列空间中,这个方程是无解的,这种情况之所以经常发生,是因为我们生活在一个有误差的世界里。一方面,y可能是我们测量得到的,但凡是测量,就会有误差,另一方面,x和y之间的关系,并非是线性的,你硬塞给人家一个线性模型,能有解才怪。虽然不能得到一个完美的解,仍然可以向这个方向逼近,于是我们的目标变成了,寻找w,使得xw与y之间的偏差平方和最小,这就是最小二乘的来历。
最小二乘解可以从两个角度得到,一是代数的角度,对目标函数求偏导并令导数为零,二是几何的角度(我喜欢直观的东西),把y投影到x的列空间中,然后把这个投影当作y,解方程。
在得到了w之后,要对它做一番考验。原因是,我们在选择x的时候,可能不小心选择了几个相关的特征,这一组特征里面可能只需要一个就够了。因此在得到w之后,我们总想着能不能把去掉x中的一些分量,减小模型的复杂度,对应到w的值,就是将其中的某几个分量置为零。这就是线性回归模型的子集选择法。
怎样选择这个子集?最直观的方法就是暴力搜索,把这些特征所有的组合都尝试一遍,在其中选择最满意的特征组。这种做法的复杂度是指数的。一种改进的方向是贪心算法,分为正向和反向。正向贪心,就是从0开始,每次往特征池里加入一个最应该加入的特征,这里的“应该”指的是,与其它未加入特征相比,加入这个特征使得误差的减小最显著。反向贪心,就是从全集开始,每次从特征池里取出一个最应该取出的特征,什么是“应该”?参考上述。
除了子集选择法之外,接下来就是大名鼎鼎的ridge和lasso了。ridge的理解有四个方面,第一,最小二乘法可能没有解,原因是x‘x不一定可逆,因此就改为x‘x+λI;第二,是贝叶斯观点,对w取高斯先验,则ridge的目标函数就是后验概率;第三,是从正则化的观点去理解,相当于给目标函数添加了一个正则项;第四,也是最直观的,通过SVD分解,可以得到X的一组正交向量组,最小二乘解,其实就是先把y投影到这个正交向量空间,然后再解方程,这里,每个正交向量都对应了一个系数(矩阵X的奇异值),系数表示正交向量的权重,ridge其实就是把所有的正交向量的系数都压缩了,只不过,若正交向量原始的系数比较大,压缩的就轻一点,若原始的系数比较小,压缩的就重一点。
对于输入特征相互相关的问题,还有一个解决方案就是,首先对输入特征做分组线性变化,得到一个中间向量,然后以这个中间向量为基础进行线性回归。这个中间向量的选择方法,最主要的就是主要成分法。其核心与ridge方法类似,区别在于ridge是对各主要成分做压缩,最不重要的成分,压缩的力度越大,而主要成分法是直接把最不重要的特征抛弃。
说到底,最常用的还是最小二乘和ridge。原文中的图表画的非常棒,推荐阅读。