获取特征选择方法后选择的列名。

问题描述 投票:0回答:1

给定下面一个简单的特征选择代码,我想知道在特征选择后选择的列(数据集包括一个头 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)

我感谢任何帮助。

machine-learning scikit-learn feature-extraction feature-selection
1个回答
1
投票

我已经使用了 iris 在我的例子中,你可以很容易地修改你的代码来匹配你的用例。选择最佳 方法有 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
投票

我不知道内建的方法,但可以很容易的编出来。

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)))
© www.soinside.com 2019 - 2024. All rights reserved.