2015-05-01 3 views
3

Производительность классификатора машинного обучения может быть измерена с помощью различных показателей, таких как точность, отзыв и точность классификации, среди других показателей.scikit-learn classifier fit целевая функция, точность и отзыв

Учитывая следующий код:

clf = svm.SVC(kernel='rbf') 
clf.fit(X_train, y_train) 
  1. Что метрика подгонка функция пытается optimze?

  2. Как можно настроить модель для повышения точности, когда точность намного важнее, чем отзыв?

ответ

2
  1. Насколько я знаю, SVMs свести к минимуму потери петли.

  2. Мне не известно о каком-либо универсальном способе сделать классификатор векторных носителей приоритетом для точности отзыва. Как всегда, вы можете использовать кросс-проверку, а затем играть с гиперпараметрами, чтобы увидеть, помогает ли что-то. В качестве альтернативы вы можете обучить регрессию, выдав значение в [0,1] вместо классификатора. Затем, выбирая правильный порог, чтобы все примеры получали оценку выше этого порога в категорию «1», вы получаете классификатор с настраиваемым пороговым параметром, который вы можете установить произвольно высоким, чтобы максимизировать точность над отзывом.

2

Вы можете настроить параметры вашего SVM с помощью Grid Search Cross Validation, чтобы максимально повысить точность. Для этого, установите параметр «скоринг» как

sklearn.grid_search.GridSearchCV(clf, param_grid, scoring="precision") 

Здесь clf твой SVC классификатор и, конечно же, вам также необходимо установить сетку параметров param_grid. См. Примеры here

+0

Я не уверен, насколько хороша идея, так как вы можете получить 100%, установив порог соответствующим образом ... Наверное, этого не произойдет, все еще не так принципиально. –

+0

@ Andreas Mueller Конечно, существует несколько _strategies_ по улучшению производительности модели. Это фактическая работа, которую вы делаете при изучении вашего набора данных. Без какой-либо информации о наборе данных, я думаю, этот вопрос касается API scikit-learn. – lanenok

2

Я вижу два пути: оптимизация с помощью поиска по сетке параметров, как предлагает @laneok, или оптимизация путем корректировки порогового значения, как предлагает @cfh.

Оптимально вы должны сделать то и другое.

Я бы не стал оптимизировать точность, поскольку вы обычно получаете 100% -ную точность, устанавливая очень высокий порог и получая очень низкий отзыв. Поэтому, если это возможно, вы можете определить компромисс между точностью и отзывом, который вам нравится, и grid-search.

Возможно, вы получите лучшие результаты для этого, если вы действительно выбрали отдельный порог. Вы можете использовать SVC.decision_function для получения непрерывного вывода, а затем выбрать оптимальный порог для компромисса, который вы хотите достичь. Однако для выбора порога вам понадобится набор проверки, который делает это внутри grid-search более сложным (не исключено).

То, что я обычно нахожу, является хорошим компромиссом между оптимизацией того, что вы хотите и сложностью конвейера, чтобы оптимизировать в grid-поиске что-то, что будет учитывать точность, скажем, «roc_auc» и после того, поиск выбирает порог в наборе валидации, основанный на компромиссе, который вам нравится.

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

+0

Вы правы, хотя вы получите точность NaN, если вы никогда ничего не предсказываете. Исправлен мой ответ. –

+0

упал бесплатно. Ваш комментарий был определенно ценным;) –

Смежные вопросы