Я сохраняю модель sklearn.linear_model.LinearRegression с помощью pickle, а затем загружаю ее в обратном порядке, используя:
i = 1
Xtr_num, Xte_num, Xtr_cat, Xte_cat, Ytr, Yte, Xvl_num, Xvl_cat, Yvl = data.get_splitted_data(i)
lm = linear_model.LinearRegression()
pickle.dump(lm, open('pre_model/y'+str(i)+'-skl.pickle.sav', 'wb'))
X = np.concatenate((Xtr_num, Xtr_cat), axis=1)
model = lm.fit(X,Ytr)
loaded_model = pickle.load(open('pre_model/y'+str(1)+'-skl.pickle.sav', 'rb'))
print loaded_model.predict(X)
Это дает мне ошибку ниже. Вы могли бы посоветовать.
---------------------------------------------------------------------------
NotFittedError Traceback (most recent call last)
<ipython-input-14-8d246f04f2b7> in <module>()
1 loaded_model = pickle.load(open('pre_model/y'+str(1)+'-skl.pickle.sav', 'rb'))
----> 2 print loaded_model.predict(X)
/usr/lib64/python2.7/site-packages/sklearn/linear_model/base.pyc in predict(self, X)
254 Returns predicted values.
255 """
--> 256 return self._decision_function(X)
257
258 _preprocess_data = staticmethod(_preprocess_data)
/usr/lib64/python2.7/site-packages/sklearn/linear_model/base.pyc in _decision_function(self, X)
235
236 def _decision_function(self, X):
--> 237 check_is_fitted(self, "coef_")
238
239 X = check_array(X, accept_sparse=['csr', 'csc', 'coo'])
/usr/lib64/python2.7/site-packages/sklearn/utils/validation.pyc in check_is_fitted(estimator, attributes, msg, all_or_any)
766
767 if not all_or_any([hasattr(estimator, attr) for attr in attributes]):
--> 768 raise NotFittedError(msg % {'name': type(estimator).__name__})
769
770
NotFittedError: This LinearRegression instance is not fitted yet. Call 'fit' with appropriate arguments before using this method.
Да, сначала я подгоняю модель, используя X, y, а затем сохраняю ее. Но когда я перезагружаю модель, она ничего не может предсказать и выдает ошибку.
В моем ответе ниже, судя по опубликованному вами фрагменту кода, я предположил, что вы не выполняли никаких настроек перед сохранением, в том числе потому, что об этом говорит ошибка. Теперь, если я еще раз взгляну на ваши имена файлов: возможно ли, что вы загрузили неправильную модель?
@WolfgangK К сожалению, вы не правы, и проблема не в этом. Я добавил больше деталей в код, в который помещаю модель, сохраняю ее, перезагружаю и вызываю прогноз. Также публикуется ошибка.
Если это фактический код, который вы используете, модель сначала инициализируется, затем сохраняется, затем настраивается, а затем вы загружаете модель в том виде, в котором она была до подгонки. Итак, вы пытаетесь использовать predict на загруженной модели, которая не подходит.
Да, его можно загрузить, но в нем нет никакого функционала. Чтобы предсказать результат, он просит меня снова вызвать в fit. Может быть, то, как они думают о модели сохранения, отличается от того, что я думаю.
Я хотел сказать, что перед сохранением модели вы должны использовать fit. Но потом позвоните в fit.
Да, теперь работает. Это была глупая ошибка.






Ошибка возникает не при попытке загрузить модель, а при вызове predict. Сначала вам нужно подогнать вашу модель к некоторым обучающим данным. Впоследствии вы можете предсказать:
loaded_model.fit(training_data, target_values)
loaded_model.predict(X)
Обновлять
Чтобы уточнить, перепишу ваш код. Посмотрите, работает ли это сейчас:
i = 1
Xtr_num, Xte_num, Xtr_cat, Xte_cat, Ytr, Yte, Xvl_num, Xvl_cat, Yvl = data.get_splitted_data(i)
lm = linear_model.LinearRegression()
X = np.concatenate((Xtr_num, Xtr_cat), axis=1)
lm.fit(X,Ytr) # the position of this line has been changed
pickle.dump(lm, open('pre_model/y'+str(i)+'-skl.pickle.sav', 'wb'))
loaded_model = pickle.load(open('pre_model/y'+str(1)+'-skl.pickle.sav', 'rb'))
print loaded_model.predict(X)
Итак, вы имеете в виду, что я не могу сохранить и перезагрузить модель? Примерка занимает некоторое время, и я хотел этого избежать.
Похоже, проблема исходит из другого источника. Вы запускали функцию
fitна своей модели перед ее сохранением?