Можно ли сохранить sklearn.linear_model.LinearRegression? - PullRequest
0 голосов
/ 13 июня 2018

Я сохраняю модель 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.

1 Ответ

0 голосов
/ 13 июня 2018

Ошибка возникает не при попытке загрузить модель, а при вызове 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)
...