python sklearn Logisti c Регрессия: составление графика поезда, проверка точности и сохранение лучшей модели - PullRequest
0 голосов
/ 18 апреля 2020

В течение нескольких дней я изо всех сил пытаюсь найти простой способ составить график потери поезда и проверки регрессионной модели Logisti c и сохранить лучшую модель (в соответствии с потерями при проверке).

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

Существует много пакетов, таких как "cross_validate, learning_curve, validation_curve": https://scikit-learn.org/stable/modules/classes.html#module -sklearn.model_selection Но я не уверен, как использовать их точно чистым и эффективным способом.

У кого-нибудь была такая же проблема? Я был удивлен, что у sklearn нет этой «очевидной» функции (которая есть у keras / tenorflow). Или я использую sklearn неправильно? Как еще я знаю, когда прекратить тренировки? Запустить тренинг для разного количества итераций и сравнить цифры вручную?

Заранее спасибо!

РЕДАКТИРОВАТЬ: Чтобы уточнить В керас у вас есть что-то вроде этого: monitor='val_loss' и save_best_only=True.

checkpoint = ModelCheckpoint('model-{epoch:03d}-{acc:03f}-{val_acc:03f}.h5', verbose=1, monitor='val_loss',save_best_only=True, mode='auto')  

model.compile(optimizer='adam', loss='mean_squared_error', metrics=['accuracy'])

model.fit(X, y, epochs=15, validation_split=0.4, callbacks=[checkpoint], verbose=False)

Это отображает потери в поездах и тестах на графиках после каждой итерации обучения. Кроме того, он хранит лучшие модели на пути. Если, например, на итерации 23 потеря проверки является лучшей (до этого момента), модель сохраняется на диск. Если на следующей итерации потери при проверке возрастают, модели не сохраняются и т. Д. c. Таким образом, в результате (например, после 100 эпох) у вас есть график потери обучения и проверки + сохраненные модели с наименьшими потерями проверки.

Имеет ли sklearn аналогичную функцию (для Logisti c Регрессия) ? Потому что в стандартном случае я могу указать количество итераций, например:

k_fold = StratifiedKFold(n_splits=5)
clf = LogisticRegression(penalty="l2", max_iter=100)
cross_val_score(clf, X, y, cv=k_fold, n_jobs=-1, scoring='precision_macro', verbose=1)

Но это обучит модель для 100 итераций. Но может случиться так, что потеря проверки в итерации 80 была лучшей, и я мог бы остановить обучение там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...