使用scikit-learn进行特征选

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

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

使用scikit-learn进行特征选

开始前的准备工作

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

#导入所需的库文件import numpy as npimport 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库中的VarianceThresholdfrom sklearn.feature_selection import VarianceThreshold#设置方差的阈值为0.8sel = VarianceThreshold(threshold=.08)#选择方差大于0.8的特征X_sel=sel.fit_transform(X_scaler)X_sel.shape(27, 5)

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

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

#导入sklearn库中的SelectKBest和chi2from 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和SelectFromModelfrom sklearn.svm import LinearSVCfrom 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和SelectFromModelfrom sklearn.ensemble import ExtraTreesClassifierfrom 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
到底啦