【问题标题】:sci-kit learn: Identifying the corresponding feature-id values when using SelectKBestsci-kit learn:使用 SelectKBest 时识别对应的 feature-id 值
【发布时间】:2012-10-01 06:59:19
【问题描述】:

我正在使用 sci-kit learn(0.11 版和 Python 2.7.3 版)从 svmlight 格式的二进制分类数据集中选择前 K 个特征。

我正在尝试识别所选功能的功能 ID 值。我认为这会很简单——而且很可能是这样! (通过feature-id,我指的是here所描述的特征值之前的数字)

以下代码准确地说明了我是如何尝试这样做的:

from sklearn.datasets import load_svmlight_file
from sklearn.feature_selection import SelectKBest

svmlight_format_train_file = 'contrived_svmlight_train_file.txt' #I present the contents of this file below

X_train_data, Y_train_data = load_svmlight_file(svmlight_format_train_file)

featureSelector = SelectKBest(score_func=chi2,k=2)

featureSelector.fit(X_train_data,Y_train_data)

assumed_to_be_the_feature_ids_of_the_top_k_features = list(featureSelector.get_support(indices=True)) #indices=False just gives me a list of True,False etc...

print assumed_to_be_the_feature_ids_of_the_top_k_features #this gives: [0, 2]

显然,assumed_to_be_the_feature_ids_of_the_top_k_features 不能对应于特征 ID 值 - 因为(见下文)我的输入文件中的特征 ID 值从 1 开始。

现在,我怀疑 assumed_to_be_the_feature_ids_of_the_top_k_features 实际上可能对应于按值递增顺序排序的特征 ID 值的列表索引。在我的情况下,索引 0 将对应于 feature-id=1 等 - 这样代码告诉我选择了 feature-id=1feature-id=3

不过,如果有人能证实或否认这一点,我将不胜感激。

提前致谢。

contrived_svmlight_train_file.txt的内容:

1 1:1.000000 2:1.000000 4:1.000000 6:1.000000#mA
1 1:1.000000 2:1.000000#mB
0 5:1.000000#mC
1 1:1.000000 2:1.000000#mD
0 3:1.000000 4:1.000000#mE
0 3:1.000000#mF
0 2:1.000000 4:1.000000 5:1.000000 6:1.000000#mG
0 2:1.000000#mH

附:抱歉没有正确格式化(第一次在这里);我希望这是清晰易懂的!

【问题讨论】:

    标签: python scikit-learn feature-selection


    【解决方案1】:

    显然,assumed_to_be_the_feature_ids_of_the_top_k_features 不能对应于特征 ID 值 - 因为(见下文)我的输入文件中的特征 ID 值从 1 开始。

    事实上,他们是。 SVMlight 格式加载器将检测到您的输入文件具有基于 1 的索引,并将从每个索引中减去一个,以免浪费一列。如果这不是您想要的,则将zero_based=True 传递给load_svmlight_file 以假装它实际上是从零开始的并插入一个额外的列;详情请见its documentation

    【讨论】:

    • 太好了;所以我的假设得到了证实。为简单起见,我想我只需将 1 加到假定的_to_be_the_feature_ids_of_the_top_k_features 中的每个值。感谢您如此迅速的反应。 (顺便说一句,我阅读了您之前指出的文档,但恐怕我误解了它的含义。)
    • @user1735732:我承认不是很清楚。我向开发版本推送了一个补丁,所以下一个版本会有更好的文档。谢谢!
    猜你喜欢
    • 2015-06-10
    • 2017-06-20
    • 2016-05-12
    • 2015-03-06
    • 2015-10-21
    • 2019-01-29
    • 2017-10-16
    • 2014-05-17
    • 1970-01-01
    相关资源
    最近更新 更多