En hızlı SVM uygulaması


16

Genel bir soru daha. Tahmini modelleme için bir rbf SVM kullanıyorum. Mevcut programımın kesinlikle biraz hızlanması gerektiğini düşünüyorum. Scikit öğrenmeyi kaba-ince arama + çapraz doğrulamayla kullanıyorum.

Her SVM çalışması yaklaşık bir dakika sürer, ancak tüm iterasyonlarla, hala çok yavaş buluyorum. Sonunda çapraz doğrulama parçasını çoklu çekirdekler üzerinde çoklu olarak işlediğimi varsayarsak, programımı hızlandırmak için herhangi bir öneri var mı? SVM'lerin daha hızlı uygulamaları var mı? Bazı GPU SVM'lerini duydum, ancak çok fazla araştırma yapmadım. Herhangi bir kullanıcı ve daha hızlı mı?


1
Scikit-learn'daki SGDClassifier çok hızlıdır, ancak doğrusal SVM'ler için. Scikit-learn adamlarına sorabilirsin, ayrıca scikit-learn etiketi de ekleyebilirsin.
denis

Doğrusal olmayan çekirdek SVM yavaş olmaya mahk aremdur. Belki de doğrusal modellerle oynamaya başlamalısınız (Vowpal Wabbit'e bakın) ve sonra doğrusal olmayana gitmelisiniz. Doğrusal modellerle daha karmaşık özellikler oluşturarak doğrusal olmamanızı bile sağlayabilirsiniz. Çoğu zaman doğrusal olmayan modeller, büyük hesaplama masraflarında artımlı performans artışına neden olur. Doğrusal olmayan çekirdek SVM'ye karşı hiçbir şey değil, sadece pratik açıdan akılda tutmak.
Vladislavs Dovgalecs

1
Şebeke aramasından çok daha verimli olan hiperparametre araması için özel ayar kitaplıkları kullanarak hızlandırabilirsiniz (yani, çok daha az hiperparametre kümesinin test edilmesini gerektirir). Ayar kitaplıklarına örnek olarak Optunity ve Hyperopt verilebilir.
Marc Claesen

Yanıtlar:


16

Google'ın Sofya algoritması , lineer bir SVM'nin son derece hızlı bir uygulamasını içeriyor. Buradaki en hızlı SVM'lerden biri, ancak bence sadece sınıflandırmayı destekliyor ve sadece doğrusal SVM'leri destekliyor.

Bir R paketi bile var !


Bağlantınız artık "'RSofia' paketi CRAN deposundan kaldırıldı" diyor. Neden olduğu hakkında bir fikrin var mı?
James Hirschorn

@JamesHirschorn Geliştirici muhtemelen onu korumayı bıraktı. CRAN arşivinden yükleyebilirsiniz.
Zach

10

Alacağınız en kolay hız, çapraz doğrulamayı paralel olarak yürütmektir. Şahsen, R'nin arka uç olarak foreach kullanan caret paketini seviyorum . Çapraz doğrulamayı ve ızgara aramasını birden çok çekirdeğe veya birden çok makineye gruplandırmayı çok kolaylaştırır.

Caret, rbf SVM'ler de dahil olmak üzere birçok farklı modeli işleyebilir:

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 () kitaplığının yalnızca mac ve linux'da kullanılabildiğini, bir GUI'den değil komut satırından çalıştırılması gerektiğini ve RWeka'daki tüm modelleri bozduğunu unutmayın. MPI veya SNOW kümelerini paralel arka uç olarak kullanmak da kolaydır , bu sorunlara sahip değildir.


Teşekkürler Zach. Scikitlerin aynı zamanda çapraz doğrulamayı paralel yapmanın bir yolu olduğuna inanıyorum ki bunu yapmayı planlıyorum. Hariç tutulduğunda, hızlandırma konusunda başka önerileriniz var mı? Teşekkürler.
tomas

@danjeharry: paralel çapraz doğrulama gerçekten düşük meyveli meyvedir ve bunu önce keşfetmenizi şiddetle tavsiye ederim. Bunun ötesinde, özellikle SVM'leri hızlandırma hakkında pek bir şey bilmiyorum. Paralel bir SVM algoritması bulabilirseniz, bu da iyi bir fikir olabilir. Eğitim için veri kümesini kaç satır / sütun kullanıyorsunuz?
Zach

Teşekkürler Zach Ben paralel CV'ye bakacağım. Yaklaşık 650 özellik ve 5000 örnek yapıyorum.
tomas


2

Python'un çoklu işleme modülüne bir göz atın . Paralel hale getirmeyi gerçekten kolaylaştırır ve çapraz doğrulama için mükemmeldir.


2

R'nin harika bir GPU hızlandırmalı svm paketi rpusvm var , 20K örnekleri * 100 boyutlarında eğitmek ~ 20 saniye sürüyor ve CPU'nun asla aşırı yüklenmediğini buldum, bu yüzden GPU'yu verimli bir şekilde kullanıyor. Ancak, bir NVIDIA GPU gerektirir.


1

Uyarı: Bu utanmaz bir fiş.

DynaML'ı üzerinde çalıştığım Scala tabanlı bir ML kütüphanesi olarak düşünün. Çekirdek tabanlı LS-SVM (En Küçük Kareler Destek Vektör Makineleri) ile birlikte otomatik çekirdek ayarı, ızgara araması veya Birleştirilmiş Simüle Tavlama'yı kullandım.

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

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.