在 RFECV scikit-learn 中获取特性
Getting features in RFECV scikit-learn
我想知道是否有针对特定分数的功能:
在那种情况下,我想知道,当#Features = 10 时,选择的哪 10 个特征给出了那个峰值。
有什么想法吗?
编辑:
这是用于获取该图的代码:
from sklearn.feature_selection import RFECV
from sklearn.model_selection import KFold,StratifiedKFold #for K-fold cross validation
from sklearn.ensemble import RandomForestClassifier #Random Forest
# The "accuracy" scoring is proportional to the number of correct classifications
#kfold = StratifiedKFold(n_splits=10, random_state=1) # k=10, split the data into 10 equal parts
model_Linear_SVM=svm.SVC(kernel='linear', probability=True)
rfecv = RFECV(estimator=model_Linear_SVM, step=1, cv=kfold,scoring='accuracy') #5-fold cross-validation
rfecv = rfecv.fit(X, y)
print('Optimal number of features :', rfecv.n_features_)
print('Best features :', X.columns[rfecv.support_])
print('Original features :', X.columns)
plt.figure()
plt.xlabel("Number of features selected")
plt.ylabel("Cross validation score \n of number of selected features")
plt.plot(range(1, len(rfecv.grid_scores_) + 1), rfecv.grid_scores_)
plt.show()
首先,你可以看到它选择了哪些特征,其中交叉验证分数最大(在你的情况下,这对应于特征数量 17 或 21,我从图中不确定)
rfecv.support_
或
rfecv.ranking_
然后您可以通过
计算所选特征的重要性(对于 cv 分数曲线的峰值)
np.absolute(rfecv.estimator_.coef_)
用于简单估算器或
rfecv.estimator_.feature_importances_
如果你的估计器是某种整体,比如随机森林。
然后可以在循环中将最不重要的特征一一去掉,对剩余的特征集重新计算rfecv。
我想知道是否有针对特定分数的功能:
在那种情况下,我想知道,当#Features = 10 时,选择的哪 10 个特征给出了那个峰值。
有什么想法吗?
编辑:
这是用于获取该图的代码:
from sklearn.feature_selection import RFECV
from sklearn.model_selection import KFold,StratifiedKFold #for K-fold cross validation
from sklearn.ensemble import RandomForestClassifier #Random Forest
# The "accuracy" scoring is proportional to the number of correct classifications
#kfold = StratifiedKFold(n_splits=10, random_state=1) # k=10, split the data into 10 equal parts
model_Linear_SVM=svm.SVC(kernel='linear', probability=True)
rfecv = RFECV(estimator=model_Linear_SVM, step=1, cv=kfold,scoring='accuracy') #5-fold cross-validation
rfecv = rfecv.fit(X, y)
print('Optimal number of features :', rfecv.n_features_)
print('Best features :', X.columns[rfecv.support_])
print('Original features :', X.columns)
plt.figure()
plt.xlabel("Number of features selected")
plt.ylabel("Cross validation score \n of number of selected features")
plt.plot(range(1, len(rfecv.grid_scores_) + 1), rfecv.grid_scores_)
plt.show()
首先,你可以看到它选择了哪些特征,其中交叉验证分数最大(在你的情况下,这对应于特征数量 17 或 21,我从图中不确定)
rfecv.support_
或
rfecv.ranking_
然后您可以通过
计算所选特征的重要性(对于 cv 分数曲线的峰值)np.absolute(rfecv.estimator_.coef_)
用于简单估算器或
rfecv.estimator_.feature_importances_
如果你的估计器是某种整体,比如随机森林。
然后可以在循环中将最不重要的特征一一去掉,对剩余的特征集重新计算rfecv。