【问题标题】:Plot margins for support vector machine支持向量机的绘图边距
【发布时间】:2014-03-16 16:07:45
【问题描述】:

我刚刚使用 e1071 在 R 中设置了一个 SVM。 不幸的是,margin 和 die 超平面的图看起来并不理想。我希望边距通过支持向量。不应该是这样吗? 有人能看出我的错误吗?

这是我的代码:

rm(list=ls(all=TRUE))

x1s <- c(.5,1,1,2,3,3.5,     1,3.5,4,5,5.5,6)
x2s <- c(3.5,1,2.5,2,1,1.2,  5.8,3,4,5,4,1)
ys <- c(rep(+1,6),          rep(-1,6))
my.data <- data.frame(x1=x1s, x2=x2s, type=as.factor(ys))
my.data

library('e1071')
svm.model <- svm(type ~ ., data=my.data, type='C-classification', kernel='linear',scale=FALSE)

plot(my.data[,-3],col=(ys+3)/2, pch=19, xlim=c(-1,6), ylim=c(-1,6))
points(my.data[svm.model$index,c(1,2)],col="blue",cex=2) 

w <- t(svm.model$coefs) %*% svm.model$SV
b <- -svm.model$rho
p <- svm.model$SV

abline(a=-b/w[1,2], b=-w[1,1]/w[1,2], col="black", lty=1)
abline(a=--b/p[1,2], b=-w[1,1]/w[1,2], col="orange", lty=3)
abline(a=--b/p[3,2], b=-w[1,1]/w[1,2], col="orange", lty=3)

【问题讨论】:

    标签: r plot svm


    【解决方案1】:

    你的最后两条命令应该是

    abline(a=(-b-1)/w[1,2], b=-w[1,1]/w[1,2], col="orange", lty=3)
    abline(a=(-b+1)/w[1,2], b=-w[1,1]/w[1,2], col="orange", lty=3)
    

    另一种方式

    plot(my.data[,-3],col=(ys+3)/2, pch=19, xlim=c(-1,6), ylim=c(-1,6))
    points(my.data[svm.model$index,c(1,2)],col="blue",cex=2) 
    
    x1min = min(x1s); x1max = max(x1s);
    x2min = min(x2s); x2max = max(x2s);
    
    coef1 = sum(svm.model$coefs*x1s[svm.model$index]);
    coef2 = sum(svm.model$coefs*x2s[svm.model$index]);
    lines(c(x1min,x1max),  (svm.model$rho-coef1*c(x1min, x1max))/coef2)
    lines(c(x1min,x1max),  (svm.model$rho+1-coef1*c(x1min, x1max))/coef2, lty=2)
    lines(c(x1min,x1max),  (svm.model$rho-1-coef1*c(x1min, x1max))/coef2, lty=2)
    
    猜你喜欢
    • 2020-08-12
    • 2018-10-26
    • 2018-07-26
    • 2012-01-31
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    相关资源
    最近更新 更多