老饼讲解:一步一步上手学习
相关系数R是一个用来评估变量与变量之间相关程度的指标,它的取值在-1到1之间,符号代表是正相关还是负相关,而数值就代表着相关的程度,相关系数可以由协方差推导而得到,可以看作是标准化后的协方差,下面我们就来详细地说说相关系数R的计算公式、意义与代码实现。
我们都知道,在统计学中,用协方差来作为变量相关性的统计量,但是协方差是没有范围的,所以就有了相关系数,它其实就是把协方差标准化,使得它的取值范围在[-1,1]之间,好了,下面我们就具体看看相关系数是什么。
相关系数是统计学中用于度量变量与变量之间的相关程度的一个指标,相关系数的计算公式为:
其中,
和实际是将原始标准化为标准差为1,均值为0的数据,从公式可以看到,相关系数就是将 x 和 y进行标准化后,再对应相乘的总和。
从相关系数的公式可知,当时,相关系数为1,当时,相关系数为-1,也就是相关系数取值范围在【-1,1】之间,它主要用于检测变量之间的线性相关性,相关系数的意义如下:
1. 相关系数越接近 1,说明变量之间越正相关。
2. 相关系数越接近-1,说明变量之间越负相关。
3. 相关系数越接近 0,说明变量之间不相关。
总的来说,相关系数的绝对值越大,相关性越强,越小就越弱,它的符号则代表是正相关还是负相关。
好了,如果对比一下相关系数和协方差的公式,就会发现相关系数其实就是协方差的标准化。
推导如下:
可以看到,将协方差除以标准差,就会将输出归一化到【-1,1】之间,得到的就是相关系数了。所以,相关系数也可以简单地理解为“标准化的协方差”。
当有多个变量时,我们就会用相关系数矩阵来表示变量两两之间的相关系数,下面说说什么是相关系数矩阵,以及它的计算公式。
相关系数矩阵R,用来表示变量两两之间的相关系数,如下:

如图所示,就代表第i个变量与第j个变量之间的相关系数,易知,相知系数矩阵是一个对称矩阵,且对角元素为1,通过相关系数矩阵,就可以比较一目了然看到变量间的相关性。
相关系数矩阵的计算公式如下:
1. 先将X里每个变量进行标准化:
其中,代表哈玛达积,也就是矩阵元素对应相乘
2. 然后用标准化数据计算相关系数矩阵
说明:本公式不是数学上的严谨公式,更偏向于编程时的公式形式,仅供参考。
好了,下面看看在python中怎么计算相关系数矩阵,我们可以使用numpy的函数来计算,也可以自己按公式来计算,下面展示两种方法。
在numpy中使用corrcoef函数来计算数据的相关系数矩阵就可以了,代码示例如下:
'''
本代码展示在python中如何用numpy求相关系数矩阵
本代码来自《老饼讲解-机器学习》www.bbblearn.com
'''
import numpy as np
X = np.array([[1,2,3],[2,3,3],[5,2,4],[6,8,3],[9,0,9]]) # 原始数据
R = np.corrcoef(X, rowvar=False) # rowvar=False代表每列是一个变量
print('\n相关系数矩阵R:\n',R) # 打印相关系数矩阵代码运行结果如下:

可以看到,相关系数矩阵就是一个对称矩阵,且对角元素为1。
为了更具体了解相关系数的计算,下面我们看看不借用numpy,如何自己用公式来计算相关系数矩阵,具体代码实现如下:
'''
本代码展示在python中如何求相关系数矩阵
本代码来自《老饼讲解-机器学习》www.bbblearn.com
'''
import numpy as np
X = np.array([[1,2,3],[2,3,3],[5,2,4],[6,8,3],[9,0,9]]) # 原始数据
Xm = X.mean(axis = 0) # 原始数据各列的均值
std = np.sqrt(sum((X-Xm)*(X-Xm))) # 原始数据各列的标准差
Xn = (X - Xm)/std # 原始数据各列标准化
R = Xn.T@Xn # 相关系数矩阵
print('\n相关系数矩阵R:\n',R) # 打印相关系数矩阵代码运行结果如下:

可以看到,这里的结果与上面用numpy计算的结果是一致的。
相关系数就是用来评估变量相关性的一个指标,它的取值范围在[-1,1] 之间,当它为负数时,说明变量之间是负相关,当它是正数时,就是正相关。而绝对值|r|越大,就说明相关程度越大。相关系数实际就是协方差的标准化,所以它的原理与协方差是一样的,是根据变量之间协同变化的方向和幅度来评估变量的相关程度。
评论