Многоступенчатый регрессор стекирования - PullRequest
1 голос
/ 24 февраля 2020

Однократный вопрос: я пытаюсь построить многопользовательский стековый регрессор (добавлено в sklearn 0.22). Насколько я понимаю, я должен объединить StackingRegressor и MultiOutputRegressor. После нескольких попыток это кажется правильным порядком:

import numpy as np 
from sklearn.ensemble import RandomForestRegressor
from sklearn.linear_model import OrthogonalMatchingPursuit
from sklearn.ensemble import StackingRegressor
from sklearn.neighbors import KNeighborsRegressor
from sklearn.multioutput import MultiOutputRegressor
from sklearn.svm import SVR

estimators = [  ('svr', SVR(kernel='rbf', C=1e3, gamma=0.1)),  
        ('knn',KNeighborsRegressor(n_neighbors=5)),
        ('omp', OrthogonalMatchingPursuit())
         ]

reg = MultiOutputRegressor(StackingRegressor( estimators = estimators, final_estimator= RandomForestRegressor(n_estimators=5)))
X=np.random.random((200,20))
y = np.random.random((200,4))
reg.fit(X,y)

reg.predict(X)

Но метод predict заканчивается ошибкой

*** ValueError: The base estimator should implement a predict method

Я искал такую ​​ошибку в файлах sklean и, похоже, относящиеся к MultiOutputRegressor:

if not hasattr(self.estimator, "predict"):
    raise ValueError("The base estimator should implement a predict method")

Итак, я попытался взглянуть на self.estimator модель:

reg.estimator.predict(X)

, но я получаю эту ошибку:

*** AttributeError: 'StackingRegressor' object has no attribute 'final_estimator_'

Глядя на атрибуты reg.estimator Я не могу найти final_estimator_, но только final_estimator, поэтому я решил создать такой атрибут:

reg.estimator.final_estimator_ = reg.estimator.final_estimator

Это работает, но я больше не уверен, если моя модель сейчас делает то, что должна (возможно, она использует тот же окончательный оценщик для каждой координаты выходных данных). Это ошибка из-за комбинации StackingRegressor + MultiOutputRegressor или я что-то упустил?

Спасибо!

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