2016-03-31 31 views
0

İşte SVM sınıflandırması için örnek kodum. benim örnekteSVM sınıflandırma hiper düzlemi nasıl çizilir?

train <- read.csv("traindata.csv") 
    test <- read.csv("testdata.csv") 

    svm.fit=svm(as.factor(value)~ ., data=train, kernel="linear", method="class") 

    svm.pred = predict(svm.fit,test,type="class") 

özelliği değeri iki seviye (doğru ya da yanlış) veren bir faktördür. Ben svm sınıflandırıcımın bir grafiğini grafiğe çizdim ve iki gruba gruplandırdım. Bir grup "true" ve yanlış olarak başka bir gruba sahip olanlar. 3D veya 2D SVM çizimini nasıl üretiyoruz? plot(svm.fit, train) ile denedim, ancak benim için çalışmıyor gibi görünüyor. SO üzerinde bulduğum bu yanıt var, ama ben t, x, y, z, w ve cl yanıtta ne olduğuyla net değilim.

Plotting data from an svm fit - hyperplane

i Son sütun bir etkendir benim veri kümesi yaklaşık 50 özelliklere sahiptir. Bunu yapmanın basit bir yolu ya da herhangi biri onun cevabını açıklamama yardımcı olabilir.

cevap

1

Kısa cevap: yapamazsınız. Verileriniz 50 boyutlu. 50 boyut çizemezsin. Yapabileceğiniz tek şey bazı kaba yaklaşımlar, indirgemeler ve projeksiyonlardır, ancak bunların hiçbiri aslında içinde neler olduğunu temsil edemez. 2B/3B karar sınırını çizmek için verilerinizin 2B/3B olması gerekir (2 veya 3 özellik, sağlanan bağlantıda tam olarak ne olduğu - sadece 3 özelliği vardır, böylece hepsini çizebilirler). 50 özellikleri ile istatistiksel analiz, gerçek görsel denetim yok.

Açıkça bazı dilimlere göz atabilirsiniz (3 özellik veya PCA projeksiyonlarının ana bileşenlerini seçin). Altta yatan lineer cebir ile aşina değilseniz, sadece sizin için bunu yapan gmum.r package kullanabilirsiniz. Sadece svm'yi eğitin ve "pca" görselleştirmesini zorlayın: http://r.gmum.net/samples/svm.basic.html.

SVM visualization

fazla örnek için size web sitesi http://r.gmum.net/

Ancak bu sadece gösterileri projetions işaret bunların sınıflandırmasını proje başvurabilirsiniz verir

library(gmum.r) 

# We will perform basic classification on breast cancer dataset 
# using LIBSVM with linear kernel 
data(svm_breast_cancer_dataset) 

# We can pass either formula or explicitly X and Y 
svm <- SVM(X1 ~ ., svm.breastcancer.dataset, core="libsvm", kernel="linear", C=10) 
## optimization finished, #iter = 8980 
pred <- predict(svm, svm.breastcancer.dataset[,-1]) 

plot(svm, mode="pca") 

- Eğer altdüzlem göremiyorum, bunun nedeni son derece boyutlu bir nesnedir (sizin durumunuzda 49 boyutlu) ve bu izdüşümde bu hiper düzlem ... tüm ekran olur. Tam olarak hiçbir piksel kalmaz "dışarıda" kalır (bu terimlerle ilgili olarak düşünün - eğer içinde 3B boşluk ve hiperdüzlem varsa, bu 2D düzlem olacaktır. Şimdi 1D'de çizim yapmaya çalışırsanız tüm çizgi ile sonuçlanacaksınız. hiperdüzleminizle "dolu", çünkü bir çizgiyi 3B'ye nereye yerleştirdiğinizden bağımsız olarak, bu düzlemde 2B düzleminin izdüşümü dolduracaktır! Diğer bir olasılık da çizginin dik ve projeksiyonun tek bir nokta olmasıdır. Aynı şey burada da geçerlidir - eğer 49 boyutlu hiperdüzeyi 3B'ye yansıtmayı denerseniz, tüm ekran "siyah" ile bitecektir.

+0

"svm_breast_cancer_dataset" yerine "train" kullanamıyorum? – Mahsolid

+1

Tam olarak. ** Herhangi bir gerçek hayat veri setinde ** karar sınırını çizemezsiniz **. Bu sadece 3 özelliğe sahip oyuncak veri setleri için mümkündür. Gerçek veriler için - yine de (cevapta açıklandığı gibi) bir şeyi görselleştirebilirsiniz - ancak gerçek hiperdüzlemi – lejlot

+0

veriniz. Verilerinizde svm çağrısının temelleri arasında ilerleyin, sağlanan bağlantıda her şey açıklanmıştır. – lejlot

İlgili konular