Получение имен столбцов, выбранных после метода выбора функции - PullRequest
0 голосов
/ 09 мая 2020

Учитывая простой код выбора функции ниже, я хочу знать выбранные столбцы после выбора функции (набор данных включает заголовок V1 ... V20)

import pandas as pd
from sklearn.feature_selection import SelectFromModel, SelectKBest, f_regression


def feature_selection(data):
    y = data['Class']
    X = data.drop(['Class'], axis=1)
    fs = SelectKBest(score_func=f_regression, k=10)

    # Applying feature selection
    X_selected = fs.fit_transform(X, y)
    # TODO: determine the columns being selected

    return X_selected


data = pd.read_csv("../dataset.csv")
new_data = feature_selection(data)

Я благодарен за любую помощь.

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Я использовал набор данных iris для своего примера, но вы, вероятно, легко можете изменить свой код в соответствии с вашим вариантом использования. Метод SelectKBest имеет атрибут scores_, который я использовал для сортировки функций.

Не стесняйтесь спрашивать любые разъяснения.

import pandas as pd
import numpy as np
from sklearn.feature_selection import SelectFromModel, SelectKBest, f_regression
from sklearn.datasets import load_iris


def feature_selection(data):
    y = data[1]
    X = data[0]
    column_names = ["A", "B", "C", "D"]  # Here you should use your dataframe's column names
    k = 2

    fs = SelectKBest(score_func=f_regression, k=k)

    # Applying feature selection
    X_selected = fs.fit_transform(X, y)

    # Find top features 
    # I create a list like [[ColumnName1, Score1] , [ColumnName2, Score2], ...]
    # Then I sort in descending order on the score
    top_features = sorted(zip(column_names, fs.scores_), key=lambda x: x[1], reverse=True)
    print(top_features[:k])

    return X_selected


data = load_iris(return_X_y=True)
new_data = feature_selection(data)
0 голосов
/ 09 мая 2020

Я не знаю метода in-build, но его легко закодировать.

n_columns_selected = X_new.shape[0]
new_columns = list(sorted(zip(fs.scores_, X.columns))[-n_columns_selected:])
# new_columns order is perturbed, we need to restore it. We use the names of the columns of X as a reference
new_columns = list(sorted(cols_new, key=lambda x: list(X.columns).index(x)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...