이차 프로그래밍으로 서포트 벡터 머신 최적화


12

선형 지원 벡터 머신 을 훈련시키는 프로세스를 이해하려고 합니다 . SMV의 속성을 통해 2 차 프로그래밍 솔버를 사용하는 것보다 훨씬 빠르게 최적화 할 수 있지만 학습을 위해 이것이 어떻게 작동하는지 알고 싶습니다.

훈련 데이터

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()

여기에 이미지 설명을 입력하십시오

최대 마진 초평면 찾기

SVM 에 대한 이 Wikipedia 기사에 따르면 해결해야 할 최대 마진 초평면을 찾으려면

argmin(w,b)12w2
(i = 1, ..., n에 해당)
yi(wxib)1.

를 결정하기 위해 샘플 데이터를 R의 QP 솔버 (예 : quadprog )에 '플러그'하는 방법은 무엇입니까?w


당신은 이중 문제를 해결해야

2
@fcop 당신은 정교한 수 있습니까? 이 경우 이중은 무엇입니까? 를 사용하여 어떻게 해결 R합니까? 등

답변:


6

힌트 :

Quadprog는 다음을 해결합니다.

minxdTx+1/2xTDxsuch that ATxx0

고려

x=(wb)and D=(I000)

여기서 항등 행렬입니다.I

경우에 인 및 이고 :wp×1yn×1

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

비슷한 줄에서 :

x0=(11)n×1

불평등 제약 조건을 나타 내기 위해 위의 힌트를 사용하여 를 공식화 하십시오.A


1
나는 길을 잃었다. 는 무엇 입니까? dT
Ben

1
목적 함수에서 의 계수는 얼마입니까? 하지 하지만 ? w||w||22w
권리

1
도움을 주셔서 감사합니다. 나는 생각 나는이 아웃 생각하지만 D를 설정할 때 = 매트릭스는 제안 quadprog오류 반환 "이차 함수의 행렬 D 명확한 긍정적 아니다!"
Ben

3
HACK : 교란 작은 값 발언권을 추가하여 대각선은D1e6
rightskewed

7

권리에 대한 힌트를 따르십시오 ...

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)))

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.