首页 > 代码库 > 【转】[特征选择] An Introduction to Feature Selection 翻译

【转】[特征选择] An Introduction to Feature Selection 翻译

中文原文链接:http://www.cnblogs.com/AHappyCat/p/5318042.html

英文原文链接: An Introduction to Feature Selection

下面的中文译文侧重从原理上进行解释,但是在实际的应用中往往侧重的是实现过程,

可以看考这个链接,描述的比较详细,需要细细的学习:http://blog.csdn.net/bryan__/article/details/51607215

 

【中文原文】

你需要哪些特征来构建一个预测模型?

这是一个困难的问题,需要这个领域的深度知识.

自动选择你的数据中的那些对要解决的问题最有用的或者最相关的特征是可能的. 这个过程叫做特征选择.

在这篇文章中,你会发现特征选择的方法和类型, 下一次你需要为机器学习模型选择特征的时候, 你可以使用和遵循这些方法的一个列表.

 

什么是特征选择

特征选择也被叫做变量选择或者属性选择.

它是自动选择你数据的一些属性的方法,而这些属性是和你要解决的预测模型问题特别相关的.

 

¨特征选择是一个选择相关特征子集,用于构建模型的过程¨

---Wikipedia entry

 

特征选择和降维不同.两种方法都是为了减少数据集的属性数量,但是降维是通过创建新的属性组合,特征选择包含和排除数据中的属性而并不改变它们. (降维可能改变数据属性,特征选择不改变它们)

降维的例子包括PCA(主成份分析),SVD(奇异值分解)和Sammon‘s mapping (Sammon映射).

 

"特征选择对于本身是有用的,但它主要是作为一个过滤器, 它屏蔽掉那些没用的特征,同时保护你的那些现有的特征."

-- Robert

 

特征选择解决的问题

特征选择辅助你创建一个准确的预测模型. 它们帮助你选择特征, 这些特征能够用更少的数据给你很好的或者更好的精度.

特征选择能够被用于鉴定和移掉不需要的,不相关的和冗余的属性,这些属性并不能提高预测模型精度或者可能事实上减少模型精度.

你需要更少的属性,因为它能够降低模型复杂度,而且一个更简单的模型能够被更简单的理解和解释.

 

"变量选择的目的有三个方面:提高预测器的预测性能, 提供更快和更低成本的预测器, 和提供更好的了解产生的数据的基本过程."

-- Guyon

 

特征选择算法

有三种一般类的特征选择算法: 过滤算法,包装算法和嵌入式算法.

 

1. 过滤算法

过滤特征选择方法运用统计方法将一个分值分配给每个特征.这些特征按照分数排序,然后决定是被保留还是从数据集中删除.这个方法通常是单变量且独立的考虑每个特征,或者考虑其依赖变量.

一些过滤方法包括Chi squared test(方卡检验),information gain(信息增益)和correlation coefficient scores(相关系数得分).

2. 包装算法

包装方法考虑一族特征作为搜索问题,不同的组合被准备,检验并和其他组合比较. 我们使用一个预测模型评估特征的组合,然后根据模型精度给每个特征组合一个分数.

这个搜索过程可能有条不紊的例如best-fist搜索算法, 它可能随机例如random hill-climbing 算法.或者它可能是启发式的例如前向和后向传递增添和删除特征的.

一个例子就是递归特征消除算法.

3. 嵌入式算法

嵌入式算法在模型创建的时候,学习哪些特征对于模型精度的贡献最大.最典型的嵌入式特征选择方法是正则化方法.

正则化方法也被称为引入附加约束到预测算法(例如回归算法)的优化,它偏向于较低复杂度的模型.

正则规划算法的例子是Lasso,Elastic Net和Ridge Regression.

 

特征选择教程和方法

在本文之前,我们已经看到许多特征选择的例子了.

  • Weka: 如何用weka选择特征
  • Scikit-learn: 如何用python的scikit-learn库做递归特征删除
  • R: 如何用R做递归特征删除

 

选择特征时的陷阱


特征选择是另一个的应用机器学习过程的重要部分, 如模型选择. 你不可以放弃和忘记.

考虑特征选择在模型选择过程中很重要.如果你不能,你可能会在无意中带入偏见到你的模型中,最终导致过拟合.

 

"...应该在你的训练集以外做特征选择...不这样做,你将会导致训练数据的过拟合."

-- Ben

 

例如,当你使用精度估测方法,例如交叉验证的适合,你必须包含特征选择在每个内循环中. 这意味着特征选择是在模型训练前就已经在准备好的fold中执行了. 准备数据时先做特征选择,然后在模型选择和训练时执行是错误的. (??)

 

"如果我们运用合适的流程,在每个fold上执行特征选择,就不再会有关于特征和fold相关影响的信息".

--Dikran

 

其原因是,做出特征选择的决定是基于整个训练集的,这反过来传递到模型了.这可能会导致一个模型和其他模型相比,被所选择的特征而增强影响,看起来获得更好的结果,而事实上是有偏见的结果.

 

"如果你在所有数据上执行特征选择,然后交叉验证,再在交叉验证过程的每个fold的测试数据同样被用来选择特征, 这就造成了性能分析的偏见.

--Dikran

 

特征选择列表:

Esabelle Guyon 和 Andre Elisseeff  (“An Introduction to Variable and Feature Selection” 的作者)提供了一个特别好的列表, 下次你要为你的模型问题做数据特征选择的时候可以使用这张列表.

我已经把清单的重要部分转载过来啦:

1. 你是否有领域知识? Yes, 那就构建一个更好的特定设置的特征

2. 你的特征相配(尺度)吗? No, 那就归一化这些特征.

3. 你是否怀疑特征独立性? Yes, 通过构建联合特征或者特征的乘积,只要你的计算机资源允许.

4. 你需要修剪输入变量吗? No, 构建析取特征或者加权特征.

5. 你需要单独评估特征吗? Yes, 使用一个变量排序方法;否则无论怎样都去获取一个基本结果.

6. 你需要一个预测器吗? No, 停止.

7. 你怀疑你的数据"脏"吗? Yes, 检测异类例子,使用step5排在顶端的变量;检查和丢弃他们.

8. 你知道什么需要先测试吗? No, 使用一个线性预测器.  使用前向选择方法,用probe作为停止标准; 或者在step5 之后, 使用0范数嵌入方法作为比较, 用增加的特征子集建立一个相同特征的预测器序列. 你能用一个更小子集匹配或者提高性能吗? 如果能的话, 用那个子集尝试一个线性预测器.

9. 你有新的想法,时间,时间资源和足够的例子吗?Yes, 比较一些特征选择方法,包括你的想法,相关参数,后向选择和嵌入式算法. 使用线性和非线性预测器. 用模型选择选择最好的方法.

10. 你需要一个稳定的解吗? Yes, 二次采样你的数据,并为一些"bootstrap"重做你的分析.

 

更多阅读

为了在这个课题中有更深的理解, 你可以选择这个话题的一本书, 如下:

  • Feature Selection for Knowledge Discovery and Data Mining
  • Computational Methods of Feature Selection
  • Computational Intelligence and Feature Selection: Rough and Fuzzy Approaches
  • Subspace, Latent Structure and Feature Selection: Statistical and Optimization Perspectives Workshop
  • Feature Extraction, Construction and Selection: A Data Mining Perspective

特征选择是特征工程的一个子课题. 你可能会喜欢深入看一下特征工程的话题. “Discover Feature Engineering, How to Engineer Features and How to Get Good at It“ , 下一篇博文就是这篇文章的翻译.

【转】[特征选择] An Introduction to Feature Selection 翻译