我使用Scikit learn selectKbest
来选择最好的功能,从900个中大约500个。 如下所示,其中 d 是所有特征的数据帧。
from sklearn.feature_selection import SelectKBest, chi2, f_classif
X_new = SelectKBest(chi2, k=491).fit_transform(d, label_vs)
当我现在打印X_new
它时,它只给我数字,但我需要所选功能的名称以便以后使用它们。
我尝试了类似X_new.dtype.names
但没有得到任何东西,我试图将X_new
转换为数据框,但我得到的唯一列名称是
1, 2, 3, 4...
那么有没有办法知道所选功能的名称是什么?
以下是使用 get_support()
的方法
chY = SelectKBest(chi2, k=491)
X_new = chY.fit_transform(d, label_vs)
column_names = [column[0] for column in zip(d.columns,chY.get_support()) if column[1]]
从@AI_Learning的答案中,您可以通过以下方式获得列名:
column_names = d.columns[chY.get_support()]
feature_selection的.get_support()
参数从初始数据帧中获取特征名称。
feature_selector = SelectKBest(chi2, k=491)
d.columns[feature_selector.get_support()]
工作示例:
from sklearn.datasets import load_digits
import pandas as pd
from sklearn.feature_selection import SelectKBest, chi2
X, y = load_digits(return_X_y=True)
df = pd.DataFrame(X, columns= ['feaure %s'%i for i in range(X.shape[1])])
feature_selector = SelectKBest(chi2, k=20)
X_new = feature_selector.fit_transform(df, y)
X_new.shape
df.columns[feature_selector.get_support()]
输出:
索引(['feaure 5', 'feaure 6', 'feaure 13', 'feaure 19', 'feaure 20', "Feaure 21", "Feaure 26", "Feaure 28", "Feaure 30", "Feaure 33", "Feaure 34", "Feaure 41", "Feaure 42", "Feaure 43", "Feaure 44", "Feaure 46", "Feaure 54", "Feaure 58", "Feaure 61", "Feaure 62"], dtype='object'(