使用scikit-learn进行特征选

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

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)

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

未登录用户
全部评论0
到底啦