python scikit learn中RFECV()的分数

python scikit learn中RFECV()的分数,python,scikit-learn,cross-validation,Python,Scikit Learn,Cross Validation,Scikit学习库支持递归特征消除(RFE)及其交叉验证版本(RFECV)。RFECV对我来说非常有用,因为它选择了一些小特性,但我想知道RFE的交叉验证是如何完成的 RFE是减少最不重要特性的方法。因此,我认为RFECV将计算交叉验证分数,并将功能一一删除 但如果使用交叉验证,我认为每个折叠都会选择其他最不重要的功能,因为数据是不同的。 有人知道如何在RFECV中删除功能吗?交叉验证是在功能的数量上进行的。每个CV迭代更新每个已删除特征数的分数 然后,它根据分数选择要保留的特征的数量n\u f

Scikit学习库支持递归特征消除(RFE)及其交叉验证版本(RFECV)。RFECV对我来说非常有用,因为它选择了一些小特性,但我想知道RFE的交叉验证是如何完成的

RFE是减少最不重要特性的方法。因此,我认为RFECV将计算交叉验证分数,并将功能一一删除

但如果使用交叉验证,我认为每个折叠都会选择其他最不重要的功能,因为数据是不同的。
有人知道如何在RFECV中删除功能吗?

交叉验证是在功能的数量上进行的。每个CV迭代更新每个已删除特征数的分数

然后,它根据分数选择要保留的特征的数量
n\u features\u以选择
,并在完整的数据集上使用RFE仅保留
n\u features\u以选择
特征

从:


交叉验证是在功能的数量上进行的。每个CV迭代更新每个已删除特征数的分数

然后,它根据分数选择要保留的特征的数量
n\u features\u以选择
,并在完整的数据集上使用RFE仅保留
n\u features\u以选择
特征

从:


非常感谢你。但我不理解“功能数量交叉验证”的含义。我想知道的是‘如何下达淘汰令’。正如我对代码的理解,首先RFE对整个数据集进行排序。(因此只有1个测试用于生成顺序)然后对每个交叉验证进行分数测试,然后使用该顺序删除n个特征,依此类推。我说得对吗?@z991不完全正确。RFE在每个CV折叠上运行,我们在所有CV折叠上保持每个特征分数的平均值。然后我们用平均分数来计算要删除的特征的数量,然后使用整个数据集删除该数量的特征。非常感谢你!非常感谢你。但我不理解“功能数量交叉验证”的含义。我想知道的是‘如何下达淘汰令’。正如我对代码的理解,首先RFE对整个数据集进行排序。(因此只有1个测试用于生成顺序)然后对每个交叉验证进行分数测试,然后使用该顺序删除n个特征,依此类推。我说得对吗?@z991不完全正确。RFE在每个CV折叠上运行,我们在所有CV折叠上保持每个特征分数的平均值。然后我们用平均分数来计算要删除的特征的数量,然后使用整个数据集删除该数量的特征。非常感谢你!
for n, (train, test) in enumerate(cv):
    X_train, y_train = _safe_split(self.estimator, X, y, train)
    X_test, y_test = _safe_split(self.estimator, X, y, test, train)

    rfe = RFE(estimator=self.estimator,
              n_features_to_select=n_features_to_select,
              step=self.step, estimator_params=self.estimator_params,
              verbose=self.verbose - 1)

    rfe._fit(X_train, y_train, lambda estimator, features:
             _score(estimator, X_test[:, features], y_test, scorer))
    scores.append(np.array(rfe.scores_[::-1]).reshape(1, -1))
scores = np.sum(np.concatenate(scores, 0), 0)
# The index in 'scores' when 'n_features' features are selected
n_feature_index = np.ceil((n_features - n_features_to_select) /
                          float(self.step))
n_features_to_select = max(n_features_to_select,
                           n_features - ((n_feature_index -
                                         np.argmax(scores)) *
                                         self.step))
# Re-execute an elimination with best_k over the whole set
rfe = RFE(estimator=self.estimator,
          n_features_to_select=n_features_to_select,
          step=self.step, estimator_params=self.estimator_params)
rfe.fit(X, y)