Я использую несколько конвейеров для сравнения при перекрестной проверке.В качестве эталонной модели я хочу включить простую модель, которая использует всегда один и тот же фиксированный коэффициент и, следовательно, не зависит от данных обучения.Чтобы получить желаемую модель, я решил унаследовать все поведение линейной модели sklearns и реализовать собственный метод .fit (), который фактически не смотрит на данные поезда, но всегда использует хранимую модель.
При использовании моей пользовательской реализации в качестве модели она работает нормально, однако, как часть конвейера, я получаю NotFmittedError .
Создание моей простой модели эталонного теста и ее сохранение.:
import numpy as np
import pickle
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import Pipeline
X = np.array([[1],[2],[3]])
y = [10,20,30]
model = LinearRegression(fit_intercept=False).fit(X,y)
pickle.dump(model, open('benchmark_model.txt', 'wb'))
print (model.coef_)
[10.]
Определение моего собственного benchmark_model (), который реализует метод пользовательской подгонки.Метод подбора открывает сохраненную модель
class benchmark_model(LinearRegression):
def fit(self, X, y = None):
self = pickle.load(open('benchmark_model.txt', 'rb'))
return self
Проверка реализации пользовательского подбора, поскольку модель на разных данных, кажется, идет хорошо.
X=np.array([[1],[2],[3]])
y=[5,10,15]
model = benchmark_model()
model = model.fit(X,y)
print (model.coef_)
print (model.predict(X))
[10.] [10.20. 30.]
Теперь я сначала использую обычную LinearRegression в качестве части конвейера, которая, кажется, идет как ожидалось:
pipe = Pipeline([('model',LinearRegression())])
pipe.fit(X,y).predict(X)
array ([5., 10., 15.])
Однако, когда я использую свою пользовательскую модель эталонного теста как часть конвейера, она больше не работает.
pipe = Pipeline([('model',benchmark_model())])
pipe.fit(X,y).predict(X)
NotFittedError: Этот экземпляр benchmark_model еще не установлен.Вызовите «fit» с соответствующими аргументами перед использованием этого метода.