가장 빠른 SVM 구현


16

더 일반적인 질문입니다. 예측 모델링을 위해 rbf SVM을 실행하고 있습니다. 현재 프로그램에 약간의 속도 향상이 필요하다고 생각합니다. 나는 scikit learn을 거친 그리드 검색 + 교차 유효성 검사와 함께 사용합니다.

각 SVM 실행에는 약 1 분이 걸리지 만 모든 반복 작업으로 인해 여전히 너무 느립니다. 결국 여러 코어에서 교차 유효성 검사 부분을 멀티 스레드한다고 가정하면 프로그램 속도 향상에 대한 권장 사항이 있습니까? 더 빠른 SVM 구현이 있습니까? 일부 GPU SVM에 대해 들어 봤지만 많이 다루지 않았습니다. 모든 사용자가 더 빠릅니까?


1
scikit-learn의 SGDClassifier는 매우 빠르지 만 선형 SVM에는 적합합니다. 당신은 scikit-learn 사람들에게 태그 scikit-learn을 추가하도록 요청할 수 있습니다.
56 분

비선형 커널 SVM은 느리게 작동합니다. 아마도 선형 모델로 게임을 시작하고 (Vowpal Wabbit을 확인한 후) 비선형으로 이동해야합니다. 선형 모델로 더 복잡한 피처를 만들어 비선형 성을 얻을 수도 있습니다. 종종 비선형 모델로 인해 계산 비용이 많이 들지만 성능이 약간 향상됩니다. 비선형 커널 SVM에 대한 것은 아니지만 실제적인 관점에서 명심하십시오.
Vladislavs Dovgalecs

1
그리드 검색보다 훨씬 효율적인 하이퍼 파라미터 검색을 위해 특수화 된 튜닝 라이브러리를 사용하여 속도를 높일 수 있습니다 (즉, 훨씬 적은 수의 하이퍼 파라미터를 테스트해야 함). 튜닝 라이브러리의 예로는 Optunity 및 Hyperopt가 있습니다.
Marc Claesen 5

답변:


16

Google의 Sofia 알고리즘 에는 선형 SVM의 매우 빠른 구현이 포함되어 있습니다. 그것은 가장 빠른 SVM 중 하나이지만 분류 만 지원하고 선형 SVM 만 지원한다고 생각합니다.

심지어 R 패키지가 있습니다 !


귀하의 링크에 "패키지 'RSofia'가 CRAN 저장소에서 제거되었습니다"라고 표시되어 있습니다. 왜 그런지 알아?
James Hirschorn 5

@JamesHirschorn 개발자가 아마 유지 관리를 중단했을 것입니다. CRAN 아카이브에서 설치할 수 있습니다.
Zach

10

가장 빠른 속도 향상은 교차 유효성 검사를 병렬로 실행하는 것입니다. 개인적으로, 나는 foreach 를 백엔드로 사용하는 R캐럿 패키지를 좋아합니다 . 교차 유효성 검사 및 그리드 검색을 여러 코어 또는 여러 시스템으로 매우 쉽게 농사화할 수 있습니다.

Caret은 rbf SVM을 포함하여 다양한 모델을 처리 할 수 ​​있습니다.

library(caret)
library(doMC)
registerDoMC()
model <-  train(Species ~ ., data = iris, method="svmRadial", 
    trControl=trainControl(method='cv', number=10))
> confusionMatrix(model)
Cross-Validated (10 fold) Confusion Matrix 

(entries are percentages of table totals)

            Reference
Prediction   setosa versicolor virginica
  setosa       32.4        0.0       0.0
  versicolor    0.0       30.9       2.0
  virginica     0.9        2.4      31.3

doMC () 라이브러리는 mac 및 Linux에서만 사용 가능하며 GUI가 아닌 명령 행에서 실행해야하며 RWeka의 모든 모델을 중단합니다. MPI 또는 SNOW 클러스터를 병렬 백엔드로 사용하기도 쉽지만 이러한 문제는 없습니다.


고마워 Zach. 나는 scikits가 교차 계획을 병렬로 실행하는 방법을 가지고 있다고 생각합니다. 그 외에는 속도 향상에 대한 다른 제안이 있습니까? 감사.
tomas

@ danjeharry : 병렬 교차 유효성 검사는 실제로 여기에 매달려있는 과일이므로 먼저 탐색 해 보는 것이 좋습니다. 그 외에도 SVM의 속도를 높이는 방법에 대해서는 잘 모릅니다. 병렬 SVM 알고리즘을 찾을 수 있다면 좋은 생각 일 수도 있습니다. 훈련하는 데 사용하는 데이터 세트는 몇 행 / 열입니까?
Zach

고맙습니다 Zach 나는 평행 이력서를 볼 것입니다. 약 650 개의 속성과 5000 개의 예제를 수행하고 있습니다.
tomas



2

R은 GPU 가속 svm 패키지 rpusvm 을 가지고 있으며 20K 샘플 * 100 크기를 학습하는 데 ~ 20 초가 걸리며 CPU에 과부하가 걸리지 않으므로 GPU를 효율적으로 사용합니다. 그러나 NVIDIA GPU가 필요합니다.


1

경고 : 이것은 뻔뻔한 플러그입니다.

내가 작업중 인 스칼라 기반 ML 라이브러리 인 DynaML을 고려하십시오. 그리드 검색 또는 Coupled Simulated Annealing을 사용하여 자동 커널 튜닝과 함께 커널 기반 LS-SVM (Least Squares Support Vector Machines)을 구현했습니다.

http://mandar2812.github.io/DynaML/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.