Python 在带管道和不带管道的随机搜索CV中应用RFE

Python 在带管道和不带管道的随机搜索CV中应用RFE,python,pipeline,cross-validation,rfe,Python,Pipeline,Cross Validation,Rfe,我有一些关于在GridSearchCV中应用RFE/RFECV(带管道和不带管道)的问题。我经历了所有类似的问题,但它们没有满足我的担忧。非常感谢你的支持 在没有管道的GridSearch CV中使用RFE的常用方法如下: grid = {"estimator__max_depth": [3, 4], "max_depth": [3, 4, 5]} scaler = StandardScaler() X = scaler.fit_tran

我有一些关于在GridSearchCV中应用RFE/RFECV(带管道和不带管道)的问题。我经历了所有类似的问题,但它们没有满足我的担忧。非常感谢你的支持

在没有管道的GridSearch CV中使用RFE的常用方法如下:

grid = {"estimator__max_depth": [3, 4],
        "max_depth": [3, 4, 5]}

scaler = StandardScaler()
X = scaler.fit_transform(X)

selector = RFE(XGBClassifier(verbosity=0), step=1,  n_features_to_select =5)
clf = RandomizedSearchCV(selector, param_distributions=grid, cv=2)
clf.fit(X, y)
对于管道方法,我认为最合适的相关方法是:

class Mypipeline(Pipeline):
    @property
    def coef_(self):
        return self._final_estimator.coef_
    @property
    def feature_importances_(self):
        return self._final_estimator.feature_importances_ 

estimators = [('scaler' , StandardScaler()),
              ('clf', XGBClassifier())]


pipeline = Mypipeline(estimators)
selector = RFE(estimator=pipeline, step=1, n_features_to_select =3)

cv = RandomizedSearchCV(selector, param_distributions=grid, cv=2)
cv.fit(X, y)
它只需将定标器和XGBClassifier传递到管道,然后将其用作RFE步骤的估计器。但与非管道方法相比,它返回的结果不同。这可以用Scaler工作方式的不同来解释(非管道方法中的fit_变换all X和管道方法中的分割X)。 但是,即使我删除了Scaler步骤,结果仍然不同所以我的第一个问题是,我是否以正确的方式应用管道方法?如果是,是否有不同结果的原因

RFE还有其他管道方法,如将所有3个步骤放入管道中,如中所示:

我的第二个问题是:(2.1)在RFE步骤之后再次将XGBClassifier用作“clf”是否正确。(2.2)对于删除第三步('clf',XGBClassifier())的情况,我如何以另一种方式在RandomizedSearchCV内传递“网格”字典:如何克服“ValueError:估计器的无效参数估计器”?

steps = [('scaler' , StandardScaler()),
              ('selector', RFE(XGBClassifier(verbosity=0), step=1,  n_features_to_select =5))]

pipeline = Pipeline(steps)
cv = RandomizedSearchCV(pipeline, param_distributions=grid, cv=2)
cv.fit(X, y)

ValueError: Invalid parameter estimator for estimator Pipeline(steps=[('scaler', 
StandardScaler()), ('selector',RFE(estimator=XGBClassifier(...)
最后,我们可以将RFE和HPO分为两个单独的步骤,如, 因此,我的最后一个问题是:在这些方法中,对应用哪种方法有何评论/建议?

steps = [('scaler' , StandardScaler()),
              ('selector', RFE(XGBClassifier(verbosity=0), step=1,  n_features_to_select =5))]

pipeline = Pipeline(steps)
cv = RandomizedSearchCV(pipeline, param_distributions=grid, cv=2)
cv.fit(X, y)

ValueError: Invalid parameter estimator for estimator Pipeline(steps=[('scaler', 
StandardScaler()), ('selector',RFE(estimator=XGBClassifier(...)
短暂性脑缺血发作