jes*_*lim 4 r data-visualization machine-learning svm
如何为三维数据集(带有x,y,z坐标)绘制SVM?
我可以通过使用来绘制3D数据scatterplot3d(data),但是在使用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.
Run Code Online (Sandbox Code Playgroud)
然后我做了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))
Run Code Online (Sandbox Code Playgroud)
然后我有一个数据测试:
dataTest[1,1], dataTest[1,2], dataTest[1,3]
predLabels = predict(svp,dataTest)
Run Code Online (Sandbox Code Playgroud)
编者注:最后一点看起来有点奇怪,只有3个数据点.
Joh*_*lby 13
为了获得内核变换SVM的决策边界,我通常只预测新数据的网格,然后将轮廓(或3D中的等值面)拟合到该decision value = 0级别.在3D中,您可以使用优秀rgl的绘图包,如Ben建议的,以及包中的contour3d()功能misc3d.这是一个例子:
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)
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
6346 次 |
| 最近记录: |