2014-01-27 3 views
4

Documentation here.scikit learn svc coef0 диапазон параметров

Мне интересно, насколько важен параметр coef0 для SVC под полиномиальными и сигмоидными ядрами. Насколько я понимаю, это термин перехвата, просто константа, как в линейной регрессии, чтобы компенсировать функцию от нуля. Однако, насколько мне известно, SVM (scikit использует libsvm) должен найти это значение.

Какой хороший общий диапазон для тестирования (есть один?). Например, обычно с C, безопасный выбор составляет 10^-5 ... 10^5, поднимаясь по экспоненциальным шагам.

Но для coef0 значение кажется очень зависимым от данных, и я не уверен, как автоматизировать выбор подходящих диапазонов для каждого поиска сетки на каждом наборе данных. Любые указатели?

ответ

3

Во-первых, сигмоидная функция редко является ядром. Фактически, для почти нет значений значений, которые, как известно, индуцируют действительное ядро ​​(в смысле Мерсера).

Во-вторых, coef0 не является термином перехвата, это параметр проекции ядра, который можно использовать для преодоления одной из важных проблем с ядром полинома. В общем, просто использование coef0 = 0 должно быть просто прекрасным, но полиномиальное ядро ​​имеет одну проблему, с p-> inf, все больше и больше разделяет пары точек, для которых <x,y> меньше 1 и <a,b> с большим значением. это потому, что силы значений, меньшие единицы, становятся все ближе и ближе к 0, а одна и та же мощность больше, чем одна, увеличивается до бесконечности. Вы можете использовать coef0 для «масштабирования» ваших данных, чтобы не было такого различия - вы можете добавить 1-min <x,y>, поэтому значения не будут меньше 1. Если вы действительно ощущаете необходимость в настройке этого параметра, я бы предложил поиск в диапазоне от [min (1 минута, 0), максимум (<x,y>)], где max вычисляется через весь набор тренировок.

+0

Я не совсем понимаю ваше первое предложение - вы говорите для сигмовидного ядра, что это бесполезный параметр для оптимизации? И из остальной части вашего комментария вы бы сказали, что справедливо использовать 1 всегда для полиномиальных ядер, чтобы избежать значений <1? – lollercoaster

+1

Первое утверждение утверждает, что сигмоид ** не является ядром ** для большинства параметров. Речь идет не о настройке, как правило, ** неправильная функция для использования с машинами ядра **. Он был введен, чтобы сделать сообщество нейронных сетей более знакомым с svms, но это было не очень хорошо. Для poly я бы сказал, что это сохранить, чтобы проверить значения coef0 0 и 1. Поскольку оба могут иметь некоторые хорошие свойства, но я оставил бы проверку других значений. – lejlot

+1

Я не согласен с общим утверждением, что сигмоид - неправильное ядро ​​выбора. Все начинается с данных. Если ваши данные хорошо сопоставляются с сигмоидом, то сигмоид - ваш выбор. У меня были случаи, когда сигмоид оказался правильной функцией для моделирования моих данных. –