SelectKbest,Treeclassifer,某处小错误:(

时间:2015-08-03 11:45:36

标签: scikit-learn classification

做一个课程,我被困在我认为是一个小问题。 我想找出SelectKBest有哪些最重要的功能(我从2,4,6,8改变k

我加载数据

data_dict = pickle.load(open("final_project_dataset.pkl", "r") )
my_dataset = data_dict
data = featureFormat(my_dataset, feature_combo, sort_keys = True)
labels, features = targetFeatureSplit(data)
kbest = SelectKBest(k=2)
train_new= kbest.fit_transform(features,labels)

get_support我发现了最重要的功能,然后尝试将其与我的分类器一起使用

from sklearn import tree 
clf1 = tree.DecisionTreeClassifier(min_samples_split=2)
test_classifier(clf1, my_dataset, feature_lists2)

我首先使用了一个功能列表,其中包含了我称之为组合的所有功能:

feature_combo=['poi','salary','bonus','total_stock_value','long_term_incentive','restricted_stock_deferred','from_this_person_to_poi','shared_receipt_with_poi','newfeature_ratio','total_payments','deferral_payments','loan_advances', 'restricted_stock','director_fees','to_messages','from_messages']

在获得最重要的内容后,我创建了以下功能列表:

feature_lists2=['salary','bonus']

当我运行它时,我得到一个神秘的错误:

Traceback (most recent call last):
  File "C:\Users\Stephan\Downloads\ud120-projects\final_project\poi_id.py", line 62, in <module>
    train_new= kbest.fit_transform(features,labels)
  File "C:\Users\Stephan\Anaconda\lib\site-packages\sklearn\base.py", line 429, in fit_transform
    return self.fit(X, y, **fit_params).transform(X)
  File "C:\Users\Stephan\Anaconda\lib\site-packages\sklearn\feature_selection\univariate_selection.py", line 300, in fit
    self._check_params(X, y)
  File "C:\Users\Stephan\Anaconda\lib\site-packages\sklearn\feature_selection\univariate_selection.py", line 405, in _check_params
    % self.k)
ValueError: k should be >=0, <= n_features; got 2.Use k='all' to return all features.
[Finished in 0.5s with exit code 1]

谁能看到我做错了什么? (我是初学者)

1 个答案:

答案 0 :(得分:1)

我的问题有点不清楚。我不确定您何时收到此错误并且您没有提供数据来制作可重现的示例。但是,如果您阅读了错误消息,则会清楚地说明问题:

  

ValueError:k应该是&gt; = 0,&lt; = n_features;得到2.使用k =&#39;全部&#39;返回所有功能。

这意味着k对象中的SelectKBest()参数不在适当的范围内。特别是k = 2大于n_features,这意味着您传递到kbest.fit_transform()调用的数据少于2列。在没有看到任何数据的情况下,我无法说为什么正在发生,但它几乎肯定是您错误的来源。