Scikit learn 使用scikit learn按顺序排列所有功能

Scikit learn 使用scikit learn按顺序排列所有功能,scikit-learn,feature-selection,Scikit Learn,Feature Selection,我正在尝试使用scikit-learn和对所有功能进行排序。如果排序的特征数k小于特征总数n,则该方法效果良好。但是,如果我设置了k=n,则SelectKBest的输出顺序将与原始要素数组的顺序相同。如何根据其重要性对所有功能进行排序 代码如下: from sklearn.feature_selection import SelectKBest, f_regression n = len(training_features.columns) selector = SelectKBest(f_

我正在尝试使用
scikit-learn
和对所有功能进行排序。如果排序的特征数
k
小于特征总数
n
,则该方法效果良好。但是,如果我设置了
k=n
,则
SelectKBest
的输出顺序将与原始要素数组的顺序相同。如何根据其重要性对所有功能进行排序

代码如下:

from sklearn.feature_selection import SelectKBest, f_regression

n = len(training_features.columns)

selector = SelectKBest(f_regression, k = n)
selector.fit(training_features.values, training_targets.values[:, 0])

k_best_features = list(training_features.columns[selector.get_support(indices = True)])

我认为,根据f_回归给出的分数,可以使用

pd.DataFrame(dict(feature_names= training_features.columns , scores = selector.scores_))\
    .sort_values('scores',ascending = False)

我最终使用了这个解决方案:

import numpy as np
from sklearn.feature_selection import f_regression

k = 10    # number of best features to obtain

scores, _ = f_regression(training_features.values, training_targets.values[:, 0])
indices = np.argsort(scores)[::-1]
k_best_features = list(training_features.columns.values[indices[0:k]])

selector.get_support()
只返回所选功能,而不返回其重要性或顺序。那么你所说的
是什么意思呢?“如果排名特征的数量k小于总数,那么该方法工作得很好”
。我认为返回向量的顺序是它们的重要性。我想根据重要性对k个特征进行排序。从所有特征中,根据重要性选择前k个特征,但从所选的k个特征中,您不能说哪个更重要。如果需要,则需要使用
selector.scores.
属性。