svm_gradient<- function(x,eta=0.001,R=10000){
X<- cbind(1,x)#make design matrix
X
n <- nrow(X) #number of sample
p <- ncol(X) #number of feature+1 (bias)
w_intial <- rnorm(p,0,1)
W <- matrix(w_intial ,nrow = R+1,ncol = p,byrow = T) #matrix put intial guess and the procedure to do gradient descent
for(i in 1:R){
for(j in 1:p)
{
W[i+1,j]<- W[i,j]+eta*sum(((y*(X%*%W[i,]))<1)*1 * y * X[,j] )
}
}
return(W)
}
getsvm <- function(x){
w_answer<- svm_gradient(x)[nrow(svm_gradient(x)),]
return(w_answer )
}
### sample
set.seed(2)
n = 5
a1 = rnorm(n)
a2 = 1 - a1 + 2* runif(n)
b1 = rnorm(n)
b2 = -1 - b1 - 2*runif(n)
x = rbind(matrix(cbind(a1,a2),,2),matrix(cbind(b1,b2),,2))
y <- matrix(c(rep(1,n),rep(-1,n)))
plot(x,col=ifelse(y>0,4,2),pch=".",cex=7,xlab = "x1",ylab = "x2")
w_answer<- getsvm(x)
abline(-w_answer[1]/w_answer[3],-w_answer[2]/w_answer[3])
abline(1-w_answer[1]/w_answer[3],-w_answer[2]/w_answer[3],lty=2)
abline(-1-w_answer[1]/w_answer[3],-w_answer[2]/w_answer[3],lty=2)
c3ZtX2dyYWRpZW50PC0gZnVuY3Rpb24oeCxldGE9MC4wMDEsUj0xMDAwMCl7CiAKWDwtIGNiaW5kKDEseCkjbWFrZSBkZXNpZ24gbWF0cml4ClgKbiA8LSBucm93KFgpICAjbnVtYmVyIG9mIHNhbXBsZQpwIDwtIG5jb2woWCkgI251bWJlciBvZiBmZWF0dXJlKzEgKGJpYXMpCndfaW50aWFsIDwtIHJub3JtKHAsMCwxKQpXIDwtIG1hdHJpeCh3X2ludGlhbCAsbnJvdyA9IFIrMSxuY29sID0gcCxieXJvdyA9IFQpICNtYXRyaXggcHV0IGludGlhbCBndWVzcyBhbmQgdGhlIHByb2NlZHVyZSB0byBkbyBncmFkaWVudCBkZXNjZW50CiAKZm9yKGkgaW4gMTpSKXsKICBmb3IoaiBpbiAxOnApCiAgewogICAgV1tpKzEsal08LSBXW2ksal0rZXRhKnN1bSgoKHkqKFglKiVXW2ksXSkpPDEpKjEgKiB5ICogWFssal0gKSAgCiAgfQogIH0KIApyZXR1cm4oVykgIAp9CiAKZ2V0c3ZtIDwtIGZ1bmN0aW9uKHgpewogCndfYW5zd2VyPC0gc3ZtX2dyYWRpZW50KHgpW25yb3coc3ZtX2dyYWRpZW50KHgpKSxdCnJldHVybih3X2Fuc3dlciApCiAKfQogCiAKIyMjIHNhbXBsZQogCnNldC5zZWVkKDIpCm4gPSA1CmExID0gcm5vcm0obikKYTIgPSAxIC0gYTEgKyAyKiBydW5pZihuKQpiMSA9IHJub3JtKG4pCmIyID0gLTEgLSBiMSAtIDIqcnVuaWYobikKeCA9IHJiaW5kKG1hdHJpeChjYmluZChhMSxhMiksLDIpLG1hdHJpeChjYmluZChiMSxiMiksLDIpKQp5IDwtIG1hdHJpeChjKHJlcCgxLG4pLHJlcCgtMSxuKSkpCnBsb3QoeCxjb2w9aWZlbHNlKHk+MCw0LDIpLHBjaD0iLiIsY2V4PTcseGxhYiA9ICJ4MSIseWxhYiA9ICJ4MiIpCndfYW5zd2VyPC0gZ2V0c3ZtKHgpCmFibGluZSgtd19hbnN3ZXJbMV0vd19hbnN3ZXJbM10sLXdfYW5zd2VyWzJdL3dfYW5zd2VyWzNdKQphYmxpbmUoMS13X2Fuc3dlclsxXS93X2Fuc3dlclszXSwtd19hbnN3ZXJbMl0vd19hbnN3ZXJbM10sbHR5PTIpCmFibGluZSgtMS13X2Fuc3dlclsxXS93X2Fuc3dlclszXSwtd19hbnN3ZXJbMl0vd19hbnN3ZXJbM10sbHR5PTIp