Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python scikit学习:计算与编程;绘制递归KBEST特征(k=';全部';)性能_Python_Machine Learning_Scikit Learn_Feature Extraction_Bigdata - Fatal编程技术网

Python scikit学习:计算与编程;绘制递归KBEST特征(k=';全部';)性能

Python scikit学习:计算与编程;绘制递归KBEST特征(k=';全部';)性能,python,machine-learning,scikit-learn,feature-extraction,bigdata,Python,Machine Learning,Scikit Learn,Feature Extraction,Bigdata,我的目标是: 使用和k=“all”,对分级功能进行排序(简单易行) 绘制排序特征()的递归/渐进式交叉验证性能,即1)计算最顶端特征的交叉验证性能,2)然后计算最顶端+第二顶端的cv性能,3)然后+第三。。。n) 所有功能组合在一起。(有点辛苦&没有完成) 如下图所示绘制结果(仅使用排序后的KBest all功能,而不是RFECV)。(简单) 是的,我可以k-循环所有排名特征,然后“转换”数据以仅允许k最佳特征,然后计算每个特征的交叉验证性能,最后获得所有分数并绘制…--我想避免使用这种代码

我的目标是:

  • 使用和
    k=“all”
    ,对分级功能进行排序(简单易行)
  • 绘制排序特征()的递归/渐进式交叉验证性能,即1)计算最顶端特征的交叉验证性能,2)然后计算最顶端+第二顶端的cv性能,3)然后+第三。。。n) 所有功能组合在一起。(有点辛苦&没有完成)
  • 如下图所示绘制结果(仅使用排序后的
    KBest all
    功能,而不是RFECV)。(简单)
是的,我可以
k
-循环所有排名特征,然后“转换”数据以仅允许
k
最佳特征,然后计算每个特征的交叉验证性能,最后获得所有分数并绘制…--我想避免使用这种代码

我期待一个标准答案,因为我想像这样的包装函数一定已经存在于优秀的
scikit learn
库中了

也许用它是可行的


我没有找到标准的解决方案,因此这是我所做工作的伪代码:

(如果有兴趣,很乐意提供Jupyter工作示例)

-


可能这就是您应该寻找的函数(RFECV,而不是RFE)。具有递归特征消除和交叉验证选择最佳特征数的特征排序。是的,我的错,我本来打算写RFECV的
def get_sorted_kbest_feature_keys(kbest_fitted_model):
    return [fkey for fkey, _ in sorted(enumerate(kbest_fitted_model.scores_), key=lambda tuple: tuple[1], reverse=True)]

def select_features_transformer_function(X, **kwargs):
    selected_feature_keys = kwargs["selected_feature_keys"]

    X_new = X[:, selected_feature_keys]
    # apply other transformers as desired

    return X_new
kbest = SelectKBest(scoring_func, k="all")  # scoring_func like "f1_macro"
kbest.fit(X, y)
selected_feature_keys = get_kbest_sorted_feature_keys(kbest)

scores = []

for num_seletected_kbest_features in range(1, num_features + 1):

    selected_feature_keys = sorted_kbest_feature_keys[:num_seletected_kbest_features]
    my_transformer = FunctionTransformer(select_features_transformer_function, accept_sparse=True, kw_args={"selected_feature_keys": selected_feature_keys})

    classifier = # example SVC
    estimator = make_pipeline(my_transformer, classifier)

    cv_scores = cross_val_score(estimator, X, y, scoring=scoring_name, verbose=True, n_jobs=-1)
    scores.append(cv_scores.mean())

# Then I can plot the scores as in:

### http://scikit-learn.org/stable/auto_examples/feature_selection/plot_rfe_with_cross_validation.html#sphx-glr-auto-examples-feature-selection-plot-rfe-with-cross-validation-py