Как выполнить выбор функции с baggingregressor? - PullRequest
1 голос
/ 06 марта 2020

Я пытаюсь выбрать функции от повышения градиента с помощью начальной загрузки - выполнение начальной загрузки с помощью BaggingRegressor в scikit-learn. Я не уверен, что это возможно или правильно, но это то, что я пытался:

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)

Это дает ошибку:

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.

Я не уверен, как решить эту проблему ошибка, я думал, что повышение градиента дает feature_importances_. Я попытался обойти это с помощью:

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)

Кажется, что это успешно дает выбранные функции, превышающие порог важности, который я сделал, но я не уверен, что я нахожу истинный выбор функции из BaggingRegressor, который SelectFromModel также найдет, или если (как мне подсказывает ошибка scikit-learn) он не существует для этого метода. Для ясности, причина, по которой я пытаюсь загрузить BaggingRegressor, связана с SelectFromModel, когда только усиление градиента колеблется в количестве выбранных функций, и я прочитал бумагу (раздел 7.1), в которой говорится, что загрузка может уменьшить это отклонение (как я понял, у меня нет фона CS / stats).

1 Ответ

1 голос
/ 09 марта 2020

Вы должны создать оболочку на BaggingRegressor для этой проблемы.

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

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

Существует проблема, связанная с этим в sklearn здесь и соответствующем PR .

Примечание: вы не должен go для BaggingRegressor, если ваш base_estimator GradientBoostingRegressor.

используйте параметр subsample для достижения того же.

подвыборка: с плавающей запятой, необязательная (по умолчанию = 1,0)
Доля выборок, которая будет использоваться для подбора отдельных базовых учащихся. Если меньше 1,0, это приводит к увеличению градиента Stochasti c. подвыборка взаимодействует с параметром n_estimators. Выбор подвыборки <1.0 приводит к уменьшению дисперсии и увеличению смещения. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...