携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情
特征选择:
本质:选取并删除冗杂和不相关特征,降低维度。通常与pca或lda结合使用,将高维空间的样本转换到低维空间,达到初步降维的目的,然后再通过特征选择来进一步降维。
作用:
-
提高泛化能力,减少过拟合
-
减少数据量,提高计算速度
-
增加了可视化的可能性
-
节省数据存储空间和减少输入数据带宽
-
减少冗余
-
减少与目标值相关性弱的特征,确定影响目标值的主要特征
-
增强了特征和特征值之间的理解,也就是一列数据只解释一个相对应的特征。
Removing features with low variance(过滤)
我们先举个例子,例如,如果某一特征的特征值分布是90%-95%为某一常数值a,其它特征值为另一与a数值差别不大的常数值b或者多个与a差别不大的数值,那么我们认为这样的特征对整个模型影响是十分有限的;如果某一特征值的分布超过95%,我们就可以认为该特征的作用基本可以忽略,如果某特征仅有一个特征值,那么该特征就无任何意义,必须删除。
上面例子的几种情况中,特征方差都十分小,这就说明小方差的特征由于其作用太过有限因此是可以考虑删除的。然而遗憾的是该方法只适合离散数据。
import numpy as np
import pandas as pd
from sklearn.feature_selection import VarianceThreshold
from scipy.stats import f
np.random.seed(4)
X = np.random.randint(6,8,(300,5))
X_fr=pd.DataFrame(X)
X_fr[X_fr[0]==6]=7
selector=VarianceThreshold(threshold=(0.05))
selector.fit_transform(X)#建议阈值为0.05左右
array([[7, 7, 7, 7],
[7, 7, 7, 7],
[7, 7, 7, 7],
...,
[7, 7, 7, 7],
[7, 7, 7, 7],
[7, 7, 7, 6]])
selector.variances_
array([0. , 0.21 , 0.20305556, 0.20728889, 0.2016 ])
Univariate feature selection
单变量特征选择的原理是分别单独的计算每个特征的某个统计指标,根据该指标来判断哪些特征重要,剔除那些不重要的特征。
通常对于分类问题(y离散),可采用:
卡方检验,f_classif, mutual_info_classif,互信息
对于回归问题(y连续),可采用:
皮尔森相关系数,f_regression, mutual_info_regression,最大信息系数,距离相关系数