特征相似性度量

Posted 小舔哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了特征相似性度量相关的知识,希望对你有一定的参考价值。

  在进行特征选择的时候我们要衡量特征和我们的目标之间的相似性,有很多的方法可以衡量,下面介绍一些使用filter特征选择方法的时候能够使用的方法,更多的特征选择方法可以参考我的另一个博客特征选择

  filter特征选择方法是:特征选择的过程和模型的训练过程没有直接关系,使用特征本身的信息来进行特征选择。

  参考这篇文章给出下图所示的特征度量方法:

FS1

 

1:相关系数(皮尔逊系数)

  对于两个变量$\\mathbf{x}$ 和$\\mathbf{y}$ 相关系数是这样定义的:

  $\\rho(\\mathbf{x},\\mathbf{y}) = \\frac{   cov(\\mathbf{x},\\mathbf{y})  }   {   \\sqrt{D(\\mathbf{x})D(\\mathbf{y})}  }$

  其中$cov(\\mathbf{x},\\mathbf{y}) $是 $\\mathbf{x}$ 和$\\mathbf{y}$的协方差,$D(\\mathbf{x})D(\\mathbf{y})$是$\\mathbf{x}$ 和$\\mathbf{y}$的方差。

  当我们用采集到的数据来进行计算的时候,计算公式如下:

  $\\rho(\\mathbf{x}, \\mathbf{y}) = \\frac{ \\sum \\limits_{i=1}^n [(x_i – \\bar x)  (y_i – \\bar y)] }{\\sqrt{ \\sum \\limits_{i=1}^n {(x_i – \\bar x)}^2   \\sum \\limits_{i=1}^n {(y_i – \\bar y)}^2  }}$

  相关系数的取值在-1和1之间。相关系数为1的时候表明两个变量是线性相关的,而取0的时候表示的是不相关的。当两个变量都是连续的数值类型的时候,可以使用相关系数来进行度量。

  关于相关系数的另一个解释是这样的:相关系数是去中心化以后数据的余弦值。中心化是数据减去他们的平均值以后得到的数据。

 

python当中计算相关系数的方法:

import scipy.stats as stats
import numpy as np
import pandas as pd

a = [1.2, 1.5, 1.9]
b = [2.2, 2.5, 3.1]

print(stats.pearsonr(a, b))  
\'\'\'
使用scipy库来进行计算,返回两个值,第一个是相关系数,第二个是在不相关假设情况下的p值。

(0.9941916256019201, 0.0686487855020298)
\'\'\'

print(np.corrcoef([a, b]))  
\'\'\'
使用numpy库来计算相关系数,返回一个数组的形式,为第i行第j行的相关系数

[[1.         0.99419163]
 [0.99419163 1.        ]]
\'\'\'

