K值未更改SelectKBest的结果

时间:2018-10-17 16:33:37

标签: python machine-learning scikit-learn jupyter-notebook

我目前正在处理一个正在运行数据并试图在数据中找到最佳功能的项目。我正在使用sklearn和SelectKBest模块。当我运行代码时,我会得到结果,但是无论我使用什么K值,它都能得到相同的结果。想知道是否有人可以看一下我的代码并告诉我哪里出了问题。我正在使用Jupyter Notebook进行构建,因此我将更改该值,然后重新运行该块。

features_list = ['poi', 'salary','to_messages','deferral_payments',
                 'total_payments','exercised_stock_options','bonus',
                 'restricted_stock','shared_receipt_with_poi','restricted_stock_deferred',
                 'total_stock_value','expenses','loan_advances','from_messages','other',
                 'from_this_person_to_poi','director_fees','deferred_income','long_term_incentive','from_poi_to_this_person'] 

        data = featureFormat(data_dict, features_list, sort_keys=True)
            labels, features = targetFeatureSplit(data)

            from sklearn.feature_selection import SelectKBest

            clf = SelectKBest()
            new_features = clf.fit_transform(features,labels)
            params = clf.get_params()

            i=0
            featureImportance = []
            for item in clf.scores_:
                featureImportance.append((item,features_list[i+1]))
                i=i+1

            featureImportance=sorted(featureImportance, reverse=True)
            for item in featureImportance:
                 print "{0} , {1:4.2f}%".format(item[1],item[0])

输出:

exercised_stock_options , 25.10%
total_stock_value , 24.47%
bonus , 21.06%
salary , 18.58%
deferred_income , 11.60%
long_term_incentive , 10.07%
restricted_stock , 9.35%
total_payments , 8.87%
shared_receipt_with_poi , 8.75%
loan_advances , 7.24%
expenses , 6.23%
from_poi_to_this_person , 5.34%
other , 4.20%
from_this_person_to_poi , 2.43%
director_fees , 2.11%
to_messages , 1.70%
deferral_payments , 0.22%
from_messages , 0.16%
restricted_stock_deferred , 0.06%

%不变。

1 个答案:

答案 0 :(得分:0)

scores_是根据SelectKBest中提供的score_func参数基于完整功能生成的:

  

score_func :可调用函数,包含两个数组X和y,以及   返回一对数组(分数,pvalues)或单个数组   分数。默认值为f_classif(请参见下文“另请参见”)。默认值   功能仅适用于分类任务。

默认情况下,SelectKBest将使用f_classif

由于提供给它的功能不会改变,因此分数不会改变。将会改变的是,根据这些得分选择了多少这些功能。根据您选择的k值,将选择最重要的功能。

您可以查看使用get_support()方法选择的功能。