Получение названия функций из формы selectKbest - PullRequest
0 голосов
/ 06 февраля 2019

Я использовал Scikit learn selectKbest, чтобы выбрать лучшие функции, около 500 из 900 из них.следующим образом, где 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... 

, поэтомуЕсть ли способ узнать, как называются выбранные функции?

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Вы можете использовать .get_support() параметр feature_selection, чтобы получить имена объектов из вашего исходного кадра данных.

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')

0 голосов
/ 16 марта 2019

Вот как вы можете это сделать, используя 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()]
...