【问题标题】:ML - Getting feature names after feature selection - SelectPercentile, pythonML - 选择特征后获取特征名称 - SelectPercentile,python
【发布时间】:2017-06-03 03:03:31
【问题描述】:

我已经为此苦苦挣扎了一段时间。 我的目标是利用我拥有的文本特征,并在其中找到最好的 5-10 个单词来帮助我进行分类。因此,我正在运行一个 TfIdfVectorizer,并且现在选择 ~90 最好。但是,在缩小特征量后,我无法看到实际选择了哪些特征。

这是我所拥有的:

import pandas
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.feature_selection import SelectPercentile, f_classif

train=pandas.read_csv("train.tsv", sep='\t')
labels_train = train["label"]
documents = []

for i, row in train.iterrows():
    documents.append((row['boilerplate'][1:-1].lower()))

vectorizer = TfidfVectorizer(sublinear_tf=True, stop_words="english")
features_train_transformed = vectorizer.fit_transform(documents)

selector = SelectPercentile(f_classif, percentile=0.1)
selector.fit(features_train_transformed, labels_train)
features_train_transformed = selector.transform(features_train_transformed).toarray()

结果是 features_train_transformed 包含所选单词的每个文档的每个单词的所有 tf​​idf 分数的矩阵,但是我不知道选择了哪些单词,并且类 SelectPercentile 无法使用诸如“get_feature_names()”之类的方法。

这是必要的,因为我需要将这些特征添加到一堆数字特征中,然后才能进行训练和预测。

【问题讨论】:

    标签: python numpy machine-learning scikit-learn feature-extraction


    【解决方案1】:
    • selector.get_support() 为您获取一个布尔数组,该数组包含在您指定的百分位数范围内
    • train.columns.values 应该为您提供原始数据帧的完整列名列表
    • 用前者过滤后者应该会为您提供构成您选择的百分位数范围的列的名称。

    下面的代码(从工作代码中剪切粘贴)与您的足够相似,希望对您有所帮助

    import numpy as np
    selection = SelectPercentile(f_regression, percentile=2)
    train_minus_target = train.drop("y", axis=1)
    x_features = selection.fit_transform(train_minus_target, y_train)
    columns = np.asarray(train_minus_target.columns.values)
    support = np.asarray(selection.get_support())
    columns_with_support = columns[support]
    

    参考:
    about get_support

    【讨论】:

      猜你喜欢
      • 2012-12-17
      • 2014-09-20
      • 2017-02-10
      • 2020-07-27
      • 2016-01-27
      • 2020-08-13
      • 1970-01-01
      • 2022-12-19
      • 2019-05-15
      相关资源
      最近更新 更多