Однократный вопрос: я пытаюсь построить многопользовательский стековый регрессор (добавлено в 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
или я что-то упустил?
Спасибо!