SelectKbest,Treeclassifer,某处有小错误:(

SelectKbest, Treeclassifer, small error somewhere :(

在上课时,我被困在我认为必须是小问题的地方。 我想用 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]

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

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

ValueError: k should be >=0, <= n_features; got 2.Use k='all' to return all features.

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