2013-03-29 2 views
2

Я использую SVC из scikit-learn на большом наборе данных 10000x1000 (10000 объектов с 1000 функциями). Я уже видел в других источниках, которые SVMLIB не масштабируются за ~ 10000 объектов, и я действительно наблюдать это:Weird SVM performance performance in scikit-learn (SVMLIB)

training time for 10000 objects: 18.9s 
training time for 12000 objects: 44.2s 
training time for 14000 objects: 92.7s 

Вы можете себе представить, что происходит, когда я пытаюсь 80000. Тем не менее, то, что я нашел очень удивителен Дело в том, что SVM предсказывают() занимает еще больше времени, чем обучение запрессовки():

prediction time for 10000 objects (model was also trained on those objects): 49.0s 
prediction time for 12000 objects (model was also trained on those objects): 91.5s 
prediction time for 14000 objects (model was also trained on those objects): 141.84s 

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

+3

Вы делаете прогнозы в партиях? Метод «SVC.predict», к сожалению, несет много накладных расходов, поскольку он должен восстановить структуру данных LibSVM, аналогичную той, которую подготовил алгоритм обучения, мелкой копии в векторах поддержки и преобразовать тестовые образцы в LibSVM формат, который может отличаться от форматов NumPy/SciPy. Поэтому прогнозирование на одном образце должно быть медленным. –

ответ

2

Уверены ли вы, что вы не указали время обучения в меру времени прогнозирования? У вас есть фрагмент кода для ваших таймингов?

+0

Совершенно уверен, что я использую только одну команду: либо fit(), либо pred(). У меня есть опыт работы с такими инструментами, и он отлично подходит для других моделей. – Bitwise

+1

Хорошо, тогда простое число векторов поддержки растет линейно с набором тренировок (например, если почти все выборки выбраны как SV), а затем растет число выборок, а значит, и квадратичная эволюция времени. – ogrisel

+0

Хорошая точка, что действительно может быть причиной нелинейного роста. Вы ожидали бы линейности, только если бы вы использовали * такую ​​же модель на растущем количестве образцов. Тем не менее, я все еще удивляюсь, что предсказание медленнее, чем подготовка к проблеме такого размера. – Bitwise