최고의 SVM 메타 파라미터를 찾는 빠른 방법 (그리드 검색보다 빠름)


17

대기 오염 물질을 단기 예측하기 위해 SVM 모델을 사용하고 있습니다. 새 모델을 훈련 시키려면 SVM 모델 (C, 감마 등)에 적합한 메타 파라미터를 찾아야합니다.

Libsvm 문서 (및 내가 읽은 많은 다른 책들)는 그리드 검색을 사용하여 이러한 매개 변수를 찾는 것을 제안합니다. 따라서 기본적으로 특정 세트에서 이러한 매개 변수의 각 조합에 대한 모델을 교육하고 최상의 모델을 선택합니다.

최적 (또는 거의 최적) 메타 매개 변수를 찾는 더 좋은 방법이 있습니까? 나에게 그것은 주로 계산 시간의 문제입니다.이 문제의 한 그리드 검색에는 약 2 시간이 걸립니다 (일부 최적화를 한 후).

그리드 검색의 장점 :

  • 쉽게 병렬화 할 수 있습니다-20 개의 CPU가 있다면 20 배 빠르게 실행되며 다른 방법을 병렬 처리하는 것이 더 어렵습니다
  • 메타 매개 변수 공간의 큰 부분을 확인하므로 좋은 해결책이 있으면 찾을 수 있습니다.

답변:


10

그리드 검색의 단점은 런타임이 각 매개 변수에 대한 옵션 수의 곱만큼 빠르게 증가한다는 것입니다.

여기입니다 알렉스 Smola의 블로그 항목 질문에 관련이

인용문은 다음과 같습니다.

