特征选择--wrapper,Embedded

wrapper定义

Wrapper:包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。

  • 包装法需要结合后续选择的机器学习算法,一起选择出能使最终算法达到较高性能的特征子集。
  • 根据目标函数,每次选择部分特征,或者排除部分特征。
  • 常用包装法:

递归特征消除法:

  • 简称RFE,使用一个基模型来进行多轮训练,每轮训练后,移除若干权值系数的特征,再基于新的特征集进行下一轮训练。
  • 对特征含有权重的预测模型(例如,线性模型对应参数coefficients),RFE通过递归减少考察的特征集规模来选择特征。预测模型在原始特征上训练,每个特征指定一个权重,随后那些拥有最小绝对值权重的特征会被踢出特征集。如此往复递归,直至剩余的特征数量达到所需的特征数量。
    RFE具体思路:
  • 指定一个有n个特征的数据集。
  • 选择一个算法模型来做RFE的基模型。
  • 指定保留的特征数量 k(k
  • 第一轮对所有特征进行训练,算法会根据基模型的目标函数给出每个特征的
    “得分”或排名,将最小“得分”或排名的特征剔除,这时候特征减少为n-1,对其进行第二轮训练,持续迭代,直到特征保留为k个,这k个特征就是选择的特征。

实例

数据集:
特征选择--wrapper,Embedded_第1张图片
利用递归特征消除法(RFE)选择特征

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
x_rfe=RFE(estimator=LogisticRegression(), n_features_to_select=3).fit(X, y)#指定保留特征数为3,基模型为逻辑回归

print( x_rfe.support_ ) 
print( x_rfe.ranking_ )   
x_rfe.support_ 表示按特征对应位置展示所选特征,True表示保留,False表示剔除。
x_rfe.ranking_中ranking_[i]对应于第i个特征的排名位置,1表示最优特征。  

输出:

[False  True  True  True]
[2 1 1 1]
该方法输出需要保留的3个特征分别是第234个。

embedded

Embedded,也称嵌入法,相比前两种方法要更加复杂,它利用机器学习算法和模型进行训练,得到各个特征的权值系数,根据权值系数从大到小来选择特征。

  • 它类似过滤法,但它是通过机器学习训练来确定特征的优劣,而不是直接从特征的统计学指标来确定特征的优劣。
  • 和包装法相比,嵌入法也是用机器学习的方法来选择特征,区别是不通过不停的筛掉特征来进行训练,每次迭代使用的都是特征全集。
  • 嵌入式特征选择方法是将特征选择过程与学习器训练过程融为一体,两者在同一个优化过程中完成,即在学习器训练过程中自动完成了特征选择。

嵌入法技术

常用嵌入法技术:

  • 线性模型和正则化(Embedded方式)

基于线性回归模型方法:
对于满足回归关系的数据分布,可以利用回归模型的系数来选择特征,就是利用了越是重要的特征,在模型中对应的系数就会越大,而跟输出变量越是无关的特征,对应的系数就会越接近于0这一特点。

基于L1的正则化方法:
正则化是一种回归的形式,它将系数估计(coefficient estimate)朝零的方向进行约束、调整或缩小。也就是说,正则化可以在学习过程中降低模型复杂度和不稳定程度,从而避免过拟合的危险。正则化(Regularization)包括L1、L2正则化。在原始的代价函数后面加上一个L1正则化项,即所有权重w的绝对值的和,再乘以λ,参数 λ 起到了权衡的作用。

正则化特点:

1.L1正则化将回归系数_j的L1范数作为惩罚项加到损失函数上,由于正则项非零,这就迫使那些弱的特征所对应的系数变成0。因此L1正则化往往会使学到的模型很稀疏(系数w经常为0),这个特性使得L1正则化成为一种很好的特征选择方法。
2.L1正则化像非正则化线性模型一样也是不稳定的,如果特征集合中具有相关联的特征,当数据发生细微变化时也有可能导致很大的模型差异。
3. L1正则化能够生成稀疏的模型。

  • 基于树模型的特征选择(Embedded方式)

基于随机森林的嵌入方法:

  • 基于树的预测模型能够用来计算特征的重要程度,因此能用来去除不相关的特征。
  • 基于随机森林的模型选择方法。
  • 随机森林具有准确率高、稳定性强、易于使用等优点,是目前最流行的机器学习算法之一。

随机森林提供的两种常用特征选择的方法:

  • 平均不纯度减少(Mean Decrease Impurity)
  • 平均精度下降 (Mean Decrease Accuracy)

实例2

#调用相关模块
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_boston
from sklearn.linear_model import Lasso
from pandas import DataFrame as df
scaler= StandardScaler()
boston = load_boston()
X = scaler.fit_transform(boston["data"])
Y = boston["target"]
#以数据框形式查看数据,先定义一个数据框类型的变量
boston_df=pd.concat([df(X,columns=boston.feature_names),df(Y,columns=['target'])],axis=1)
# 随机按列查看数据框的5行
boston_df.sample(5,axis=0)



特征选择--wrapper,Embedded_第2张图片

#导入到正则化模型并训练数据
lasso = Lasso(alpha=1)  
#float, 可选,默认 1.0。当 alpha 为 0 时算法等同于普通最小二乘法,不建议将 alpha 设为 0。
lasso.fit( X, Y )
#查看各特征对应系数,非零系数即为保留特征,系数值越大的特征越重要
for i in range( X.shape[1] ):#读取矩阵的一维长度
    print ( boston.feature_names[i],format( lasso.coef_[i], '.3f) )



输出:
特征选择--wrapper,Embedded_第3张图片

你可能感兴趣的:(特征选择--wrapper,Embedded)