赞
踩
在机器学习和模式识别中,特征是在观测现象中的一种独立、可测量的属性。选择信息量大的、有差别性的、独立的特征是模式识别、分类和回归问题的关键一步。
最初的原始特征数据集可能太大,或者信息冗余,因此在机器学习的应用中,一个初始步骤就是选择特征的子集,或构建一套新的特征集,减少功能来促进算法的学习,提高泛化能力和可解释性。
在机器视觉中,一幅图像是一个观测,但是特征可能是图中的一条线;在自然语言处理中,一个文本是一个观测,但是其中的段落或者词频可能才是一种特征;在语音识别中,一段语音是一个观测,但是一个词或者音素才是一种特征。
在特征选择时, 经常根据重要性, 将重要的特征选择出来放入训练集合. 相关系数和独立变量方法是常用的方法。
在构建模型的过程中, 有时候也会用到一些复杂的预测模型进行特征的重要性评价和选择, 例如多元自适应回归样条法( Multivariate Adaptive Regression Splines, MARS), 随机森林( Random Forest), 梯度提升机( Gradient Boosted Machines)等.
特征选择的方法可以大致分为:
特征选择的目的:
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)
单变量特征选择是对每个变量单独做统计分析, 之后再根据统计指标来判断变量是否重要.
问题类型 | 统计指标 |
---|---|
分类问题 | 卡方检验, f_classif, 互信息( mutual_info_classif) |
回归问题 | 皮尔逊相关系数(f_regression), 互信息回归(mutual_info_regression) |
其他形式:
总的来说, 基于F检验的算法是用F检验估计来计算不同变量之间的线性依赖度(degree of linear dependency), 基于互信息的算法可以捕获到任意一种统计依赖关系, 但是作为一种非参数检验方法, 需要大量的样本才能得到比较准确的结果.
如果数据的稀疏性很强, 可以选择chi2, mutual_info_regression, mutual_info_classif 这些特征选择方法.
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。