Destek Vektör Makinesini Karesel Programlama ile Optimize Etme


12

Doğrusal bir destek vektör makinesi eğitimi sürecini anlamaya çalışıyorum . SMV'lerin özelliklerinin, ikinci dereceden bir programlama çözücüsü kullanmaktan çok daha hızlı bir şekilde optimize edilmelerine izin verdiğini anlıyorum, ancak öğrenme amaçları için bunun nasıl çalıştığını görmek istiyorum.

Eğitim verileri

set.seed(2015)
df <- data.frame(X1=c(rnorm(5), rnorm(5)+5), X2=c(rnorm(5), rnorm(5)+3), Y=c(rep(1,5), rep(-1, 5)))
df
           X1       X2  Y
1  -1.5454484  0.50127  1
2  -0.5283932 -0.80316  1
3  -1.0867588  0.63644  1
4  -0.0001115  1.14290  1
5   0.3889538  0.06119  1
6   5.5326313  3.68034 -1
7   3.1624283  2.71982 -1
8   5.6505985  3.18633 -1
9   4.3757546  1.78240 -1
10  5.8915550  1.66511 -1

library(ggplot2)
ggplot(df, aes(x=X1, y=X2, color=as.factor(Y)))+geom_point()

resim açıklamasını buraya girin

Maksimum Kenar Boşluğu Hiper Düzlemini Bulma

Göre SVM'ler bu Wikipedia makalesinde , ben çözmek için gereken maksimum marjı altdüzlem bulmak için

argmin(w,b)12w2
(herhangi bir i = 1, ..., n için)
yi(wxib)1.

Mathbf değerini belirlemek için örnek verilerimi R'deki bir QP çözücüye nasıl bağlarım (örneğin quadprog ) ?w


Çift problemi çözmek zorundasınız

2
@fcop biraz daha detaylandırabilir misin? Bu durumda ikili nedir? Kullanarak nasıl çözebilirim R? vb.
Ben

Yanıtlar:


6

İPUCU :

Quadprog aşağıdakileri çözer:

minxdTx+1/2xTDxsuch that ATxx0

Düşünün

x=(wb)and D=(I000)

burada birim matristir.I

Eğer olan ve bir :wp×1yn×1

x:(2p+1)×1D:(2p+1)×(2p+1)

Benzer satırlarda:

x0=(11)n×1

Eşitsizlik sınırınızı temsil etmek için yukarıdaki ipuçlarını kullanarak formüle edin.A


1
Kayboldum. ne ? dT
Ben

1
Hedef fonksiyonunuzda katsayısı nedir ? Değil ama ? w||w||22w
haklar

1
Yardımı takdir et. Ben düşündüm ben bu out düşündüm ama D ayarladığınızda = matris önerdiğiniz quadproghata döndürür "kuadratik fonksiyonunda matris D pozitif tanımlı değil!"
Ben

3
HACK: Diyagonal üzerine diyelim küçük bir değer ekleyerek PerturbD1e6
rightskewed

7

Rightskewed'in ipuçlarını takip ederek ...

library(quadprog)

# min(−dvec^T b + 1/2 b^T Dmat b) with the constraints Amat^T b >= bvec)
Dmat       <- matrix(rep(0, 3*3), nrow=3, ncol=3)
diag(Dmat) <- 1
Dmat[nrow(Dmat), ncol(Dmat)] <- .0000001
dvec       <- rep(0, 3)
Amat       <- as.matrix(df[, c("X1", "X2")])
Amat <- cbind(Amat, b=rep(-1, 10))
Amat <- Amat * df$Y
bvec       <- rep(1, 10)
solve.QP(Dmat,dvec,t(Amat),bvec=bvec)

plotMargin <- function(w = 1*c(-1, 1), b = 1){
  x1 = seq(-20, 20, by = .01)
  x2 = (-w[1]*x1 + b)/w[2]
  l1 = (-w[1]*x1 + b + 1)/w[2]
  l2 = (-w[1]*x1 + b - 1)/w[2]
  dt <- data.table(X1=x1, X2=x2, L1=l1, L2=l2)
  ggplot(dt)+geom_line(aes(x=X1, y=X2))+geom_line(aes(x=X1, y=L1), color="blue")+geom_line(aes(x=X1, y=L2), color="green")+
    geom_hline(yintercept=0, color="red")+geom_vline(xintercept=0, color="red")+xlim(-5, 5)+ylim(-5, 5)+
    labs(title=paste0("w=(", w[1], ",", w[2], "), b=", b))
}

plotMargin(w=c(-0.5065, -0.2525), b=-1.2886)+geom_point(data=df, aes(x=X1, y=X2, color=as.factor(Y)))

resim açıklamasını buraya girin

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.