banner
大数据平台>大数据技术与应用>scikit-learn特征选择

使用scikit-learn进行特征选择

作者: afenxi来源: afenxi时间:2017-01-31 14:39:34

摘要: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)

banner
看过还想看
可能还想看
热点推荐
Yonghong的价值观:以卓越的数据技术为客户创造价值,实现客户成功。