相关系数的介绍与特征选择

在进行数据分析的时候,相关性
相关系数和特征选择之前,先来区别两个概念,一个是属性,一个是特征。一般,把数据集中的各列称为属性,而对算法模型表现有益的属性称为特征。举个例子,在预测泰坦尼克乘客的存活情况时,乘客姓名这个属性对我们的预测可能没有帮助,甚至会干扰模型表现;而乘客年龄、性别或许与存活情况有很强的关系,这时,可以称它们为特征。

三种主要的相关系数计算方式

皮尔逊相关系数

使用前提:皮尔逊相关系数适用场景是呈正态分布的连续变量,当数据集的数量超过 500 时,可以近似认为数据呈正态分布,因为按照中心极限定理,当数据量足够大时,可以认为数据是近似正态分布的。
设(X,Y)是一个二维随机变量,且Var(X)>0,Var(Y)>0,则称 $Corr(X,Y)=\frac{Cov(X,Y)}{\sqrt{Var(X)*Var(Y)}}$ 为相关系数。 $Cov(X,Y)$为协方差,是数据集中每组种两个位点和对应均值差值的乘积 $Cov(X,Y)=\frac{\sum_{i=1}^n(x_i-\bar{x})(y_i-\bar{y})}{N-1}$。

示例

1
2
3
4
5
6
7
8
9
10
#使用Python scipy
from scipy import stats

a = np.array([0, 0, 0, 1, 1, 1, 1])
b = np.arange(7)
c,p = stats.pearsonr

(a, b)
print('Pearson correlation:%s'%c)
print('p-value:%s'%p)

alt text

斯皮尔曼相关系数

使用前提:皮尔逊Pearson相关系数使用前提条件中,任何一个条件不满足时可以考虑使用该系数;
又称斯皮尔曼秩相关系数,是秩相关系数的一种。“秩”,即秩序,可以理解为一种顺序或排序,根据变量在数据内的位置进行计算。斯皮尔曼更关注的是变量相关顺序的比较(高低顺序),而不是绝对值的相关性。
$p=1-\frac{6\sum_{i=1}^{n-1}d_i^2}{n^3-n}$

alt text

示例

1
2
3
4
5
6
7
#使用Python scipy
from scipy import stats
s,p1 = stats.spearmanr([1,2,3,4,5], [5,6,7,8,7])
print('Spearman correlation

:%s'%s)
print('p-value:%s'%p1)

肯德尔相关系数

使用前提:肯德尔相关系数,又称肯德尔秩相关系数,它也是一种秩相关系数,不过,它的目标对象是有序的类别变量,比如名次、年龄段、肥胖等级(重度肥胖,中度肥胖、轻度肥胖、不肥胖)等。它可以度量两个有序变量之间单调关系强弱。肯德尔相关系数使用了“成对“这一概念来决定相关系数的强弱。
成对可以分为一致对(Concordant)和分歧对(Discordant)。一致对是指两个变量取值的相对关系一致,可以理解为X2-X1与Y2-Y1有相同的符号;分歧对则是指它们的相对关系不一致,X2-X1与Y2-Y1有着相反的符号。

肯德尔系数有两个计算公式,一个是Tau-a,另一个是Tau-b。两者的区别是Tau-b可以处理有相同值的情况,即并列(tied ranks)。下面依次来介绍这两个公式。

Tau-a的计算公式为: $\tau_a = \frac{c - d}{\frac{1}{2}n(n-1)}$, c 表示一致对数,d 表示一致对数, 表示所有样本两两组合的数量,当没有重复值时,组合数量等于c+d。

Tau-b的计算公式为:$\tau_b = \frac{c - d}{\sqrt{(c+d+t_z)(c+d+t_y)}}$

下面通过例子来理解这个公式。

对上面图片中的数据进行离散化
后,得到的数据如下:

示例

1
2
3
4
5
6
7
8
from scipy import stats
x1 = [12, 2, 1, 12, 2]
x2 = [1, 4, 7, 1, 0]
k, p2 = stats.kendalltau

(x1, x2)
print('Kendallta correlatio:%s'%k)
print('p-value:%s'%p2)
-------------本文结束感谢您的阅读-------------