Я вижу два пути: оптимизация с помощью поиска по сетке параметров, как предлагает @laneok, или оптимизация путем корректировки порогового значения, как предлагает @cfh.
Оптимально вы должны сделать то и другое.
Я бы не стал оптимизировать точность, поскольку вы обычно получаете 100% -ную точность, устанавливая очень высокий порог и получая очень низкий отзыв. Поэтому, если это возможно, вы можете определить компромисс между точностью и отзывом, который вам нравится, и grid-search.
Возможно, вы получите лучшие результаты для этого, если вы действительно выбрали отдельный порог. Вы можете использовать SVC.decision_function для получения непрерывного вывода, а затем выбрать оптимальный порог для компромисса, который вы хотите достичь. Однако для выбора порога вам понадобится набор проверки, который делает это внутри grid-search более сложным (не исключено).
То, что я обычно нахожу, является хорошим компромиссом между оптимизацией того, что вы хотите и сложностью конвейера, чтобы оптимизировать в grid-поиске что-то, что будет учитывать точность, скажем, «roc_auc» и после того, поиск выбирает порог в наборе валидации, основанный на компромиссе, который вам нравится.
roc_auc в основном оптимизирует для всех возможных пороговых значений одновременно, поэтому параметры не будут такими же конкретными для порога, который вы хотите, как они могли бы быть.
Я не уверен, насколько хороша идея, так как вы можете получить 100%, установив порог соответствующим образом ... Наверное, этого не произойдет, все еще не так принципиально. –
@ Andreas Mueller Конечно, существует несколько _strategies_ по улучшению производительности модели. Это фактическая работа, которую вы делаете при изучении вашего набора данных. Без какой-либо информации о наборе данных, я думаю, этот вопрос касается API scikit-learn. – lanenok