一、特征选择
1、引出:给定的属性集中,包括有效特征数据,也包括无效或者低效的特征数据;显然,有效特征数据才是模型训练中起关键作用的数据。
2、目的:剔除无效特征数据或者低效特征数据。
3、效果:
1) 简化模型:特征数据精选后,模型的训练也会更简单、更快;
2) 训练效果:模型的拟合性能更好;
3) 训练开销:节省计算资源,节省存储资源;
4) 风险规避:维数灾难风险得到规避。
4、缺点: 增加方差
二、特征选择的场景
1、训练数据中确实存在多余或者无用的特征数据,移除这些数据不会导致数据缺损;
2、特征数据较多,样本数据较少。
三、特征数据的处理步骤
1、生成待选的特征数据集合;
2、评价待选的特征数据集合中、各个特征数据的重要性或者好坏;具体的,特征数据与标签数据间是否存在满足要求的关联性,特征数据之间的相似程度;
3、控制计算量,评价函数在达到设定阈值后,可停止计算;
4、验证选出来的多个特征数据是否确实满足要求。
四、实现手段:Filter(过滤法)、Wrapper(包装法)和Embedded(嵌入法)
1、Filter(过滤法)
1)原理:按照发散性或者相关性,对各个特征数据进行评分,根据设定阈值或者设定目标特征数据的数量,确定筛选范围;又可分为,单变量过滤方法和多变量过滤方法;
2)单变量过滤方法:
不考虑多个特征数据间的相关性,考虑各个特征数据与目标标签间的相关性,按照该相关性对多个特征数据进行优先级排序,过滤掉优先级倒数的特征数据;
优点:计算效率高、不易过拟合。
3)多变量过滤方法:
考虑多个特征数据之间的相关性,常用:基于相关性和一致性的特征选择。
4)优点和缺点
优点:不依赖于任何机器学习方法,且不需要进行交叉验证,计算效率比较高;
缺点:没有考虑机器学习算法的特点。
5)常用方法:
覆盖率:根据覆盖频次筛选;例如,100个样本数据,该特征数据仅出现5次,则pass掉;
方差选择法:计算各个特征数据对应的方差,将方差大于设定阈值的保留;
from sklearn.feature_selection import VarianceThrehold
# 方差选择法,返回值为特征选择后的数据
# 参数threhold为方差的阈值
VarianceThreshold(threshold=3).fit_transform(iris.data)
皮尔森(Pearson)相关系数:
样本上的相关系数为:
from sklearn.feature_selection import SelectKBest
from scipy.stats import pearsonr
# 选择K个最好的特征,返回选择特征后的数据
# 第一个参数为计算评估特征是否好的函数,该函数输入特征矩阵和目标向量
# 第一个参数为计算评估特征是否最好的函数,该函数输入特征矩阵和目标向量
# 输出二元组(评分,P值)的数组,数组第i项为第i个特征的评分和P值
# 在此为计算相关系数
# 其中参数k为选择的特征个数
SelectKBest(lambda X, Y: array(map(lambda x: pearsonr(x, Y), X·T)·T, k=2).fit_transform(iris.data, iris.target)
卡方检验:检验定性自变量对定性因变量的相关性。假设自变量有N种取值,因变量有M种取值,考虑自变量等于i且因变量等于j的样本频数的观察值与期望的差距,构建统计量
这个统计量的含义即自变量对因变量的相关性
from sklearn.feature-selection import SelectKBest
from sklearn.feature_selection import chi2
# 选择K个最好的特征,返回选择特征后的数据
SelectKBest(chi2, k=2).fit_transform(iris.data, iris.target)
具体详细列举,可参照: 特征选择方法全面总结 - 知乎
2、Wrapper(包装法)
1)使用机器学习算法,可检测至少两个特征数据之间的交互关系,而且选择的特征
数据子集可让模型的效果达到最优;
2)结合特征子集搜索和评估指标;
3)在每一个特征子集上训练并评估模型,以找到最优子集
4)常用:完全搜索(穷举法)、启发式搜索、随机搜索、递归特征消除法
其中,递归特征消除法代码:
from sklearn.feature-selection import RFE
from sklearn.linear_model import LogisticRegression
# 递归特征消除法,返回特征选择后的数据
# 参数estimator为基模型
# 参数n_features_to_select为选择的特证个数
RFE(estimators=LogisticRegression(). n_features_to_select=2).fit_transform(iris.data, iris.target)
3、Embedded(嵌入法)
1) 将特征选择嵌入到模型的构建过程中,具有包装法与机器学习算法相结合的优点,也具有过滤法计算效率高的优点
2)常用方法:LASSO方法、基于树模型的特征选择方法
from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression
# 带L1惩罚的逻辑回归作为基模型的特征选择
SelectFromModel(LogisticRegression(penalty="l1", C=0.1)).fit_transform(iris.data, iris.target)
from sklearn.feature-selection import SelectFromModel
from sklearn.ensemble import GradientBoostingClassifier
# GBDT作为基模型的特征选择
SelectFromModel(GradientBoostingClassifier()).fit_transform(iris.data, iris.target)
具体的,可参照: 特征选择方法全面总结 - 知乎