• 特征相似性度量


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

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

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

    FS1

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

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

      $ ho(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}$的方差。

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

      $ ho(mathbf{x}, mathbf{y}) = frac{ sum limits_{i=1}^n [(x_i – ar x)  (y_i – ar y)] }{sqrt{ sum limits_{i=1}^n {(x_i – ar x)}^2   sum limits_{i=1}^n {(y_i – ar 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 $ar{S_A} = frac{S_A}{s-1}$ $F=frac{ar{S_A}}{ar{S_E}}$
    误差 $S_E$ n-s $ar{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 imes frac{438}{962} = 222.64$

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

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

    女人喜欢狗的人数应该为$473 imes 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)或称卡方检验 

      卡方检验 

  • 相关阅读:
    asp.net 2.0 treeview控件“简单”操纵
    http://www.cnblogs.com/Terrylee/archive/2006/11/12/aspnet_ajax_quickstarts.html(ajax入门 )
    JS实面treeview中选中父节点,子节点也选中
    系统地学习ASP.NET AJAX(5) 客户端脚本编程(Sys.UI命名空间下的类和快捷方法)(转)
    图例显示投标数据
    怎么用正则表达式判断数字(包括正,负,小数。。)
    treeview常见用法
    TreeView小结
    sql split分隔
    WCF 漫谈
  • 原文地址:https://www.cnblogs.com/jiaxin359/p/8952850.html
Copyright © 2020-2023  润新知