import numpy as np import xlrd import matplotlib.pyplot as plt from sklearn.feature_selection import RFE from sklearn.ensemble import RandomForestClassifier from sklearn.svm import SVC from sklearn.linear_model import LogisticRegression from sklearn.model_selection import cross_val_score def excel2m(path):#读excel数据转为矩阵函数 data = xlrd.open_workbook(path) table = data.sheets()[0] # 获取excel中第一个sheet表 nrows = table.nrows # 行数 ncols = table.ncols # 列数 datamatrix = np.zeros((nrows, ncols)) for x in range(ncols): cols = table.col_values(x) cols1 = np.matrix(cols) # 把list转换为矩阵进行矩阵操作 datamatrix[:, x] = cols1 # 把数据进行存储 return datamatrix x=excel2m("factors.xlsx") x=np.matrix(x) y=excel2m("RON.xlsx") y=np.matrix(y) rfc=RandomForestClassifier(n_estimators=10,random_state=0) score=[] for i in range(1,200,10): rfe = RFE(estimator=rfc, n_features_to_select=i, step=10).fit(x, y.astype('int')) rfe.support_.sum() rfe.ranking_ x_wrapper=rfe.transform(x) once=cross_val_score(rfc,x_wrapper,y.astype('int'),cv=5).mean() score.append(once) plt.figure(figsize=[20,5]) plt.plot(range(1,200,10),score) plt.xticks(range(1,200,10)) plt.show() np.savetxt('score.csv', score, delimiter = ',') # 确定选择特征数量后,看各个特征得分排名 # 每个特征的得分排名,特征得分越低(1最好),表示特征越好 #print(rfe.ranking_) #np.savetxt('ranking.csv', rfe.ranking_, delimiter = ',') # 每次交叉迭代各个特征得分 #print(rfe.grid_scores_) #np.savetxt('grid_scores.csv', rfe.grid_scores_, delimiter = ',')
时间: 2024-03-04 22:53:34 浏览: 64
import numpy as np import matplotlib.pyplot as plt import math
这段代码主要实现的功能是特征筛选,其中使用了随机森林分类器(RandomForestClassifier)和递归特征消除算法(RFE),以提高模型的准确性和降低过拟合的风险。
具体流程为:首先将读取的excel数据转换为矩阵形式,然后通过循环调整特征数量,利用RFE算法进行特征筛选,得到一个新的特征子集。接着,利用交叉验证计算新特征子集下的模型得分,并将得分保存在score列表中。最后,通过matplotlib库将score列表中的得分绘制成图表,以便直观地查看得分随特征数量的变化情况。
需要注意的是,代码中还将特征得分排名和每次交叉迭代各个特征得分保存到了csv文件中,并注释了相关代码。
阅读全文