从 selectKbest 中获取特征名称

Posted

技术标签:

【中文标题】从 selectKbest 中获取特征名称【英文标题】:Getting the features names form selectKbest 【发布时间】:2019-06-30 19:38:44 【问题描述】:

我使用 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... 

那么有没有办法知道所选功能的名称是什么?

【问题讨论】:

【参考方案1】:

你可以这样做,使用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()]

【讨论】:

谢谢。我已经完成了这个项目,我使用了不同的路线。但是,这对未来也很有帮助。谢谢。【参考方案2】:

您可以使用 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()]

输出:

Index(['功能 5', '功能 6', '功能 13', '功能 19', '功能 20', “第 21 条”、“第 26 条”、“第 28 条”、“第 30 条”、“第 33 条”、 '特征 34', '特征 41', '特征 42', '特征 43', '特征 44', '功能 46', '功能 54', '功能 58', '功能 61', '功能 62'], dtype='object')

【讨论】:

谢谢。我已经完成了这个项目,我使用了不同的路线。但是,这对未来也很有帮助。谢谢。

以上是关于从 selectKbest 中获取特征名称的主要内容,如果未能解决你的问题,请参考以下文章

SelectKBest 将分数作为 nan 值

管道中的python特征选择:如何确定特征名称?

如何使用 SelectKBest 选择的特征训练模型?

如何从 gridSearchCV 的输出中获取特征名称

如何从 sklearn TruncatedSVD 对象中获取特征名称?

sklearn.feature_selection.SelectKBest 特征评分模块中的负数问题