svm
(oylama ardından çiftleri arasında, yani ikili sınıflandırma) çok sınıflı sınıflandırma için "tek karşı-bir" stratejisi kullanır. Bu hiyerarşik kurulumun üstesinden gelmek için muhtemelen bir grup ikili sınıflandırıcıyı, grup 1 ve hepsine benzer şekilde, daha sonra grup 2'yi vs. kaldıracak şekilde yapmanız gerekir. Ek olarak, temel svm
işlevi, hiperparametrelerin ayarını yapmaz. Bu nedenle , e1071
veya train
gibi mükemmel bir sarıcıyı mükemmel caret
paketinde kullanmak isteyeceksiniz. Her neyse, R'deki yeni bireyleri sınıflandırmak için, sayıları manuel olarak bir denkleme sokmak zorunda kalmazsınız. Aksine, SVM gibi farklı modellere yönelik yöntemleri olan predict
genel işlevini kullanırsınız. Bunun gibi model nesneler için genellikle plot
ve summary
genel işlevlerini de kullanabilirsiniz.
require(e1071)
# Subset the iris dataset to only 2 labels and 2 features
iris.part = subset(iris, Species != 'setosa')
iris.part$Species = factor(iris.part$Species)
iris.part = iris.part[, c(1,2,5)]
# Fit svm model
fit = svm(Species ~ ., data=iris.part, type='C-classification', kernel='linear')
# Make a plot of the model
dev.new(width=5, height=5)
plot(fit, iris.part)
# Tabulate actual labels vs. fitted labels
pred = predict(fit, iris.part)
table(Actual=iris.part$Species, Fitted=pred)
# Obtain feature weights
w = t(fit$coefs) %*% fit$SV
# Calculate decision values manually
iris.scaled = scale(iris.part[,-3], fit$x.scale[[1]], fit$x.scale[[2]])
t(w %*% t(as.matrix(iris.scaled))) - fit$rho
# Should equal...
fit$decision.values
öngörüleri genel gerçek sınıf etiketleri tablolaştırıyoruz: svm
modeli nesneden
> table(Actual=iris.part$Species, Fitted=pred)
Fitted
Actual versicolor virginica
versicolor 38 12
virginica 15 35
Özü özelliği ağırlıkları (burada doğrusal bir SVM ile temel fikri bir örneğidir özellik seçimi, vb.). Burada, Sepal.Length
açıkçası daha kullanışlı. Karar değerleri nereden geldiğini
> t(fit$coefs) %*% fit$SV
Sepal.Length Sepal.Width
[1,] -1.060146 -0.2664518
biz özellik ağırlıkları ve ön işlenen özellik vektörlerin nokta ürünü olarak onları el hesaplayabilir, anlamak için, eksi yolunu kesmek
rho
ofset. (Önişlenmiş muhtemelen/merkezli ölçekli ve/veya vb RBF DVM kullanarak eğer çekirdek dönüştürülmüş demektir)
> t(w %*% t(as.matrix(iris.scaled))) - fit$rho
[,1]
51 -1.3997066
52 -0.4402254
53 -1.1596819
54 1.7199970
55 -0.2796942
56 0.9996141
...
Bu dahili olarak hesaplanan ne eşit olmalıdır: sizin için
> head(fit$decision.values)
versicolor/virginica
51 -1.3997066
52 -0.4402254
53 -1.1596819
54 1.7199970
55 -0.2796942
56 0.9996141
...
sayesinde, John cevap. Çünkü bu denklemleri bilmek istediğim, olaylarımı sınıflandırırken toplamdan hangi parametrelerin daha fazla önem taşıdığını değerlendirmektir. –
@ ManuelRamón Ahh gotcha. Bunlar doğrusal bir SVM için "ağırlıklar" olarak adlandırılır. Bir svm model nesnesinden nasıl hesaplanacağını öğrenmek için yukarıdaki düzenlemeye bakın. İyi şanslar! –
Örneğiniz yalnızca iki kategoriye (versicolor ve virginica) sahiptir ve iris verilerini sınıflandırmak için kullanılan her değişken için bir tane olmak üzere iki katsayıya sahip bir vektörünüz vardır. N kategorilerim varsa, N-1 vektörlerini 'ile (fit, t (coefs)% *% SV)' dan alırım. Her bir vektörün anlamı nedir? –