ML - 在选择特征后获取特征名称 - SelectPercentile,python

时间:2017-01-18 16:23:47

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

我一直在努力解决这个问题。 我的目标是采用我拥有的文本功能,并找到最好的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包含所选单词每个文档的每个单词的所有tfidf分数的矩阵,但是我不知道选择了哪个单词,并且“get_feature_names()”等方法对于SelectPercentile类是不可用的。

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

1 个答案:

答案 0 :(得分:0)

  • 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