gpt4 book ai didi

r - 在 3 维中绘制 SVM

转载 作者:行者123 更新时间:2023-11-30 08:29:51 25 4
gpt4 key购买 nike

如何为 3D 数据集(带有 x、y、z 坐标)绘制 SVM?

我可以使用 scatterplot3d(data) 绘制 3D 数据,但是使用 svm 结果时它是如何工作的?

编辑:从评论复制到答案。这应该是OP的编辑:

3组数据

data[1:10,1], data[1:10,2] and data[1:10,3] represent genuine data.
data[11:15,1], data[11:15,2] and data[11:15,3] represent userA data.
data[16:20,1], data[16:20,2] and data[16:20,3] represent userB data.

然后我使用以下方法执行 SVM:

 labels <- matrix( c(rep(1,10), rep(-1, 10)) )
svp <- ksvm(data,labels, type="C-svc" , kernel='rbfdot', C=0.4,
kpar=list(sigma=0.2))

然后我进行了数据测试:

 dataTest[1,1], dataTest[1,2], dataTest[1,3] 
predLabels = predict(svp,dataTest)

编者注:最后一点看起来有点奇怪,只有 3 个数据点。

最佳答案

为了获得核转换 SVM 的决策边界,我通常只预测新数据的网格,然后将轮廓(或 3D 中的等值面)拟合到决策值 = 0等级。在 3D 中,您可以使用优秀的 rgl 包进行绘图,就像 Ben 建议的那样,以及来自 misc3d 包的 contour3d() 函数。这是一个例子:

library(e1071)
library(rgl)
library(misc3d)

n = 100
nnew = 50

# Simulate some data
set.seed(12345)
group = sample(2, n, replace=T)
dat = data.frame(group=factor(group), matrix(rnorm(n*3, rep(group, each=3)), ncol=3, byrow=T))

# Fit SVM
fit = svm(group ~ ., data=dat)

# Plot original data
plot3d(dat[,-1], col=dat$group)

# Get decision values for a new data grid
newdat.list = lapply(dat[,-1], function(x) seq(min(x), max(x), len=nnew))
newdat = expand.grid(newdat.list)
newdat.pred = predict(fit, newdata=newdat, decision.values=T)
newdat.dv = attr(newdat.pred, 'decision.values')
newdat.dv = array(newdat.dv, dim=rep(nnew, 3))

# Fit/plot an isosurface to the decision boundary
contour3d(newdat.dv, level=0, x=newdat.list$X1, y=newdat.list$X2, z=newdat.list$X3, add=T)

enter image description here enter image description here

关于r - 在 3 维中绘制 SVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10266195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com