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 实现。。。

feture selection相关推荐

  1. 方差过滤: Removing features with low variance

    方差特征选择的原理与使用 VarianceThreshold 是特征选择的一个简单基本方法,其原理在于–底方差的特征的预测效果往往不好.而VarianceThreshold会移除所有那些方差不满足一些 ...

  2. R语言使用caret包的findCorrelation函数批量删除相关性冗余特征、实现特征筛选(feature selection)、剔除高相关的变量

    R语言使用caret包的findCorrelation函数批量删除相关性冗余特征.实现特征筛选(feature selection).剔除高相关的变量 目录

  3. R语言对dataframe进行行数据筛选(row selection)多种方案:使用R原生方法、data.table、dplyr等方案

    R语言对dataframe进行行数据筛选(row selection)多种方案:使用R原生方法.data.table.dplyr等方案 目录

  4. R语言基于随机森林进行特征选择(feature selection)

    R语言基于随机森林进行特征选择(feature selection) 目录 R语言基于随机森林进行特征选择(feature selection)

  5. R语言常用线性模型特征筛选(feature selection)技术实战:基于前列腺特异性抗原(PSA)数据

    R语言常用线性模型特征筛选(feature selection)技术实战 目录 R语言常用线性模型特征筛选(feature selection)技术实战

  6. R语言基于线性回归(Linear Regression)进行特征筛选(feature selection)

    R语言基于线性回归(Linear Regression)进行特征筛选(feature selection) 对一个学习任务来说,给定属性集,有些属性很有用,另一些则可能没什么用.这里的属性即称为&qu ...

  7. R语言基于LASSO进行特征筛选(feature selection)

    R语言基于LASSO进行特征筛选(feature selection) 对一个学习任务来说,给定属性集,有些属性很有用,另一些则可能没什么用.这里的属性即称为"特征"(featur ...

  8. R语言基于Boruta进行机器学习特征筛选(Feature Selection)

    R语言基于Boruta进行机器学习特征筛选(Feature Selection) 对一个学习任务来说,给定属性集,有些属性很有用,另一些则可能没什么用.这里的属性即称为"特征"(f ...

  9. sklearn基于make_scorer函数为Logistic模型构建自定义损失函数并可视化误差图(lambda selection)和系数图(trace plot)+代码实战

    sklearn基于make_scorer函数为Logistic模型构建自定义损失函数并可视化误差图(lambda selection)和系数图(trace plot)+代码实战 # 自定义损失函数 i ...

最新文章

  1. Apache Hudi的写时复制和读时合并
  2. 深度神经网络中的Inception模块介绍
  3. 查看Linux服务器下的内存使用情况
  4. squid cache_peer 参数详解
  5. 年轮蛋糕JOI2014Final
  6. 【5】青龙面板系列教程之Nolanjdc的安装【1月17作者删库,不用尝试了】
  7. IDT 信息设计工具使用
  8. bash mysql count()_【MySQL】性能优化之 count(*) VS count(col)
  9. mysql repos_mysql yum源安装
  10. jdk5.0的新特性
  11. 粉丝大失所望,罗永浩回应:做主播赚的不是脏钱
  12. SignalR循序渐进(三)简易的集群通讯组件
  13. Beta冲刺 day4
  14. ios添加全局悬浮按钮_MIUI10快报:全局透明壁纸上线,本地视频支持设为锁屏壁纸...
  15. java 汉字拼音首字母_java获取汉字拼音首字母
  16. 百度云盘批量转存工具使用教程
  17. Java合并PDF文件方式
  18. 无法打开FTP在 windows资源管理器中打开FTP站点解决方法
  19. C# dgv自动排序后,各种样式设定无效的解决办法
  20. python做excel数据分析带gui_Python进阶量化交易专栏场外篇25-GUI工具实现excel功能...

热门文章

  1. 【Linux】8.安装tensorrt和遇到的问题及解决方法
  2. 《深入理解Java虚拟机》笔记6——高效并发
  3. Java实现 二叉搜索树算法(BST)
  4. 160家优秀国外技术公司博客
  5. 程序员面试题精选100题(61)-数对之差的最大值[算法]
  6. 快速了解Scala技术栈
  7. Day 18: BoilerPipe —— Java开发者的文章提取工具
  8. WPF#39;s Style BasedOn
  9. db_recovery_file_dest_size 修改大一点及删除归档日志 |转|
  10. 摩托罗拉移动员裁员重点是研发