在SciKitLearn的特征选择和交叉验证管道中,分数代表什么?

2024-05-05 13:56:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在scikit管道中运行功能选择和交叉验证,以优化SVR中的超参数。首先进行互信息特征选择。据我所知,“管道”方法会导致对CV的每个新折叠重新计算特征选择。这样可以防止训练集泄漏到测试集中

但是,我们不确定.get_support( )在这个上下文中返回什么。如果为数据集的每个折叠重新计算互信息,“K最佳”特征在折叠中不一致。由.get_support( )返回的特征是否基于最佳模型的所有折叠的分数?那分数是如何计算的

cached_pipe = Pipeline(
 [
 ('selector',SelectKBest(mutual_info_regression)),
 ('model',SVR())
 ],
 memory=memory
)

clf = GridSearchCV(
    estimator = cached_pipe,
    param_grid = hyperparameters,
    cv = passed_cv,
    scoring = 'neg_mean_squared_error',
    return_train_score = 0,
    n_jobs= -1,
    verbose=0)

best_model = clf.fit(X, y.ravel())
HyperModel['feature_scores'] = best_model.best_estimator_.named_steps['selector'].scores_
HyperModel['feature_support'] = best_model.best_estimator_.named_steps['selector'].get_support()