[...] 데이터 세트에서 무작위로 1000 쌍 (x, x ')을 선택하여 그러한 모든 쌍의 거리를 계산하고 중앙값, 0.1 및 0.9 분위수를 취합니다. 이제 λ를 선택하여이 세 숫자의 역수를 구하십시오. 약간의 교차 검증을 통해 세 가지 중 어느 것이 가장 좋은지 알아낼 것입니다. 대부분의 경우 더 이상 검색 할 필요가 없습니다.

나는 이것을 직접 시도하지는 않았지만 유망한 것으로 보인다.


이것은 질문과 어떤 관련이 있습니까? 문제는 SVM 모델에 가장 적합한 매개 변수를 찾는 것입니다 (빠른 방법으로).
Roronoa Zoro

2
@Roronoa Zoro : 그리고 그 대답도 마찬가지입니다. 3 | Cs에서 방사형 기본 함수 기반 SVM (Smola의 블로그 게시물에서 C 및 \ lambda)에 대한 매개 변수를 찾는 방법을 설명합니다. | \ gammas || Cs |와 반대로 시간 그리드 검색의 경우처럼 수행됩니다.
carlosdc

휴리스틱을 이해하고 있음을 명확히하기 위해 기본적으로 SVM을 훈련하기 위해 데이터 세트에서 1000 개의 데이터 포인트를 임의로 추출 한 다음 0.1, .9 분위수와 중간의 역수를 취하면 그 결과는 좋을 것입니다 적합한 감마 후보?
tomas

6

매개 변수 그리드의 기본 기능으로 비교적 부드러운 기능이 있다고 가정하면 수행 할 수있는 작업이 있습니다. 예를 들어 간단한 휴리스틱 중 하나는 매우 거친 매개 변수 격자로 시작한 다음 거친 격자에서 가장 좋은 매개 변수 설정 주위에 더 미세한 격자를 사용하는 것입니다.

이것은 물론 경고와 함께 실제로는 잘 작동하는 경향이 있습니다. 첫째, 공간이 반드시 매끄럽지 않아도되며 로컬 최적화 가있을 수 있습니다 . 굵은 격자가 완전히 누락 될 수 있으며 차선책으로 해결 될 수 있습니다. 또한 홀드 아웃 세트에 샘플이 상대적으로 적은 경우 동일한 점수 (오류 또는 사용중인 메트릭)를 제공하는 많은 매개 변수 설정이있을 수 있습니다. 다중 클래스 학습을 수행하는 경우 (예 : 단일 대 방법을 사용하는 경우) 홀드 아웃 세트의 각 클래스에서 몇 가지 예만 있는 경우 특히 문제가 될 수 있습니다 . 그러나, 불규칙한 비선형 최적화 기술에 의지하지 않고, 이것은 아마도 좋은 출발점이 될 것입니다.

여기에 좋은 참조 세트가 있습니다 . 과거에는 커널을 검사하여 적절한 범위의 커널 하이퍼 파라미터를 합리적으로 추정 할 수있는 접근 방식을 취했습니다 (예 : RBF 커널의 경우 커널 값의 히스토그램이 값을 잘 분산시키는 지 확인하십시오. 0 또는 1쪽으로 치우 치지 않고 너무 많은 작업없이 자동으로 수행 할 수 있습니다.) 시작하기 전에 범위를 좁힐 수 있습니다. 그런 다음 정규화 / 용량 매개 변수와 같은 다른 매개 변수에 대한 검색에 집중할 수 있습니다. 그러나 물론 이것은 사전 계산 된 커널에서만 작동하지만 사전 계산 된 커널을 사용하지 않으려는 경우 임의의 부분 집합에서이를 추정 할 수 있지만 그 접근법도 괜찮을 것이라고 생각합니다.


5

매개 변수를 검색 하기 위해 시뮬레이션 어닐링 을 사용 합니다.

이 동작은 몇 가지 매개 변수로 제어됩니다.

  • k 볼츠만의 상수입니다.
  • T_max 시작 온도입니다.
  • T_min 종료 임계 값입니다.
  • mu_T( μ)는 온도를 낮추는 정도입니다 ( T->T/μ)
  • i 각 온도에서 반복 횟수
  • z단계 크기입니다. 정확히 무엇을 의미하는지 결정합니다. 내에서 무작위로 이동합니다 old*(1±z).
  1. 시작점을 취하십시오 (매개 변수 값 세트).
  2. 그것에 대한 에너지를 얻으십시오 (귀하의 데이터에 얼마나 잘 맞습니까? 나는 카이 제곱 값을 사용합니다).
  3. 임의의 방향으로 본다 ( "걸음").
    • 에너지가 현재 지점보다 낮 으면 그곳으로 이동하십시오.
    • 더 높으면 확률로 이동하십시오 p = e^{-(E_{i+1} - E_i)/(kT)}.
  4. 반복 할 때까지 반복 할 때 T->T/μ마다 i반복합니다 T_min.

매개 변수를 조금만 사용하면 효과적이고 빠르게 작동하는 세트를 찾을 수 있습니다.

그리고 GNU Scientific Library 에는 시뮬레이션 어닐링이 포함되어 있습니다.


4

여기에 관심이있는 사람이라면 주제에 대한 나의 생각 중 일부입니다.

  • @tdc가 제안한 것처럼 거친 / 미세 그리드 검색을하고 있습니다. 두 가지 문제가 있습니다.
    • 대부분의 경우 나는 매개 변수가 매우 다른 좋은 메타 매개 변수 세트를 얻을 것입니다. 그것은 많은 시간이 걸릴 것입니다), 그래서 지금은 내기 메타 매개 변수 세트의 이웃 만 확인합니다.
    • 대부분의 경우 정밀한 검색은 SVM 성능을 향상시키지 않습니다 (이것은 거친 그리드에서 최상의 지점의 근사 성만 확인하기 때문일 수 있습니다).
  • 나는 대부분의 컴퓨팅 시간이 좋은 결과를 얻지 못하는 metaparemeters 세트에 소비되는 행동을 관찰했다. 이들 중 대부분은 오류율이 100 %보다 큽니다). 따라서 그리드 검색을 할 때 계산에 30 초 이상 걸리는 포인트를 죽이고 무한 오류가 있다고 가정합니다.
  • 멀티 프로세싱을 사용합니다 (충분히 간단 함).

1

커널이 방사형 인 경우이 휴리스틱 을 사용 하여 적절한σ -C 최적화가 훨씬 쉬워졌습니다.


연결이 끊어졌습니다. 참조한 휴리스틱이란 무엇입니까?
Aalawlx
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.