当前位置:   article > 正文

特征工程: 特征, 特征提取和特征选择_特征提取特征工程特征选择

特征提取特征工程特征选择

机器学习中的特征

在机器学习和模式识别中,特征是在观测现象中的一种独立、可测量的属性。选择信息量大的、有差别性的、独立的特征是模式识别、分类和回归问题的关键一步。
最初的原始特征数据集可能太大,或者信息冗余,因此在机器学习的应用中,一个初始步骤就是选择特征的子集,或构建一套新的特征集,减少功能来促进算法的学习,提高泛化能力和可解释性。
在机器视觉中,一幅图像是一个观测,但是特征可能是图中的一条线;在自然语言处理中,一个文本是一个观测,但是其中的段落或者词频可能才是一种特征;在语音识别中,一段语音是一个观测,但是一个词或者音素才是一种特征。

特征的重要性

在特征选择时, 经常根据重要性, 将重要的特征选择出来放入训练集合. 相关系数和独立变量方法是常用的方法。
在构建模型的过程中, 有时候也会用到一些复杂的预测模型进行特征的重要性评价和选择, 例如多元自适应回归样条法( Multivariate Adaptive Regression Splines, MARS), 随机森林( Random Forest), 梯度提升机( Gradient Boosted Machines)等.

特征提取和特征选择

  • 特征提取
    对原始观测进行降维以便于建模的过程, 对于表格式的数据, 可以用主成分分析PCA, 聚类等方法; 对于图像数据, 可以用线(line)/边缘(edge)提取, 对于视频, 音频数据, 很多数字信号处理的方法都可以用于特征提取.
  • 特征选择
    特征选择是自动地选择出对于问题最重要的特征子集的过程. 由于不同特征对模型准确度的影响程度不同, 特征选择算法用评分排序, 或者用反复实验来搜索出特征子集, 自动创建并评估模型得到最佳特征子集. 另外还有一些方法将特征选择作为模型的附加功能, 例如逐步回归法( stepwise regression)
    sklearn的feature_selection模块在特征选择和样本集合降维上, 用来提高模型的正确率或者提高他们在高维度数据上的表现.

特征选择的方法可以大致分为:

  1. Filter: 过滤法, 按照方差或者相关性对特征评分, 根据阈值选择特征
  2. Wrapper: 包装法, 根据目标函数(预测效果评分), 选择/排除若干特征

特征选择的目的:

  1. 降维, 增强模型泛化能力, 减少过拟合
  2. 便于理解特征和标签之间的关系

去除方差较小的特征

VarianceThreshold是一个简单的特征选择基准方法, 该方法就是去除所有没有达到指定阈值的特征. 默认是去除所有零方差的数据, 例如那些在所有样本中都一样的特征.

举例来说, 我们有一个数据集合, 所有的数据都是布尔值, 我们想去掉80%的概率上不是0就是1的特征维度, 对于布尔型的数据来说, 服从伯努利分布, 理论方差为:
Var[X]=p(1-p)

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.8*(1-0.8)))
sel.fit_transform(X)

  • 1
  • 2
  • 3
  • 4
  • 5

单变量特征选择 (Univariate feature selection)

单变量特征选择是对每个变量单独做统计分析, 之后再根据统计指标来判断变量是否重要.

问题类型 统计指标
分类问题 卡方检验, f_classif, 互信息( mutual_info_classif)
回归问题 皮尔逊相关系数(f_regression), 互信息回归(mutual_info_regression)

其他形式:

  • SelectKBest: 仅保留得分K名以内的所有特征(TOP k)
  • SelectPercentile 仅保留指定前k百分比的数据(TOP k%)
  • 单变量检验, 例如假阳性比例SelectFpr, 伪发现率 SelectFdr, 族系误差率SelectFwe.
  • GenericUnivariateSelect 允许设置特征选择参数, 不同的选择策略可以使用超参数调优, 从而找到最佳单变量特征选择策略.

总的来说, 基于F检验的算法是用F检验估计来计算不同变量之间的线性依赖度(degree of linear dependency), 基于互信息的算法可以捕获到任意一种统计依赖关系, 但是作为一种非参数检验方法, 需要大量的样本才能得到比较准确的结果.

如果数据的稀疏性很强, 可以选择chi2, mutual_info_regression, mutual_info_classif 这些特征选择方法.

F检验与互信息

sklearn的官方教程给出了关于F检验和互信息区别的说明. 假设有3个特征 x1, x2, x3 都服从[0,1]正态分布,
目标函数如下:
y=x_1+sin(6pix_2)+0.1*N(0,1)
显然, y的取值与x_3完全不相关. 下面这段代码用了F检验和互信息两种方法给出了x与y之间的依赖关系.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.feature_selection import f_regression, mutual_info_regression

np.random.seed(0)
X = np.random.rand(1000, 3)
y = X[:, 0] + np.sin(6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/911444
推荐阅读
相关标签
  

闽ICP备14008679号