scikit-learn中提供了用于特征选择的模块feature_selection,主要方法包括方差移除法,卡方检验法,基于L1的特征选择和基于树的特征选择。
首先导入所需的库文件,这里只导入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)
导入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)
—【所有文章及图片版权归 蓝鲸(王彦平)所有。欢迎转载,但请注明转自“蓝鲸网站分析博客”。】—