剑客
关注科技互联网

使用scikit-learn进行特征选

scikit-learn中提供了用于特征选择的模块feature_selection,主要方法包括方差移除法,卡方检验法,基于L1的特征选择和基于树的特征选择。

使用scikit-learn进行特征选

开始前的准备工作

首先导入所需的库文件,这里只导入numpy和pandas,后面在过程中会陆续导入所需的库文件。

#导入所需的库文件
import numpy as np
import pandas as pd
#读取并设置数据表
data=pd.DataFrame(pd.read_excel('fs.xlsx'))
#设置特征和目标
X = np.array(data[['loan_amnt', 'funded_amnt_inv', 'installment', 'annual_inc', 'dti','inq_last_6mths', 'open_acc', 'revol_bal', 'revol_util', 'total_acc','total_pymnt', 'total_rec_prncp',
'total_rec_int']])
y = np.array(data['loan_status'])

特征数据标准化

导入数据预处理库对特征进行标准化处理。

#导入数据预处理库
from sklearn import preprocessing
#范围0-1缩放标准化
min_max_scaler = preprocessing.MinMaxScaler()
X_scaler=min_max_scaler.fit_transform(X)
#查看特征的维度
X_scaler.shape
(27, 13)

原始特征的维度为27行,13列。

移除方差较低的特征

导入特征选择库中的VarianceThreshold用于通过方差选择特征。方差为0的特征会被自动移除。剩下的特征按设定的方差的阈值进行选择。

#导入sklearn库中的VarianceThreshold
from sklearn.feature_selection import VarianceThreshold
#设置方差的阈值为0.8
sel = VarianceThreshold(threshold=.08)
#选择方差大于0.8的特征
X_sel=sel.fit_transform(X_scaler)
X_sel.shape
(27, 5)

单变量特征选择-卡方检验

导入特征选择库中的SelectKBest和chi2用来计算特征与结果间的相关性,并选择相关性最高的特征。

#导入sklearn库中的SelectKBest和chi2
from sklearn.feature_selection import SelectKBest ,chi2
#选择相关性最高的前5个特征
X_chi2 = SelectKBest(chi2, k=5).fit_transform(X, y)
X_chi2.shape
(27, 5)

基于L1的特征选择

导入LinearSVC和特征选择库中的SelectFromModel,基于L1进行特征选择。

#导入sklearn库中的LinearSVC和SelectFromModel
from sklearn.svm import LinearSVC
from sklearn.feature_selection import SelectFromModel
#基于L1的LinearSVC选择特征
lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X_scaler, y)
model = SelectFromModel(lsvc, prefit=True)
X_lsvc = model.transform(X_scaler)
X_lsvc.shape
(27, 0)

基于树的特征选择

导入SelectFromModel结合ExtraTreesClassifier计算特征重要性,并按重要性阈值选择特征。

#导入sklearn的ExtraTreesClassifier和SelectFromModel
from sklearn.ensemble import ExtraTreesClassifier
from sklearn.feature_selection import SelectFromModel
#基于树模型进行模型选择
clf = ExtraTreesClassifier()
clf = clf.fit(X, y)
#特征重要性(数值越高特征越重要)
clf.feature_importances_
array([ 0.09125597, 0.08141056, 0.04023573, 0.06036499, 0.05710406,
0.04654329, 0.00897838, 0.07429618, 0.09712373, 0.07771509,
0.18477631, 0.10875497, 0.07144073])
#选择特征重要性为1.25倍均值的特征
model = SelectFromModel(clf, threshold='1.25*mean',prefit=True)
#返回所选的特征
X_trees = model.transform(X)
X_trees.shape
(27, 6)

—【所有文章及图片版权归 蓝鲸(王彦平)所有。欢迎转载,但请注明转自“蓝鲸网站分析博客”。】—

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址