SVM'nin en iyi metaparametrelerini bulmak için hızlı yöntem (ızgara aramasından daha hızlıdır)


17

Hava kirleticilerinin kısa vadeli tahminini yapmak için SVM modellerini kullanıyorum. Yeni bir model eğitmek için bir SVM modeli için uygun metaparametreler bulmalıyım (yani C, gama vb.).

Libsvm belgeleri (ve okuduğum diğer birçok kitap) bu parametreleri bulmak için ızgara aramayı kullanmanızı önerir - bu yüzden temelde bu parametrelerin her kombinasyonu için modeli belirli bir setten eğitir ve en iyi modeli seçerim.

En uygun (veya en yakın) meta parametreleri bulmanın daha iyi bir yolu var mı? Benim için esas olarak bir hesaplama zamanı meselesidir - bu sorunun bir ızgara araştırması yaklaşık iki saat sürer (bazı optimizasyonlar yaptıktan sonra).

Izgara aramanın artıları:

  • Kolayca paralelleştirilebilir - 20 CPU'nuz varsa 20 kat daha hızlı çalışır, diğer yöntemleri paralelleştirmek daha zordur
  • Metaparametre alanının büyük bölümlerini kontrol edersiniz, bu yüzden iyi bir çözüm varsa onu bulacaksınız.

Yanıtlar:


10

Izgara aramanın olumsuz tarafı, çalışma zamanının her parametre için seçenek sayısının ürünü kadar hızlı büyümesidir.

İşte Alex Smola'nın blogunda sorunuzla ilgili bir giriş

İşte bir teklif:

[...] veri kümenizden rastgele 1000 çift (x, x ') seçin, tüm bu çiftlerin mesafesini hesaplayın ve medyan, 0.1 ve 0.9 kantil'i alın. Şimdi bu üç sayının tersi olmak için λ'yı seçin. Biraz çapraz doğrulama ile üçünden hangisinin en iyi olduğunu anlayacaksınız. Çoğu durumda daha fazla arama yapmanız gerekmez.

Bunu kendim denemedim, ama umut verici görünüyor.


Bu soru ile nasıl ilişkilidir? Soru, bir SVM modeline (hızlı bir şekilde) en iyi parametreleri bulmakla ilgilidir.
Roronoa Zoro

2
@Roronoa Zoro: Cevap da öyle. Radyal temel fonksiyonlar için parametrelerin SVM'lere (Smola'nın blog yazısında C ve \ lambda) nasıl 3 | Cs | yerine \ \ gammas || Cs | ızgara arama durumunda olduğu gibi.
carlosdc

Sadece sezgisel anlayışı anladığımdan emin olmak için, temelde SVM'yi eğitmek için veri kümesinden rastgele 1000 veri noktası çizin, sonra .1, .9 kantil ve medyanın tersini alın ve bunlar muhtemelen iyi olacak uygun bir gamma için aday?
tomas

6

Parametre ızgarasının altında nispeten pürüzsüz bir fonksiyon olduğu varsayımını yaparsanız, yapabileceğiniz bazı şeyler vardır. Örneğin, basit bir sezgisel tarama çok kaba bir parametre ızgarasıyla başlamak ve daha sonra kaba ızgaradaki parametre ayarlarının en iyisi etrafında daha ince bir ızgara kullanmaktır.

Bu, pratikte, elbette uyarılarla oldukça iyi çalışma eğilimindedir. Birincisi, alanın mutlaka pürüzsüz olmaması ve yerel optima . Kaba ızgara bunları tamamen özleyebilir ve sonuçta en uygun çözüm olabilir. Bekletme setinizde nispeten az sayıda örneğiniz varsa, aynı puanı veren çok sayıda parametre ayarınızın olabileceğini unutmayın (hata veya kullandığınız metrik). Bu, çok sınıflı öğrenme (örneğin, hepsi-bir-hepsine karşı yöntemini kullanarak) yapıyorsanız ve uzak tutma setinizde her sınıftan yalnızca birkaç örneğiniz varsa, özellikle sorunlu olabilir . Bununla birlikte, kötü doğrusal olmayan optimizasyon tekniklerine başvurmadan, bu muhtemelen iyi bir başlangıç ​​noktası olarak hizmet eder.

