Как экспортировать / сохранить подобранную модель после cross_validate и использовать ее позже на пандах - PullRequest
1 голос
/ 05 июля 2019

Я использую cross_validate sklearn-функцию, чтобы соответствовать классификатору RandomForest.Я хотел бы знать, есть ли способ экспортировать подогнанные модели, чтобы сохранить их и импортировать, чтобы предсказать новые данные.

Я пытался использовать опцию return_estimator=True

[return_estimator: boolean, default False Возвращать ли оценки, установленные для каждого разделения.]

а затем joblib, чтобы сохранить оценки.Но когда я загружаю сохраненную модель и пытаюсь использовать ее для predict, я получаю сообщение об ошибке (см. Ниже).

rfc = RandomForestClassifier(n_estimators=100)
cv_results = cross_validate(rfc, X_train_std ,Y_train, scoring=scoring, cv=5, return_estimator=True)
rfc_fit = cv_results['estimator']

#save estimated model
savedir = ('C://Users//.......//src//US//') 

from sklearn.externals import joblib
filename = os.path.join(savedir, 'final_model.joblib')
joblib.dump(rfc_fit,filename)

rfc_model2 = joblib.load(filename)
bla = rfc_model2.predict(X_test_std)

AttributeError: 'tuple' object has no attribute 'predict'

Я думаю, я не понимаю, что на самом деле возвращает return_estimator.. похоже, они не подходят модели.Итак, есть ли способ извлечь модель, установленную во время перекрестной проверки, чтобы повторно использовать их?

спасибо

1 Ответ

0 голосов
/ 05 июля 2019

return_estimator возвращает «кортеж» ВСЕХ установленных моделей.

Чтобы решить эту проблему, вам нужно выбрать нужную модель, сохранить ее, загрузить и затем предсказать.

Пример:

from sklearn import datasets, linear_model
from sklearn.model_selection import cross_validate

diabetes = datasets.load_diabetes()
X = diabetes.data[:150]
y = diabetes.target[:150]
lasso = linear_model.Lasso()

cv_results = cross_validate(lasso, X, y, cv=3, return_estimator=True)
rfc_fit = cv_results['estimator']
print(rfc_fit)

Выше указаны 3 модели:

(Лассо (альфа = 1,0, copy_X = True, fit_intercept = True, max_iter = 1000,
normalize = False, положительный = False, предварительный расчет = False, random_state = None, selection = 'циклический', tol = 0,0001, warm_start = False), лассо (альфа = 1,0, copy_X = True, fit_intercept = True, max_iter = 1000, normalize = False, положительный = ложный, предварительный расчет = ложный, случайное состояние = нет,
selection = 'циклический', tol = 0,0001, warm_start = False), лассо (альфа = 1,0, copy_X = True, fit_intercept = True, max_iter = 1000, normalize = False, положительный = ложный, предварительный расчет = ложный, случайное состояние = нет,
selection = 'циклический', tol = 0.0001, warm_start = False))

Чтобы узнать, сколько моделей это содержит, сделайте следующее:

print(len(rfc_fit))
# 3

Допустим, вы хотите выбрать первую модель:

# select the first model
rfc_fit = rfc_fit[0]

# save it
from sklearn.externals import joblib
filename = os.path.join(savedir, 'final_model.joblib')
joblib.dump(rfc_fit,filename)

# load it
rfc_model2 = joblib.load(filename)

Predict теперь работает нормально:

predicted = rfc_model2.predict(X)
...