1、特征选择

在现实生活中,一个对象往往具有很多属性(以下称为特征),这些特征大致可以被分成三种主要的类型:
1、相关特征: 对于学习任务(例如分类问题)有帮助,可以提升学习算法的效果;
2、无关特征: 对于我们的算法没有任何帮助,不会给算法的效果带来任何提升;
3、冗余特征: 不会对我们的算法带来新的信息,或者这种特征的信息可以由其他的特征推断出

但是对于一个特定的学习算法来说,哪一个特征是有效的是未知的。因此,需要从所有特征中选择出对于学习算法有益的相关特征。而且在实际应用中,经常会出现维度灾难问题,尤其是在文本处理中。例如,可以把一篇文档表示成一个词向量,但是往往会使用所有的单词作为字典,因此对于一篇可能仅仅包含100或者200个单词的文档,可能需要上万的维度(也就是特征)。如果可以从中选择一部分相关特征构建模型,这个问题就可以得到一定程度的解决。所以,特征选择和降维有一定的相似之处。另外,从上面的例子中可以发现,如果只选择所有特征中的部分特征构建模型,那么可以大大减少学习算法的运行时间,也可以增加模型的可解释性。

因此,进行特征选择的主要目的:
1、降维
2、降低学习任务的难度
3、提升模型的效率

定义:
从N个特征中选择其中M(M<N)个子特征,并且在M个子特征中,准则函数可以达到最优解。

特征选择想要做的是:选择尽可能少的子特征,模型的效果不会显著下降,并且结果的类别分布尽可能的接近真实的类别分类

特征选择的过程:
对于一个有N个特征的对象,可以产生2^N个特征子集,特征选择就是从这些子集中选出对于特定任务最好的子集。特征选择主要包括四个过程:

1、生成过程:生成候选的特征子集
2、评价函数:评价特征子集的好坏
3、停止条件:决定什么时候该停止
4、验证过程:特征子集是否有效


生成过程其实是一个搜索过程,这个过程可以从以下几种情况开始:
1、没有特征
2、所有特征
3、随机特征子集。
在前两种情况下,每次迭代可以增加、删除特征;但是在最后一种情况下,每次迭代随机增加或者删除特征。

评价函数用来评价生成过程中生成的特征子集,产生一个值用来比较当前特征子集和当前最有特征子集,如果这个特征子集更好,那么就取代当前最优子集。

停止条件用来决定迭代过程什么时候停止,生成过程和评价函数可能会对于怎样选择停止条件产生影响。停止条件有以下四种选择:
1、达到预定义的最大迭代次数;
2、达到预定义的最大特征数
3、增加(删除)任何特征不会产生更好的特征子集;
4、根据评价函数,产生最优特征子集。

验证过程并不是特征选择本身的一部分,但是选择出的特征必须是有效。因此,需要使用不同的测试集、学习方法验证选择出来的特征子集,然后比较这些验证结果。

生成过程:
生成过程是一个搜索过程,这个过程主要有以下三个策略:
1、完全搜索:根据评价函数做完全搜索。完全搜索主要有两种:穷举搜索和非穷举搜索;
2、启发式搜索:根据一些启发式规则在每次迭代时,决定剩下的特征是应该被选择还是被拒绝。这种方法很简单并且速度很快,因为它的搜索空间是O(n^2);
3、随机搜索:每次迭代时会设置一些参数,参数的选择会影响特征选择的效果。由于会设置一些参数(例如最大迭代次数),所以搜索空间也远远小于O(2^n)

评价函数:
评价函数主要用来评价选出的特征子集的好坏,一个特征子集是最优的往往指相对于特定的评价函数来说的。评价函数主要用来度量一个特征(或者特征子集)可以区分不同类别的能力。根据具体的评价方法主要有三类:

1、过滤式(filter): 先进行特征选择,然后去训练学习器,所以特征选择的过程与学习器无关。相当于先对于特征进行过滤操作,然后用特征子集来训练分类器。
2、包裹式(wrapper): 直接把最后要使用的分类器作为特征选择的评价函数,对于特定的分类器选择最优的特征子集。
3、Filter和Wrapper组合式算法: 先使用Filter进行特征选择,去掉不相关的特征,降低特征维度;然后利用Wrapper进行特征选择。
4、嵌入式(embedding): 把特征选择的过程与分类器学习的过程融合一起,在学习的过程中进行特征选择。最常见的使用L1正则化进行特征选择。

一般有5中比较常见的评价函数:
1、距离度量: 如果 X 在不同类别中能产生比 Y 大的差异,那么就说明 X 要好于 Y;
2、信息度量: 主要是计算一个特征的信息增益(度量先验不确定性和期望后验不确定性之间的差异);
3、依赖度量: 主要用来度量从一个变量的值预测另一个变量值的能力。最常见的是相关系数:用来发现一个特征和一个类别的相关性。如果 X 和类别的相关性高于 Y与类别的相关性,那么X优于Y。对相关系数做一点改变,用来计算两个特征之间的依赖性,值代表着两个特征之间的冗余度。
4、一致性度量: 对于两个样本,如果它们的类别不同,但是特征值是相同的,那么它们是不一致的;否则是一致的。找到与全集具有同样区分能力的最小子集。严重依赖于特定的训练集和 最小特征偏见(Min-Feature bias)的用法;找到满足可接受的不一致率(用户指定的参数)的最小规模的特征子集。
5、误分类率度量: 主要用于Wrapper式的评价方法中。使用特定的分类器,利用选择的特征子集来预测测试集的类别,用分类器的准确率来作为指标。这种方法准确率很高,但是计算开销较大。

以上摘自:
https://blog.csdn.net/hren_ron/article/details/80914491

1.1 特征选择原因

冗余:部分特征的相关度高,容易消耗计算性能
噪声:部分特征对预测结果有负影响

1.1 特征选择是什么?

特征选择就是单纯地从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后可以改变值、也不改变值,但是选择后的特征维数肯定比选择前小,毕竟我们只选择了其中的一部分特征。

主要方法(三大武器):Filter(过滤式):VarianceThreshold
Embedded(嵌入式):正则化、决策树
Wrapper(包裹式)

1.2 sklearn特征选择API

sklearn.feature_selection.VarianceThreshold

VarianceThreshold语法:

VarianceThreshold(threshold = 0.0)A:删除所有低方差特征B:Variance.fit_transform(X,y) 1、X:numpy array格式的数据[n_samples,n_features]2、返回值:训练集差异低于threshold的特征将被删除。3、默认值是保留所有非零方差特征,即删除所有样本4、中具有相同值的特征。

VarianceThreshold流程(代码演示)
1、初始化VarianceThreshold,指定阀值方差
2、调用fit_transform

例如处理:

[[0, 2, 0, 3],
[0, 1, 4, 3],
[0, 1, 1, 3]]
from sklearn.feature_selection import VarianceThresholddef var():"""特征选择--删除低方差的特征:return: None"""var = VarianceThreshold(threshold=1.0)data = var.fit_transform([[0,2,0,3],[0,1,4,3],[0,1,1,3]])print(data)return Noneif __name__ == "__main__":var()

输出结果为:

[[0][4][1]]

我们发现在三组数据里,我们发现第一列,(注意是观察每一列的数据)全是0,第二列方差小于1,第四列也是相同的值,那么这些列的区分度就会很微弱,也就不具备分析的价值了