df = pd.DataFrame()
df[\'a\'] = a
df[\'b\'] = b
print(df.corr())    
\'\'\'
使用pandas库来进行计算,计算第i列和第j列(每一列都是一个Series)的相关系数。返回的结果为一个DataFrame。
注:pandas是计算列的相关系数,numpy是计算行的相关系数。假如有一个df,那么如果用numpy来进行计算?
使用的方法是 np.corrcoef(df.values.T),要进行转置一下。 a b a 1.000000 0.994192 b 0.994192 1.000000
\'\'\'

 

2:Anova(方差分析)

  Anova是方差分析(analysis of variance)的意思。 方差分析出现的背景是这样的:在实际的生产生活当中,一个结果会受到多个因素的影响,比如小麦产量受到光照、土壤的酸碱程度、温度等因素影响,化工生产当中产品受到原料成分、原料剂量、催化剂、反应温度、压力、溶液浓度、反应时间、机器设备的影响。如何能够判别哪种因素是对我们的结果影响最大的,这个时候就使用方差分析。我们把要考察的指标叫做试验指标,影响试验指标的条件叫做因素

  单变量的方差分析是只研究一个变量对于结果的影响。让这个变量取不同的值,得到不同值下的几组数据。比如要研究机器对于铝合金薄板厚度是否有影响,那么需要获得在不用的机器上面取得的薄板厚度的一组值。

  把这个问题转换为一个检验假设问题:在各组数据符合正态分布,而且正态分布的方差都相同的条件下,看各组数据的均值是否相同。如果结果在可接受的范围内相同,那么则说明这一因素对于试验指标没有太大的影响。如果不相同,那么说明这一因素对于试验指标影响很大。

  具体的计算过程当中是要求出这么几个值,最后可以列出一张单因素试验方差分析表。

方差来源 平方和 自由度 均方 F比
因素A $S_A$ s-1 $\\bar{S_A} = \\frac{S_A}{s-1}$ $F=\\frac{\\bar{S_A}}{\\bar{S_E}}$
误差 $S_E$ n-s $\\bar{S_E} = \\frac{S_E}{n-s}$  
总和 $S_T$ n-1    

其中:$S_A$叫做因素A的效应平方和,反应的是在因素A的不同水平下,样本均值和总体数据均值差异的平方和。

$S_E$叫做误差平方和,反应是在因素A的各个取值下,每组观察数据与这组数据均值的平方误差之和,反应的是随机误差的大小。

n是总体样本个数,s表示因素A可以取s种情况。

统计量$F=\\frac{S_A /(n-1)}{S_E/(n-s)}$ 叫做Anova F统计量,由它确定的检验也佳作Anova F检验。

 

下面给出一个典型的例子:

使用三台机器产生的铝合金薄板,看机器是否对薄板的厚度有显著的影响,数据集如下

机器1      机器2      机器3

0.236     0.257     0.258
0.238     0.253     0.261
0.248     0.255     0.259
0.245     0.254     0.267
0.243     0.261     0.262

根据一定的计算方法(具体的计算方法可以参考《概率论与数理统计》这本书),得到的方差分析表如下:

方差来源 平方和 自由度 均方 F比

因素

误差

0.00105333

0.000192

2

12

0.00052667

0.000016

32.92

 

总和 0.00124533 14    

在显著性水平$\\alpha = 0.05$的情况下,$F_{0.05}(2,12) = 3.89 < 32.92$,拒绝假设。所以认为各台机器生产的薄板厚度有显著的差异。

sklearn的feature_selection中的SelectKBest 结合 f_classif可以实现Anova的F值来选择特征。

 

 

$\\chi^2$检验(Chi-Square  卡方检验)

  $\\chi^2$检测先假设特征和目标变量没有关系,然后利用公式

  $\\chi ^2 = \\sum \\frac{(A – T)^2}{T}$来计算$\\chi ^2$的值,其中A为实际值,T为理论值,是根据我们的假设推出来的。

来看这么一个例子:

在给出下列数据的情况下,是否认为不同性别的人对猫和狗有偏爱。

 
207 282
231 242

首先,我们将各行各列相加得出一些数据:

   
207 282 489
231 242 473
  438 524 962

然后我们算出理论值:即认为在性别对宠物偏爱没有影响的情况下,只和统计值有关的情况下,数据的理论值。

猫的占比为 $\\frac{438}{962}$,狗的占比为$\\frac{524}{962}$,所以理论上:

男人喜欢猫的人数应该为 $489 \\times \\frac{438}{962} = 222.64$

男人喜欢狗的人数应该为 $489 \\times \\frac{524}{962} = 266.36$

女人喜欢猫的人数应该为$473 \\times \\frac{438}{962} = 215.36$

女人喜欢狗的人数应该为$473 \\times \\frac{524}{962} = 257.64$

数据如下图所示:

 
222.64 266.36
215.36 257.64

最后根据我们上面给出的公式来计算$\\chi ^2$值:

$\\chi ^2 = \\frac{(207-222.64)^2}{222.64} + \\frac{(282-266.36)^2}{266.36} + \\frac{(231-215.36)^2}{215.36}+ \\frac{(242-257.64)^2}{257.64} = 4.102$

在知道自由度的情况下,我们可以将$\\chi ^2$的值转换为p值,在这个问题当中自由度为1,计算出p=0.04283。p的值小于0.05(0.05是一个经典的显著性值),所以拒绝假设的依据很强,即认为不同性别的人对于宠物偏爱是不同的,即这两个变量不独立。

sklearn.feature_selection中的SelectKBest结合chi2可以使用$\\chi^2$检测来进行特征的选择。

 

 

关于假设检验的说明:

  我们上面介绍的Anova和$\\chi^2$检验,都是从检验问题引出来的,检验问题就是说,我们给定一个假设,那么我们观察到一定的样本后,我们是否相信这个假设,或者我们有多大的可能性来相信这个假设。假设问题可以转化为p-value问题,也就是把我们的假设问题转化为一个概率值来进行衡量。

  在$\\chi ^2$检测当中,我们假设我们的特征和目标变量没关系,所以得到的p值说明,在特征和目标变量没有关系的时候,我们能够相信观察到这些样本的概率。所以p值越小,说明我们越不相信,即特征和变量相关性越高。 所以p值越小,相关性越大。

  在Anova当中,我们得到F值,F值可以转化为p值,Anova的假设条件是各个因素水平的均值相等,即这个因素对于试验指标并没有影响。所以,在这一假设下,p值越小,说明我们约不相信因素对于试验指标没有影响。 所以p值越小,相关性越大。

 

LDA

  LDA是Linear Discriminant Analysis(线性判别分析)。即是一种分类算法,也可以用在降维当中,经常和PCA并列。这需要另外写一篇博客来进行介绍。

 

 

参考:

  盛骤  《概率论与数理统计》

  Python计算两个数组的相关系数

  1 - 基于卡方检验的特征选择 

  x2检验(chi-square test)或称卡方检验 

  卡方检验 

以上是关于特征相似性度量的主要内容,如果未能解决你的问题,请参考以下文章

如何从TfidfVectorizer计算余弦相似度?

一,论文研读总结

K-近邻算法(K-NN)

计算两个配置文件之间的相似性以获得共同特征的数量

特征匹配

如何度量两幅图像的相似度--结构相似度 SSIM 原理及代码