feture selection

来源:互联网 发布:dell xps linux 编辑:程序博客网 时间:2024/05/29 12:25

F-score:
对第i个属性, 有xi+, xi_, xi; 分别表示正类样本中该属性的均值、 负类样本中该属性的均值, 所有样本中该属性的均值
n+表示正类样本个数, n-表示负类样本个数

                   (xi+  -  xi)^2    +     (xi_ - xi)^2
F(i) = ------------------------------------------------------------
          1                                           1
        ----- * sigma(x(k,i) - xi+)^2 + ------ * sigma(x(k,i) - xi_)^2
        n+ - 1                                     n- - 1
       
文字描述:
分子是正类样本均值与总体样本均值差的平方, 加上 负类样本均值与总体样本均值差的平方
分母是正类中样本方差 与 负类中样本方差 之和


分子衡量的是该属性的正类值集合与负类值集合的离散程度(类间)
分母衡量的是该属性值在类内的离散程度

因此, F值越大, 说明该属性的区分作用越明显。
缺点是没有揭露属性之间的互信息。


使用F-score 与 svm进行特征提取
1) 计算每个属性的F值
2) 人为选择某些阀值
3) 对每个选择的阀值
3.1) 丢弃F-score低于该阀值的属性
3.2) 将训练数据分成 Xtrian与Xvalid两类
3.3) 用Xtrain训练得到model;使用该model来predictXvalid
3.4)重复3.2-3.4 5次,计算平均的Xvalid error
4) 选择步骤3中, 平均Xvalid error最小的阈值。 以此来作为特征选择的阈值
5) 然后再进行svm分类

 

 

 

 

 

 

 


Random forest
将训练数据分为两部分, A与B。 用A来训练、用B来检测该模型的准确性
然后随机改变B中该属性值的排列, 再次检测该模型的准确性。 两次之差表明了该属性的重要程度。
data: working set, training set(A + B)
算法过程:
1) 将training set分为A B两部分, 用A得到模型, 用B得到准确度。
针对每个属性, 随机改变B中该属性值的排列, 得到新的准确度; 二者之差表明该属性值的重要程度。
因此得到了属性的重要性排序
2) 使用该model, 对working set进行5折交叉验证
3) 移除不重要的一半属性, 然后进行步骤2. 如果属性个数太少则停止
4) 选择上述步骤中交叉验证错误最少的属性集作为最终结果

Random forest只适合属性个数较少的情况。 因此在开始之前可以使用F-score进行一次初始选择

 

Term frequency
使用样本集中特征出现的次数。 直观上认为在样本集中该特征出现的次数越多, 该特征就越重要
===主要用来删除低频特征

Document frequency
样本集中包含该特征的文档树越少, 表明该特征越稀有。
其理论假设为稀有词条或者对分类作用不大,或者是噪声, 可以被删除。

Term frequency * Inverse Document frequency
见上。
Document frequency越大的特征, 其分类作用也不明显。 因此 inverse document frequency

 


特征熵 term entropy
计算第k个特征tk的特征熵:
Entropy(tk) = -sigma(P(ci|tk) * log(p(ci|tk))
P(ci|tk), 表示类ci中包含tk的样本数 除以 总体样本中包含tk的样本数
熵越小, 对分类作用越大。 特征选择时, 选择熵小的特征。
【熵越小, 表示率属于某类的概率越大; 因此对分类作用就越大】
e=-sigma(plogp)
abcd概率各0.25, 那么为表示abcd需要2个bit, 如00表示a,01表示b, 10表示c, 11表示d. 理论上也是需要2个bit
abcd概率分别为0.7,0.1,0.1,0.1
====直接编码, 也需要2个bit。同上。
====haffman编码:0表示a, 10表示b, 110表示c, 111表示d。 平均长度0.7*1+0.1*2+0.1*3*2 = 1.5(bit)
====理论上需要多少bit? -(0.7*log0.7 + 3*0.1*log0.1) = 0.46(bit) 。。。???

由此可见, 概率分布越不均匀, 熵越小; 熵越小,特征在各个类中的概率越不均匀, 该特征对分类的作用越大

 

 

互信息 mutual information
分析特征tk与ci的互信息
                        P(tk, ci)
MI(tk, ci) = log------------ = logP(tk|ci) - logP(tk)
                       P(tk)*P(ci)
P(tk|ci)表示ci中包含tk的样本数 除以 ci中的总样本数
P(tk) 使用全概率计算: sigma P(tk|ci)*p(ci)

全局互信息MI(tk) = sigma(MI(tk,ci))

MI表明tk与ci的相关程度。mi越大说明tk与ci越相关。
MI有利于低频特征,容易引起过学习

 


信息增益 information gain

IG(tk) = - sigma(P(ci) * logP(ci))                      //总的信息熵
         + P(tk) * sigma(P(ci|tk)logP(ci|tk)          //减去 出现该特征时的系统的熵
         + P(tk_) * sigma(P(ci|tk_)logP(ci|tk_)       //减去 不出现该特征时的系统的熵
结果就是这个特征存在时带来的信息增益
        
P(ci|tk_) 表示ci中不包含特征tk的样本数除以总样本中不包含特征tk的样本数

信息增益越大的特征越重要。 选择信息增益大的特征。

机器学习领域应用较为广泛

 

 

 

 

叉方统计量 chi-square
              n [P(tk, ci)*P(tk_,ci_) - P(tk,ci_)*P(tk_,ci)]^2
Chi(tk, ci) = --------------------------------------------------
                  P(tk) * P(ci) * P(tk_) * P(ci_)
n为样本总数
P(tk_,ci_)为样本中不属于类ci的且不包含特征tk的样本数除以样本总数

Chi(tk, ci)度量了特征tk和ci之间的相关程度, Chi越大,表明阅相关, tk越依赖于ci

全局Chi(tk) = sigma(Chi(tk, ci))
另一个改进的全局Chi(tk) = max(Chi(tk, ci))

特征选择时, 选择Chi越大的特征

 

 

 


相关系数 correlation coefficient
将Chi(tk, ci)开方。 选择cc值大的特征。

 


期望交叉熵
                                                     P(ci|tk)
ECE(tk) = P(tk) * sigmaP(ci|tk)log---------
                                                       P(ci)

反映了文本类别的概率分布、以及在出现某特定词条时文本概率分布之间的距离
ECE大, 说明tk与ci越相关

 

 

 

 

 

TODO:
1 计算P(tk) 时, 是包含tk的样本数除以总样本数, 还是使用全概率计算呢? 应该使用全概率吧?

2 实现。。。