特征选择( Feature Selection )也称特征子集选择( Feature Subset Selection , FSS ),或属性选择( Attribute Selection )。是指从已有的M个特征(Feature)中选择N个特征使得系统的特定指标最优化,是从原始特征中选择出一些最有效特征以降低数据集维度的过程,是提高学习算法性能的一个重要手段,也是模式识别中关键的数据预处理步骤。对于一个学习算法来说,好的学习样本是训练模型的关键。
此外,需要区分特征选择与特征提取。特征提取 ( Feature extraction )是指利用已有的特征计算出一个抽象程度更高的特征集,也指计算得到某个特征的算法。
一、Filter(过滤法)
1、移除低方差的特征 (Removing features with low variance)
假设某特征的特征值只有0和1,并且在所有输入样本中,95%的实例的该特征取值都是1,那就可以认为这个特征作用不大。如果100%都是1,那这个特征就没意义了。当特征值都是离散型变量的时候这种方法才能用,如果是连续型变量,就需要将连续变量离散化之后才能用。可以把它作为特征选择的预处理,先去掉那些取值变化小的特征,然后再从接下来提到的的特征选择方法中选择合适的进行进一步的特征选择。
from sklearn.feature_selection import VarianceThreshold
#方差选择法,返回值为特征选择后的数据
#参数threshold为方差的阈值
VarianceThreshold(threshold=3).fit_transform(iris.data)
2、单变量特征选择
单变量特征选择的原理是分别单独的计算每个变量的某个统计指标,根据该指标来判断哪些指标重要,剔除那些不重要的指标。
对于分类问题(y离散),可采用:
Chi2,f_classif, mutual_info_classif,Mutual_info_classif
对于回归问题(y连续),可采用:
皮尔森相关系数,f_regression, mutual_info_regression,最大信息系数
(1)相关系数(Pearson Correlation)
皮尔森相关系数是一种最简单的,能帮助理解特征和响应变量之间关系的方法,该方法衡量的是变量之间的线性相关性,结果的取值区间为[-1,1],-1表示完全的负相关,+1表示完全的正相关,0表示没有线性相关。
Pearson Correlation速度快、易于计算,经常在拿到数据(经过清洗和特征提取之后的)之后第一时间就执行。Scipy的 pearsonr 方法能够同时计算 相关系数 和p-value.
计算方法:
第一种:
from sklearn.feature_selection import SelectKBest
from scipy.stats import pearsonr
#选择K个最好的特征,返回选择特征后的数据
#第一个参数为计算评估特征是否好的函数,该函数输入特征矩阵和目标向量,输出二元组(评分,P值)的数组,数组第i项为第i个特征的评分和P值。在此定义为计算相关系数
#参数k为选择的特征个数
x_new=SelectKBest(lambda X, Y: array(map(lambda x:pearsonr(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)
第二种:
import numpy as np
from scipy.stats import pearsonr
np.random.seed(0)
size = 300
x = np.random.normal(0, 1, size)
# pearsonr(x, y)的输入为特征矩阵和目标向量
print("Lower noise", pearsonr(x, x + np.random.normal(0, 1, size)))
print("Higher noise", pearsonr(x, x + np.random.normal(0, 10, size)))
(2)假设检验(Hypothesis Test)
Chi2:经典的卡方检验是检验定性自变量对定性因变量的相关性,对应于sklearn中的chi2
F分布的假设检验:对应于sklearn中的F_classif、F_regression
(3)互信息和最大信息系数 (Mutual information and maximal information coefficient (MIC))
互信息为随机变量X与Y之间的互信息I(X;Y)为单个事件之间互信息的数学期望,也是评价定性自变量对定性因变量的相关性,计算公式:
I ( X ; Y ) = E [ I ( x i ; y j ) ] = ∑ x i ∈ X ∑ y j ∈ Y p ( x i , y j ) log p ( x i , y j ) p ( x i ) p ( y j ) I(X;Y) = E[I({x_i};{y_j})] = \sum\limits_{
{x_i} \in X} {\sum\limits_{
{y_j} \in Y} {p({x_i},{y_j})} } \log \frac{
{p({x_i},{y_j})}}{
{p({x_i})p({y_j})}} I(X;