Я пытаюсь выбрать функции от повышения градиента с помощью начальной загрузки - выполнение начальной загрузки с помощью 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).