2012-02-06 8 views
4

SVM으로 일부 예측 모델을 구축하는 scikit-learn과 협력하고 있습니다. 약 5000 개의 예제와 약 700 개의 기능을 가진 데이터 세트가 있습니다. 나는 훈련 세트에서 18x17 격자 검색으로 5 배 십자가 유효성을 검사하고 내 테스트 세트에 최적의 매개 변수를 사용합니다. 실행이 예상보다 오래 걸리고 다음과 같은 사실을 발견했습니다.SVM implmentation, scikits는 런타임 감소, 가장 빠른 svm을 배웁니다.

1) 일부 SVM 교육 반복은 1 분 정도 소요되는 반면 다른 15 분 정도 소요될 수 있습니다. 이것은 다른 데이터 및 매개 변수 (C 및 감마, 나는 rbf 커널을 사용하고 있습니다)로 예상됩니까?

2) Windows에서 64 비트 파이썬을 사용하여 추가 메모리를 활용하려하지만 내 모든 파이썬 프로세스가 작업 관리자에서 1 기가를 차지하는 것으로 보입니다. 런타임과 관련이 있습니다.

3) 이전에 32 비트를 사용하여 거의 동일한 데이터 세트에서 실행 중이었지만 결과는 저장하지 않았지만 기억이 빨라졌습니다. 필자는 제 3 자 빌드를 사용하여 64 비트 창에 scikit-learn을 작성 했으므로 32 비트 파이썬에서이 방법을 시도하는 것이 더 좋은지 잘 모릅니다. (소스 http://www.lfd.uci.edu/~gohlke/pythonlibs/)

내가 런타임을 줄일 수있는 방법에 대한 제안은 크게 감사하겠습니다. 내 표 검색의 검색 공간을 줄이는 것이 도움이 될 것 같지만 최적의 매개 변수 범위조차 확신 할 수 없으므로 가능한 한 크게 유지하고 싶습니다. 더 빠른 SVM 구현이있는 경우 저에게 알려주십시오. 제가 시도해 볼 수 있습니다.

부록 : 돌아가서 32 비트 버전을 다시 실행 해 보았습니다. 그것은 어떤 이유로 더 빠릅니다. 64 시간 버전이 16 시간 내에 도착하는 데 약 3 시간이 걸렸습니다. 왜 그런 차이가 있을까요?

답변

6

1) 이것은 예상됩니다. 작은 감마와 작은 정규화는 더 많은 지원 벡터를 선택하므로 모델이 더 복잡하고 길어집니다.

2) 기본 libsvm 라이브러리로 전달되는 cache_size 인수가 있습니다. 그러나 데이터에 따라 libsvm은 사용 가능한 모든 캐시를 사용하거나 사용하지 않을 수 있습니다.

3) 알 수 없음. 두 플랫폼 모두에서 시간 초과 실험을 실행하면 프로젝트 메일 링리스트에 결과를보고하십시오. 더 자세한 조사가 필요할 것입니다.

먼저 기능을 정규화했는지 확인하십시오 (예 : 데이터가 고밀도 배열 인 경우 변형으로 평균 및 비율 특성 제거). 스파 스 데이터의 경우 기능을 확장하거나 (예 : 텍스트 데이터에 TF-IDF 변환 사용). 문서의 preprocessing section을 참조하십시오.

그런 다음 대수 그리드로 시작해야합니다 (대수적인 단계가 있음). 3x3 그리드를 말한 다음 해당 영역에 3x3 그리드를 재실행하여 관심 영역에 집중하십시오. 일반적으로 Cx 감마 SVM 매개 변수 표는 quite smooth입니다.

+0

답변 해 주셔서 감사합니다. 그들은 많은 의미를가집니다. 나는 32 비트 대 64 비트 문제 중 하나에 대해서는 확신하지 못하지만, 기회가 생기면 몇 가지 시간 초과 된 실행을 시도 할 것이다. 내 데이터가 사전 처리되어 (0-1로 정규화) scikits에 대해 cache_size가 4000으로 증가했습니다 (아마도 잔인 함). 확실히 코드를 수정하여 굵은 눈금에서 작은 영역으로 이동하여 코드를 빠르게 처리하는 데 도움이 될 것입니다. 다시 한번 감사드립니다. – tomas

+0

@OGrisel, 일반 조잡한 그리드 탐색기는 어떨까요? – denis

+0

다른 질문이 있습니다. 교차 유효성 검사 + 격자 검색을 수행하는 경우 어떻게 거친 격자 검색을 사용할 수 있습니까? 평균화를 시도하거나 여러 교차 유효성 검사를 실행할 때 검색 기준은 굵은 다음 괜찮을 때 일치하지 않습니다. 내가 알지 못하는 좋은 길이 있다는 것을 확신합니다. – tomas

3

SGD 은 매우 빠르지 만 1) 선형 만하지 RBF, 2) 매개 변수 알파 eta0 ... 내가 변화하는 방법을 아무 생각이없는 : 를 전문가, O. Grisel에 걸쳐.

32 비트 대 64 비트 파이썬 (어떤 하드웨어, 어떤 py 버전입니까?), 잘 모르겠지만 SO- 벤치 마크 슈트가 있어야합니다. CPU 사용량이 90 % 이상이며 가비지 수집을 계산할 수 있습니까?당신이 줄 수있는 경우에

+0

[명시적인 기능을 사용하여 확장 가능한 방식으로 비선형 RBF 커널을 근사 할 수 있습니다 maps] (http://scikit-learn.org/dev/auto_examples/plot_kernel_approximation.html#example-plot-kernel-approximation-py) 및 SGDClassifier와 같은 선형 분류자를 사용합니다. – ogrisel

+0

아, 맞아. 알파와 eta0을 어떻게 바꿀 수 있는지에 대한 의견이 있으십니까? – denis

+0

나는'eta0' (어쩌면 내가해야 함)을 조정하려하지 않는다. 'alpha'에 대해서'LinearSVC'에서'C'에 대해서'GridSearchCV'를 사용합니다. – ogrisel

4

, LinearSVC 사용을 고려 : libsvm 기반으로 SVC는 O(n_features * n_samples^2)O(n_features * n_samples^3) 사이 교육의 복잡성을 가지고, (liblinear 기준) LinearSVC가 O(n_features*n_samples) 교육의 복잡성과 O(n_features) 테스트의 복잡성을 가지고있다.

+0

실제로 'SGDClassifier'는 scikit-learn에서 선형 SVM 모델을 피팅하는 데 더 빠릅니다. 그리고 우리는 아직 평균을 구현하지 않았습니다 :) – ogrisel

+0

잘 고맙습니다, 감사합니다! –