特征选择方法

特征选择的目标
  1. 特征是否发散:如果特征不发散,基本没有差异,对样本的区分没有作用
  2. 特征与目标的相关性:与目标相关性高的特征应当优先选择
特征选择的方法有过滤法、包装法、嵌入法
  1. 过滤法:按照发散性或者相关性对各个特征进行评分,通过设定阈值或者待选择阈值的个数来选择特征
  2. 包装法:根据目标函数(通常是预测效果评分)每次选择若干特征,或者排除若干特征
  3. 嵌入法:使用机器学习的某些算法或模型进行训练,得到各个特征的权值系数,并根据系数从达到小选择特征
    在这里插入图片描述
特征选择在python中的具体实现
所属方法具体方法
varianceThresholdFilter方差选择法
SelectKBestFilter将可选相关系数、卡方检验或最大信息系数作为得分计算的方法
RFEWrapper递归消除特征法
SelectFromModelEmbedded基于模型的特征选择法

过滤法:相关系数、卡方检验、信息增益、互信息
包装法:完全搜索、启发搜索、随机搜索(遗传算法、模拟退火算法)
嵌入法:决策树

  1. VarianceThreshold
    方差选择法,计算各个特征的方差,然后根据阈值选择方差大于阈值的特征。
from sklearn.feature_selection import VarianceThreshold
from sklearn.datasets import load_iris
iris = load_iris()
VarianceThreshold(threshold=3).fit_transform(iris.data)
  1. SelectKBest
    (1)相关系数法
    计算各个特征对目标值的相关系数及相关系数的P值,然后根据阈值筛选特征。
import numpy as np
from sklearn.datasets import load_iris
iris = load_iris()
from array import array
from sklearn.feature_selection import SelectKBest
from scipy.stats import pearsonr
SelectKBest(
    lambda X,Y: np.array(list(map(lambda x: pearsonr(x,Y), X.T))).T[0],k=2).fit_transform(iris.data, iris.target)

(2)卡方检验
经典的卡方检验是检验定性自变量与定性因变量的相关性。假定自变量有N种取值,因变量有M种取值,考虑自变量等于i且因变量等于j的样本频数的观察值与期望之间的差距,构建统计量:
x 2 = ∑ ( A − E ) 2 / E x^2=∑(A-E)^2/E x2=(AE)2/E

from sklearn.datasets import load_iris
iris = load_iris()
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2

SelectKBest(chi2, k=2).fit_transform(iris.data, iris.target)

(3)最大信息系数法
经典的互信息是评价定性自变量与定性因变量相关性的方法,互信息计算公式如下:
I(X;Y)= ∑_(x∈y) ∑_(y∈x)▒〖p(x,y)log (p(x,y))/(p(x)p(y))〗

import numpy as np
from sklearn.feature_selection import SelectKBest
from minepy import MINE

def mic(x, y):
    m = MINE()
    m.compute_score(x, y)
    retrun (m.mic(), 0.5)

SelectKBest(lambda X,Y: np.array(list(map(lambda x: pearsonr(x,Y), X.T))).T[0],k=2).fit_transform(iris.data, iris.target)
  1. 递归消除特征法RFE
    递归特征消除法使用一个基模型进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

RFE(estimator=LogisticRegression(multi_class='auto',solver='lbfgs',max_iter=500),n_features_to_select=2).fit_transform(iris.data,iris.target)
  1. SelectFromModel
    采用基于模型的特征选择法,有基于惩罚项的特征选择法和基于树模型的特征选择法
    (1)基于惩罚项的特征选择法
    使用带惩罚项的基模型,除了能筛选特征,也能进行降维
from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression
SelectFromModel(LogisticRegression(penalty='l2',C=0.1,solver='lbfgs',multi_class='auto')).fit_transform(iris.data,iris.target)

(2)基于树模型的特征选择法
在树模型中,GBDT梯度提升迭代决策树可以作为基模型进行特征选择

from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import GradientBoostingClassifier
# SelectFromModel(GradientBoostingClassifier()).fit_transform(iris.data, iris.target)
SelectFromModel(GradientBoostingClassifier()).fit_transform(gas_data,gas_target)
  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值