2012-11-10 15 views
8

Libsvm, ölçekleme verileri için araçlar sağlarken, Scikit-Learn (SVC sınıflandırıcı için libSVM'ye dayalı olmalıdır) ile verilerimi ölçeklendirmenin bir yolunu bulmuyorum.scikit-learn'de ölçekleme verileri SVM

Temel olarak, 0 ile 1 arasında 3 aralık olan ve sonuncusu "büyük" yüksek derecede değişken bir sayı olan 4 özelliği kullanmak istiyorum.

LibSVM'de dördüncü özelliği eklediyseniz (verileri otomatik olarak ölçeklendiren easy.py komut dosyasını kullanarak) çok güzel sonuçlar elde ederim (% 96 doğruluk). Scikit-Learn'de dördüncü değişkeni dahil edersem, doğruluk% ~ 78'e düşer - ancak bunu hariç tutarsam, bu özelliği hariç tuttuğumda, aynı sonuçları elde ederim. Bu nedenle, ölçekleme eksik bir sorun olduğundan eminim.

SVM'nin ölçeklendirme işlemini program aracılığıyla nasıl (örneğin svm-scale çağırmadan) çoğaltırım?

cevap

6

Sen sklearn.preprocessing bu özelliğe sahip:

>>> from sklearn import preprocessing 
>>> X = [[ 1., -1., 2.], 
...  [ 2., 0., 0.], 
...  [ 0., 1., -1.]] 
>>> X_scaled = preprocessing.scale(X) 

>>> X_scaled           
array([[ 0. ..., -1.22..., 1.33...], 
     [ 1.22..., 0. ..., -0.26...], 
     [-1.22..., 1.22..., -1.06...]]) 

veriler daha sonra sıfır ortalama ve birim farkına sahip olacaktır.

+0

Bilmekte fayda var, teşekkürler. Test verisini tren verileriyle birlikte standartlaştırmalı ve sonradan dilimlemeli mi yoksa sadece test verilerini kendim mi yapmalıyım? – luke14free

+3

[dokümantasyon] 'da bahsedilmiştir (http://scikit-learn.org/stable/modules/preprocessing.html#standardization-or-mean-removal-and-variance-scaling). Bunu ayrı ayrı yapmalısınız, aksi takdirde eğitim verileri test örneklerinden etkilenecektir. Scaler sınıfı ile eğitim verilerinin ortalama ve standart sapmasını hesaplayabilir ve daha sonra test verilerine aynı dönüşümü uygulayabilirsiniz. – Maehler

+8

Bunun için bir “Scaler” kullanmalısınız, serbest fonksiyon 'scale' değil. Bir "Scaler", bir "Boru Hattı" içine takılabilir, örn. scaling_svm = Boru Hattı ([("ölçekleyici", Ölçekleyici()), ("svm", SVC (C = 1000))]) '. –