Cómo llevar a cabo la selección de características con baggingregressor?

DN1:

Estoy tratando de seleccionar las características de gradiente de impulsar el uso de arranque - realizar la bootstapping a través de la BaggingRegressoren scikit-learn. No estoy seguro de que esto es posible o correcto, pero esto es lo que he intentado:

bag = BaggingRegressor(base_estimator=GradientBoostingRegressor(), bootstrap_features=True, random_state=seed)
bag.fit(X,Y)
model = SelectFromModel(bag, prefit=True, threshold='mean')
gbr_boot = model.transform(X)
print('gbr_boot', gbr_boot.shape)

Esto da el error:

ValueError: The underlying estimator BaggingRegressor has no `coef_` or `feature_importances_` attribute. Either pass a fitted estimator to SelectFromModel or call fit before calling transform.

No estoy seguro de cómo hacer frente a este error, pensé gradiente de impulsar da feature_importances_. He intentado trabajar alrededor de él con:

bag = BaggingRegressor(base_estimator=GradientBoostingRegressor(), bootstrap_features=True, random_state=seed)
bag.fit(X,Y)

feature_importances = np.mean([
    tree.feature_importances_ for tree in bag.estimators_
], axis=0)

threshold = np.mean(feature_importances)


temp=()
for i in feature_importances: 
    if i > threshold:
        temp=temp + ((i),)
    else:
        temp=temp + (('null'),) 


model_features=data.columns

feature = pd.DataFrame(np.array(model_features))

df = pd.DataFrame(temp)

df_total = pd.concat([feature, df], axis=1)

Esto parece tener éxito en dar características seleccionadas superando el umbral de importancia que he hecho, pero no estoy seguro de si estoy encontrando la verdadera función de selección de BaggingRegressorla cual SelectFromModeltambién se encuentra, o si (como el error scikit-learn implica para mí) no existe para este método. Para mayor claridad, la razón por la que estoy tratando de BaggingRegressorarranque se debe al SelectFromModelgradiente impulsar solos fluctuación en el número de características que haya seleccionado, y me leyó un papel (sección 7.1) diciendo bootstrapping puede reducir esta variación (tal como lo entendía, no lo creo tener un CS / estadísticas de fondo).

Venkatachalam:

Hay que crear un envoltorio de BaggingRegressorpara este problema.

class MyBaggingRegressor(BaggingRegressor):
    @property
    def feature_importances_(self):
        return self.regressor_.feature_importances_

    @property
    def coef_(self):
        return self.regressor_.coef_

Hay un problema existente con respecto a esto en sklearn aquí y el correspondiente PR .

Nota: usted no tiene que ir a por BaggingRegressor, si su base_estimator es GradientBoostingRegressor.

utilizar el subsampleparámetro para lograr el mismo.

submuestra: flotador, opcional (por defecto = 1,0)
La fracción de muestras que se utiliza para el montaje de los alumnos de base individuales. Si es menor de 1,0 esto resulta en estocástico Gradiente Impulsar. interactúa submuestra con los n_estimators parámetros. La elección de submuestra <1.0 conduce a una reducción de la varianza y un aumento de sesgo.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=275100&siteId=1
Recomendado
Clasificación