- 理解相关系数
- 对于两个二进制序列,或者两段基因序列,我们可以用汉明距离来度量二者之间的差异,作为“距离”;那么假如对于两个复杂的量(描述这两个量可能用很多很多的参数),那么这时候怎样度量二者之间的“相关性”呢?
- 一个很自然的想法,用向量与向量的夹角来作为距离的定义,夹角小,就距离小,夹角大,就距离大。
- 但是怎样来计算夹角呢?为了让这种计算可行,我们要选一种恰当的三角函数来算。正弦函数的不太好的一个原因是因为加上个90°,正弦算出来得到的结果一样,而两个向量的夹角是30°还是120°这是完全的两码事,此外,正弦函数也不适合推广到高维度向量的计算中的“两两比较”。
- 那么考虑用余弦吧,这个可以很方便地区分30°和120°,而且还有一个好处——余弦的计算非常简单,用内积就可以计算了,中学数学中就学过: (x1,y1)・(x2,y2)=x1x2+y1y2,这就是内积,你要是喜欢,也可以把这个叫做“协方差”。
- 但是这个内积的定义很奇怪哎?要是两个向量本身就长,那这个也算不出夹角来,所以再要除以两个向量本身的长度,即,夹角:cos <a, b> =(a・b)/|a||b|;
- 这样,那么两个量是不是相关,怎么来判断?就用余弦的大小就可以了,我们把两个向量的夹角的余弦,就叫做“相关系数”,正如上面的式子所指出的,写开了就是:
分子上面的就是一个内积的计算,也就是前面我说的“协方差”,分子下面是两个勾股定理乘起来,是两个向量的长度。如果两个向量平行,则它们夹角的余弦(也就是“相关系数”)就等于1或者-1,同向的时候是1,反向的时候就是-1。如果两个向量垂直,则夹角的余弦就等于0,说明二者不相关。
如何利用相关系数挑选出能够用来最好的预测因变量的?
首先把数据分为两组:training set / test set.
在 training set 中,假设有这几个特征, 为因变量,我把本题拆分为两个问题:
在 training set 中,假设有这几个特征, 为因变量,我把本题拆分为两个问题:
1) 我们想要分析哪个特征对结果影响最大
- 首先把和 用某种机器学习的方法跑一遍,在此我用 SVM (1.2. Support Vector Machines) 来举例,再将 test set 代入这个 SVM,得到
- 计算并记录与的相关系数
- 从中去掉一个特征, 重新进入步骤 1、2,算出
- 现在我们算出了,将他们和比较,变化最大的即是影响最大的特征(可能正向影响,也可能反向影响)
2) 我们想要挑选出最好的用来预测因变量的组合
- 首先把和 Y 用某种机器学习的方法跑一遍,在此我用 SVM (1.2. Support Vector Machines) 来举例,再将 test set 代入这个 SVM,得到
- 计算并记录与的相关系数
- 为了挑选最好的用来预测因变量的组合,只需要从中选出一个集,使得对应的最大
- 但上述也只是在当前 training set / test set中的最优解,想要继续优化的话,再多找几组 training set / test set 即可