Burada çok güzel referanslar var . Geçmişte, çekirdeği inceleyerek (örneğin RBF çekirdeğinde, çekirdek değerlerinin histogramının iyi bir değer yayılımı sağladığını, 0 veya 1'e çarpık olmak yerine - bunu çok fazla iş yapmadan otomatik olarak da yapabilirsiniz), yani başlamadan önce aralığı daraltabilirsiniz. Daha sonra aramanızı normalleştirme / kapasite parametresi gibi diğer parametrelere odaklayabilirsiniz. Ancak elbette bu sadece önceden hesaplanmış çekirdeklerle çalışır, ancak önceden hesaplanmış çekirdekleri kullanmak istemediyseniz bunu rastgele bir nokta alt kümesinde tahmin edebilirsiniz ve bu yaklaşımın da iyi olacağını düşünüyorum.


5

Parametreleri aramak için simüle tavlama kullanıyorum .

Davranış birkaç parametre tarafından yönetilir:

  • k Boltzmann sabiti.
  • T_max başlangıç ​​sıcaklığınızdır.
  • T_min bitiş eşiğinizdir.
  • mu_T( μ) sıcaklığı ne kadar düşürdüğünüzdür ( T->T/μ)
  • i her sıcaklıktaki yineleme sayısıdır
  • zadım boyutu - bunun tam olarak ne anlama geldiğini siz belirlersiniz. Rastgele içeri giriyorum old*(1±z).
  1. Bir başlangıç ​​noktası alın (parametre değerleri kümesi).
  2. Bunun için bir enerji alın (verilerinize ne kadar iyi uyduğunu; ki kare değerleri kullanıyorum).
  3. Rastgele bir yöne bakın ("adım atın").
    • Enerji mevcut noktanızdan düşükse, oraya gidin.
    • Daha yüksekse, bir olasılıkla oraya gidin p = e^{-(E_{i+1} - E_i)/(kT)}.
  4. Tekrarlayın, vuruncaya kadar T->T/μher iyinelemeyi düşürün T_min.

Parametrelerle biraz oynayın ve iyi ve hızlı çalışan bir set bulabilmelisiniz.

Ve GNU Bilimsel Kütüphane edilmiş algoritmalar içerir.


4

Burada ilgilenen varsa konu hakkındaki düşüncelerimden bazıları:

  • @Tdc önerdiği gibi kaba / ince ızgara arama yapıyorum. Bu iki problem ortaya çıkarır:
    • Çoğu durumda, çılgınca farklı parametrelere sahip iyi metaparametre kümeleri alacağım --- bu parametrelerin en uygun çözümler olduğunu bu şekilde yorumluyorum, ancak emin olmak için tüm bu iyi parametrelerin yakınındaki tüm ince ızgaraları kontrol etmeliyim ( bu çok zaman alacaktır), bu yüzden şimdilik sadece bahis metaparametre setinin mahallesini kontrol ediyorum.
    • Çoğu durumda ince arama SVM performansını artırmaz (bunun nedeni sadece kaba ızgaradan en iyi noktanın komşuluğunu kontrol etmem olabilir.
  • Çoğu bilgi işlem süresinin iyi sonuçlar vermeyecek metaparemetre kümelerinde geçtiği davranışı gözlemledim, örneğin: çoğu metaparametre kümesi 15 saniyenin altında hesaplanacak (ve en iyisi% 15 hata oranına sahip) ve bazıları 15 dakika sürecek ( ve bunların çoğunda hata oranları% 100'den büyüktür). Şebeke araması yaparken, hesaplamak ve sonsuz hata yaşadıklarını varsaymak için 30 saniyeden fazla süren noktaları öldürüyorum.
  • Çok işlemcili (yeterince basit) kullanıyorum

1

Çekirdek radyal ise, uygun bir şekilde elde etmek için bu buluşsal yöntemi kullanabilirsiniz.σ - C optimizasyonu çok daha kolay.


Bağlantı öldü. Bahsettiğiniz buluşsal yöntem neydi?
Aalawlx
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.