Способ вычисления значения функции потерь для данных для SGDClassifier?

Я использую SGDClassifier в сочетании с методом частичной подгонки для обучения множеству данных. Я бы хотел следить за достижением приемлемого уровня конвергенции, а это значит, что я хотел бы знать потери каждый раз на некоторых данных (возможно, обучение, возможно, сдерживание, возможно, и то, и другое).

Я знаю, что эта информация доступна, если я передаю verbose = 1 в конструкторе классификатора, но я бы хотел запросить его программно, а не визуально. Я также знаю, что могу использовать метод оценки, чтобы получить точность, но я бы хотел, чтобы фактическая потеря была измерена моей выбранной функцией потерь.

Кто-нибудь знает как это сделать?

2 ответа

Вам придется использовать либо метод score, либо одну из функций потерь в sklearn.metrics, которая называется явно. Не все потери SGDC находятся в sklearn.metrics, но логарифмическая потеря и потеря циклы.


Вышеприведенный ответ был слишком коротким, устаревшим и может привести к обману.

Использование метода оценки может дать только точность (это в BaseEstimator). Если вы хотите функцию потерь, вы можете либо вызвать частную функцию _get_loss_function (определенную в BaseSGDClassifier). Или получить доступ к BaseSGDClassifier.loss_functions класса BaseSGDClassifier.loss_functions который даст вам диктовку и чью запись является функцией вызываемого для потери функции (с настройкой по умолчанию)

Кроме того, использование sklearn.metrics может не получить точных потерь, используемых для минимизации (из-за регуляризации и того, что свести к минимуму, но вы можете вручную вычислить). Точный код функции Loss определен в коде cython (sgd_fast.pyx, вы можете найти код в scikit-learn github repo)

Я ищу хороший способ построить прогресс по минимизации. Вероятно, будет переназначать stdout и проанализировать вывод.

Кстати, я использую 0.17.1. Итак, обновление для ответа.

licensed under cc by-sa 3.0 with attribution.