特征工程:特征选择

目录


一、前言

二、正文

Ⅰ.基于统计方法的特征选择

Ⅱ.基于递归消除特征发

Ⅲ.基于机器学习的方法

三、结语


一、前言

 特征选择是使用某些特征统计的方法,从数据中选出有用的特征,把数据中无用的特征抛弃掉,该方法不会产生新的特征,常用的方法有基于统计方法的特征选择、利用地柜消除法选择有用的特征、利用机器学习算法选择重要的特征等。

 

 

二、正文

 

Ⅰ.基于统计方法的特征选择

 

from sklearn.feature_selection import VarianceThreshold,f_classif
from sklearn.datasets import load_wine
wine_x,wine_y=load_wine(return_X_y=True)
print(wine_x.shape)
print(np.unique(wine_y,return_counts=True))
#输出结果
(178, 13)
(array([0, 1, 2]), array([59, 71, 48], dtype=int64))

 读取多分类关于酒的数据。从结果可以知道该数据有178个样本,13个特征,包含三个类别,每一类有59,71,48个样本。shape帮助我们得知了数据是几×几的大小,unique方法则是去重的操作,return_counts=True返回了每个元素在旧列表中出现的次数。

 

VTH=VarianceThreshold(threshold=0.5)
VTH_wine_x=VTH.fit_transform(wine_x)
print(VTH_wine_x.shape)
#输出结果
(178, 8)

 基于统计方法的特征选择,常用的方法有剔除低方差的特征:使用卡方值,互信息,方差分析等方式选择K个特征。剔除方差则用到了sklearn中的VarianceThreshold方法方法将门槛(threshold)设置为0.5,然后归一化处理得到数据结果。可以从结果观察发现输出结果只保留了8个方差大于0.5的特征。

VTH.variances_>0.5
#输出结果
array([ True,  True, False,  True,  True, False,  True, False, False,
        True, False,  True,  True])

 通过如上方式我们可以确定哪些特征被保留,哪些特征被剔除。

from sklearn.feature_selection import SelectKBest,f_classif,chi2,mutual_info_classif
Kbest=SelectKBest(f_classif,k=5)
Kbest_wine_x=Kbest.fit_transform(wine_x,wine_y)
print(Kbest_wine_x.shape)
#输出结果
(178, 5)

从数据集中选择指定数目的特征数量,其中利用方差分析的F统计量选择5个特征。

 

from sklearn.feature_selection import SelectKBest,f_classif,chi2,mutual_info_classif
Kbest_chi2=SelectKBest(chi2,k=5)
Kbest_wine_x2=Kbest_chi2.fit_transform(wine_x,wine_y)
print(Kbest_wine_x2.shape)
#输出结果
(178, 5)

或者我们利用SelectKbest,利用卡方值选择5个特征,结果也是如保留五个特征。

from sklearn.feature_selection import SelectKBest,f_classif,chi2,mutual_info_classif
Kbest_mi=SelectKBest(mutual_info_classif,k=5)
Kbest_wine_x3=Kbest_mi.fit_transform(wine_x,wine_y)
print(Kbest_wine_x3.shape)

我们利用SelectKbest,利用互信息选择5个特征,结果也是如保留五个特征。

 

Ⅱ.基于递归消除特征发

 

from sklearn.feature_selection import RFE,RFECV
from sklearn.ensemble import RandomForestClassifier
model=RandomForestClassifier(random_state=0)
rfe=RFE(estimator=model,n_features_to_select=9)
rfe_wine_x=rfe.fit_transform(wine_x,wine_y)
print("特征是否被选中:\n",rfe.support_)
print("获取数据特征的尺寸:\n",rfe_wine_x.shape)
#输出结果
特征是否被选中:
 [ True False False  True  True  True  True False False  True  True  True
  True]
print("获取数据特征的尺寸:\n",rfe_wine_x.shape)
获取数据特征的尺寸:
 (178, 9)

递归消除特征法是使用一个基模型进行多轮训练,每轮训练后,消除若干不重要的特征,再基于新的特征集进行下一轮训练。它使用模型的精度来识别哪些属性或者哪些属性组和对预测目标属性的贡献最大,然后消除无用的特征。REF是递归消除法,REFCV是交叉递归消除法。

 保留了四个特征,保留九个特征。

from sklearn.feature_selection import RFE,RFECV
from sklearn.ensemble import RandomForestClassifier
model=RandomForestClassifier(random_state=0)
rfecv=RFECV(estimator=model,min_features_to_select=5,cv=5)
rfecv_wine_x=rfecv.fit_transform(wine_x,wine_y)
print("特征是否被选中:\n",rfecv.support_)
print("获取数据特征的尺寸:\n",rfecv_wine_x.shape)
#输出结果
 [ True  True False  True  True  True  True  True  True  True  True  True
  True]
>>> print("获取数据特征的尺寸:\n",rfecv_wine_x.shape)
获取数据特征的尺寸:
 (178, 12)

在递归消除特征法之后还可以使用交叉递归消除法。

仍旧使用随即森林基模型,然后使用cv参数设置5折交叉检验进行递归消除特征,同时设置min_features_to_select指定要选择的最少特征数量。

从结果看,只剔除了一个数据特征。

 

Ⅲ.基于机器学习的方法

 

from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestClassifier
rfc=RandomForestClassifier(n_estimators=100,random_state=0)
rfc=rfc.fit(wine_x,wine_y)
sfm=SelectFromModel(estimator=rfc,prefit=True,max_features=10)
sfm_wine_x=sfm.transform(wine_x)
print(sfm_wine_x.shape)
#输出结果
(178, 6)

 首先使用随机森林进行特征选择,然后rfc.fit(wine_x,wine_y)使用模型进行拟合,SelectFromModel定义从模型中进行特征选择的选择器,estimator=rfc进行特征选择的模型,prefit=True对模型进行预训练,max_features=10选择的最大特征数量。sfm.transform(wine_x)将模型选择器作用于数据特征。

通过结果可以发现,有6个特征被选择出来。

 

from sklearn.feature_selection import SelectFromModel
from sklearn.svm import LinearSVC
svc=LinearSVC(penalty='l1',dual=False,C=0.05)
svc=svc.fit(wine_x,wine_y)
sfm=SelectFromModel(estimator=svc,prefit=True,max_features=10)
sfm_wine_x=sfm.transform(wine_x)
print(sfm_wine_x.shape)
#输出结果
(178, 8)

 基础模型可以使用l1范数,则可以使用l1范数进行选择,利用向量机分类器。LinearSVC(penalty='l1',dual=False,C=0.05)在构建进行向量机分类时使用范数l1进行约束(penalty),estimator=svc进行特征选择的模型要对应好。

从结果可以看到有8个特征被选择出来。

 

三、结语

 

 特征选择就到这里了,希望能够帮到你,点赞+收藏,以备不时之需,关注我,有新的数据分析文章发布会第一时间通知你哦。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值