06_特征选择,特征选择的原因,sklearn特征选择API相关推荐

  1. 03_数据的特征抽取,sklearn特征抽取API,字典特征抽取DictVectorizer,文本特征抽取CountVectorizer,TF-IDF(TfidfVectorizer),详细案例

    数据的特征抽取 A:特征抽取实例演示 通过演示得出结论: 特征抽取针对非连续型数据 特征抽取对文本等进行特征值化 注:特征值化是为了计算机更好的去理解数据. B:sklearn特征抽取API skle ...

  2. python卡方检验关键词,特征选择——卡方检验(使用Python sklearn进行实现)

    在看这篇文章之前,如果对卡方检验不熟悉,可以先参考:卡方检验 Python有包可以直接实现特征选择,也就是看自变量对因变量的相关性.今天我们先开看一下如何用卡方检验实现特征选择. 1. 首先impor ...

  3. python机器学习库sklearn——特征选择

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 移除低方差特征 VarianceThreshold 是特征选择的一个简单基本方法,它会移除所有那些方差不满足一些阈值的特征.默认情况下 ...

  4. sklearn 特征选择与特征抽取 —— feature_selection、feature_extraction

    1. feature_selection 首先,我们以利用 scikit-learn 对数据进行逻辑分析为例,进行说明 scikit-learn 的使用流程. 首先进行特征筛选(feature sel ...

  5. python特征选择工具_一个Python特征选择工具,助力实现高效机器学习

    选自GitHub 机器之心编译 参与:Panda 鉴于特征选择在机器学习过程中的重要性,数据科学家 William Koehrsen 近日在 GitHub 上公布了一个特征选择器 Python 类,帮 ...

  6. matlab随机森林特征选择,使用随机森林做特征选择

    目录 一.介绍 随机森林模型不仅在预测问题上有着广泛的应用,在特征选择中也有一定的应用,这是因为,随机森林模型在拟合数据后,会对数据属性列,有一个变量重要性的度量,在sklearn中即为随机森林模型的 ...

  7. 特征工程之特征选择_特征工程与特征选择

    特征工程之特征选择

  8. 互信息特征选择python_基于互信息的特征选择算法MATLAB实现 – OmegaXYZ

    在概率论和信息论中,两个随机变量的互信息(Mutual Information,简称MI)或转移信息(transinformation)是变量间相互依赖性的量度.不同于相关系数,互信息并不局限于实值随 ...

  9. 互信息特征选择python_基于互信息的特征选择方法杂谈

    我们现在处于一个数据驱动的时代,但并不是所有的数据都是有意义的.只有有效的数据才能 带给我们"信息",无效的数据并不能带给我们"信息". 如果我们在做一件事情之 ...

最新文章

  1. 允许其它网段访问centos服务器_访问控制列表-ACL
  2. 删除MSI包垃圾信息工具
  3. 启明云端分享| 2.4寸磁编码旋钮屏
  4. 热转印法手工自制单面PCB流程和技巧总结
  5. 如何revert一个merged branch上所有的改动
  6. getter 和 setter方法
  7. 【蓝桥杯单片机】红外接收及NEC红外通信协议
  8. 【数据格式】Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据
  9. 发动机性能测试软件,发动机的性能测试方法
  10. mysql怎么获得权限_mysql怎么给用户加权限
  11. windows创建任务计划(周期执行bat脚本)
  12. Openstack 笔记概要
  13. 安装ORK功能包踩坑之路和解决方案
  14. 记一次PSP游戏文件(iso)提取BGM(cpk文件处理,无后缀音频文件格式转换,pmf文件转换)
  15. centerOS 7.6FTP安装与配置
  16. Python 实现LU分解
  17. Photoshop制作圣诞海报
  18. Machine Learning-数学基础2
  19. 函数最值题目及答案_函数的最值与导数综合测试题(附答案)
  20. 文储研习社第11期 | DAO的前世今生

热门文章

  1. java睡眠后继续执行_Java线程只能有千个,而Go的Goroutine能有上百万个
  2. Django框架深入了解_05 (Django中的缓存、Django解决跨域流程(非简单请求,简单请求)、自动生成接口文档)(二)
  3. 90%的程序员都没有完全回答对 Cookie 和 Session 的区别?
  4. VTK:线图用法实战
  5. OpenCASCADE绘制测试线束:拓扑命令之复杂拓扑
  6. boost::type_traits模块用法的一些示例
  7. boost::graph_as_tree用法的测试程序
  8. GDCM:gdcm::MediaStorage的测试程序
  9. boost::contract模块实现circle的测试程序
  10. DCMTK:读取DICOM图像,添加一个Curve并将其写回