降维中的特征选择(转)

在数据挖掘过程中,高维数据是非常棘手的研究对象。特别是在文本挖掘、图像处理和基因数据分析中,维度过高使很多学习器无法工作或效率降低,所以降维也是数据预处理过程的一项必要任务。降维大致有两大类别,一类是从原始维度中提取新的维度,例如主成分分析或因子分析,再或者是奇异值分解或是多维标度分析。另一类是从原始维度中选择一些子集,即称为特征选择(Feature Selection),或者叫作最佳子集选择。特征选择本质上继承了Occam‘s razor的思想,从一组特征中选出一些最有效的特征,使构造出来的模型更好。
进行特征选择的好处在于:

  • 避免过度拟合,改进预测性能
  • 使学习器运行更快,效能更高
  • 剔除不相关的特征使模型更为简单,容易解释

特征选择有三种基本的方法:

嵌入(embed):学习算法中本来就包含有特征选择的过程,例如决策树一类的分类器,它们在决定分枝点时就会选择最有效的特征来对数据进行划分。但这种方法是在局部空间中进行优选,效果相对有限。

封装(Wrapper): 特征选择过程与训练过程整合在一起,以模型的预测能力作为衡量特征子集的选择标准,例如分类精度,有时也可加入复杂度惩罚因子。多元线性回归中的前向搜索和后向搜索可以说是封装方法的一种简单实现。不同的学习算法要搭配不同的封装方法,如果是线性分类器,可以采用之前博文谈到的LASSO方法(glmnet包)。如果是非线性分类器,如树模型则可以采用随机森林封装(RRF包)。封装法可以选择出高质量的子集,但速度会比较慢。

过滤(Filter): 特征选择过程独立于训练过程,以分析特征子集内部特点来预先筛选,与学习器的选择无关。过滤器的评价函数通常包括了相关性、距离、信息增益等。在数据预处理过程中删除那些取值为常数的特征就是过滤方法的一种。过滤法速度快但有可能删除有用的特征。 在实务中进行特征选择可以先借由专家知识来初步筛选,再用过滤法快速筛选无关变量,最后采用封装法得到最优子集和模型结果。R语言中的caret包就提供了过滤和封装两种方法来进行特征选择。下面则是一个简单的示范:

# 加载扩展包和数据集mdrr,得到自变量集合mdrrDescr和因变量mdrrClass
library(caret)
data(mdrr)
# 先删去近似于常量的变量
zerovar <- nearZeroVar(mdrrDescr)
newdata1 <- mdrrDescr[,-zerovar]
# 再删去相关度过高的自变量
descrCorr <- cor(newdata1)
highCorr <- findCorrelation(descrCorr, 0.90)
newdata2 <- newdata1[, -highCorr]
# 数据预处理步骤(标准化,缺失值处理)
Process <- preProcess(newdata2)
newdata3 <- predict(Process, newdata2)
# 用sbf函数实施过滤方法,这里是用随机森林来评价变量的重要性
data.filter <- sbf(newdata3,mdrrClass,
              sbfControl = sbfControl(functions=rfSBF,
                                      verbose=F,
                                      method=‘cv‘))
# 根据上面的过滤器筛选出67个变量
x <- newdata3[data.filter$optVariables]
# 再用rfe函数实施封装方法,建立的模型仍是随机森林
profile <- rfe(x,mdrrClass,
               sizes = c(10,20,30,50,60),
               rfeControl = rfeControl(functions=rfFuncs
               ,method=‘cv‘))
# 将结果绘图,发现20-30个变量的模型精度最高
plot(profile,type=c(‘o‘,‘g‘))

sbf和rfe函数都允许用户使用自定义的学习器进行特征选择,灵活度很高。另外在Rweka包中也有大量的特征选择方法可以使用。

时间: 2024-10-11 00:19:43

降维中的特征选择(转)的相关文章

降维中的特征选择

在数据挖掘过程中,高维数据是非常棘手的研究对象.特别是在文本挖掘.图像处理和基因数据分析中,维度过高使很多学习器无法工作或效率降低,所以降维也是数据预处理过程的一项必要任务.降维大致有两大类别,一类是从原始维度中提取新的维度,例如主成分分析或因子分析,再或者是奇异值分解或是多维标度分析.另一类是从原始维度中选择一些子集,即称为特征选择(Feature Selection),或者叫作最佳子集选择.特征选择本质上继承了Occam's razor的思想,从一组特征中选出一些最有效的特征,使构造出来的模

奇异值分解(SVD)原理与在降维中的应用

奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域.是很多机器学习算法的基石.本文就对SVD的原理做一个总结,并讨论在在PCA降维算法中是如何运用运用SVD的. 1. 回顾特征值和特征向量 我们首先回顾下特征值和特征向量的定义如下:$$Ax=\lambda x$$ 其中A是一个$n \times n$的矩阵,$x$是一个$n$维向量,则我们说$\lam

机器学习中的特征选择filter

来源地址:https://www.cnblogs.com/bjwu/p/9103002.html Filter-移除低均方差的特征 代码: from sklearn.feature_selection import VarianceThreshold X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]] sel = VarianceThreshold(threshold=(0.2) sel.fit_trans

机器学习之特征选择和降维的理解

在机器学习中,特征选择和降维感觉好像差不多,维度都降低了,今天和其他同学交流学习才知道其实不然,区别很大. 一般情况下,我们不会使用原始数据直接去进行训练,因为原始数据的特征明显,信息丰富,我们训练后的效果对于训练集非常好,而对于测试集来说就很差了.这就是过拟合问题. 当我们进行特征提取后,维度依然不减,为了解决过拟合问题,就使用降维(常用PCA)或特征选择. 对于特征选择,就是从众多个特征中选择部分特征作为训练集的特征,抛弃剩余部分的特征,这样维度就减少了,但是选中的这部分特征就是原始数据中的

机器学习中特征选择概述

1. 背景 1.1 问题 在机器学习的实际应用中,特征数量可能较多,其中可能存在不相关的特征,特征之间也可能存在相关性,容易导致如下的后果: (1) 特征个数越多,分析特征.训练模型所需的时间就越长,模型也会越复杂. (2) 特征个数越多,容易引起"维度灾难",其推广能力会下降. (3) 特征个数越多,容易导致机器学习中经常出现的特征稀疏的问题,导致模型效果下降. (4)对于模型来说,可能会导致不适定的情况,即是解出的参数会因为样本的微小变化而出现大的波动. 特征选择,能剔除不相关.冗

机器学习 特征工程之特征选择

概念 首先看一下维基百科中关于特征选择的介绍: 在机器学习和统计学中,特征选择 也被称为变量选择.属性选择 或变量子集选择 .它是指:为了构建模型而选择相关特征(即属性.指标)子集的过程. 在机器学习中,每个特征对于目标类别的影响并不相同,所以需要从特征集中挑选出一组最具统计意义的特征子集,把其他无用数据删掉,达到降维的目的. 特征选择的目标是寻找最优特征子集.特征选择能剔除不相关(irrelevant)或冗余(redundant )的特征,从而达到减少特征个数,提高模型精确度,减少运行时间的目

【特征工程】特征选择与特征学习

http://www.jianshu.com/p/ab697790090f 特征选择与特征学习 在机器学习的具体实践任务中,选择一组具有代表性的特征用于构建模型是非常重要的问题.特征选择通常选择与类别相关性强.且特征彼此间相关性弱的特征子集,具体特征选择算法通过定义合适的子集评价函数来体现.在现实世界中,数据通常是复杂冗余,富有变化的,有必要从原始数据发现有用的特性.人工选取出来的特征依赖人力和专业知识,不利于推广.于是我们需要通过机器来学习和抽取特征,促进特征工程的工作更加快速.有效. 特征选

机器学习之(四)特征工程以及特征选择的工程方法

关于特征工程(Feature Engineering),已经是很古老很常见的话题了,坊间常说:"数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已".由此可见,特征工程在机器学习中占有相当重要的地位.在实际应用当中,可以说特征工程是机器学习成功的关键.纵观Kaggle.KDD等国内外大大小小的比赛,每个竞赛的冠军其实并没有用到很高深的算法,大多数都是在特征工程这个环节做出了出色的工作,然后使用一些常见的算法,比如LR,就能得到出色的性能.遗憾的是,在很多的书籍中并没有直接

特征选择的3钟方法

当数据维数比较大时,就需要进行降维,特征选择是降维的一种主要方式,又包括3种方法:Filter.Wrapper和Enbedding. 1. Filter 过滤器方法,这种方法首先选定特征,再来进行学习.根据每一个属性的一些指标(如方差等),来确定这个属性的重要程度,然后对所有属性按照重要程度排序,从高到低的选择属性.选定了属性以后,再来进行训练.比如Fisher Score.Laplacian Score等.这种方法其实不大好,因为决定特征选择效果的不是单个的属性,而是属性的集合,比如属性A.B