【问题标题】:Error plotting SVM classification graph绘制 SVM 分类图时出错
【发布时间】:2011-01-20 00:29:42
【问题描述】:

我正在使用 e1071 包中的支持向量机对我的数据进行分类,并希望可视化机器实际上是如何进行分类的。但是,当使用 plot.svm 函数时,我得到一个我无法解决的错误。

脚本:

library("e1071")

data <-read.table("2010223_11042_complete")
names(data) <- c("Class","V1", "V2")

model <- svm(Class~.,data, type = "C-classification", kernel = "linear")
plot(model,data,fill=TRUE, grid=200, svSymbol=4, dataSymbol=1, color.palette=terrain.colors)

输出:

plot(model,data,fill=TRUE, grid=200, svSymbol=4, dataSymbol=1, color.palette=terrain.colors)
Error in rect(0, levels[-length(levels)], 1, levels[-1L], col = col) : 
  cannot mix zero-length and non-zero-length coordinates

追溯:

traceback()
4: rect(0, levels[-length(levels)], 1, levels[-1L], col = col)
3: filled.contour(xr, yr, matrix(as.numeric(preds), nr = length(xr), 
       byrow = TRUE), plot.axes = {
       axis(1)
       axis(2)
       colind <- as.numeric(model.response(model.frame(x, data)))
       dat1 <- data[-x$index, ]
       dat2 <- data[x$index, ]
       coltmp1 <- symbolPalette[colind[-x$index]]
       coltmp2 <- symbolPalette[colind[x$index]]
       points(formula, data = dat1, pch = dataSymbol, col = coltmp1)
       points(formula, data = dat2, pch = svSymbol, col = coltmp2)
   }, levels = 1:(length(levels(preds)) + 1), key.axes = axis(4, 
       1:(length(levels(preds))) + 0.5, labels = levels(preds), 
       las = 3), plot.title = title(main = "SVM classification plot", 
       xlab = names(lis)[2], ylab = names(lis)[1]), ...)
2: plot.svm(model, data, fill = TRUE, grid = 200, svSymbol = 4, 
       dataSymbol = 1, color.palette = terrain.colors)
1: plot(model, data, fill = TRUE, grid = 200, svSymbol = 4, 
       dataSymbol = 1, color.palette = terrain.colors)

我的部分(4488 行长)数据文件:

-1 0 23.532
+1 1 61.1157
+1 1 61.1157
+1 1 61.1157
-1 1 179.03
-1 0 17.0865
-1 0 27.6201
-1 0 17.0865
-1 0 27.6201
-1 1 89.6398
-1 0 42.7418
-1 1 89.6398

由于我刚开始使用 R,我不知道这意味着什么以及我应该如何处理它,也没有在其他地方找到任何有用的东西。

【问题讨论】:

    标签: r svm


    【解决方案1】:

    在不确定到底是什么原因导致问题的情况下,我会尝试使用以下方法将Class 列转换为一个因子(因此不再需要将类型定义为C-classification):

    data$Class <- as.factor(data$Class)
    

    或一步到位:

    model <- svm(as.factor(Class)~.,data, kernel = "linear")
    

    【讨论】:

      猜你喜欢
      • 2013-05-14
      • 2010-11-11
      • 2016-07-20
      • 2016-01-15
      • 2014-02-06
      • 2019-12-21
      • 2013-08-16
      • 2015-01-09
      • 2013-12-08
      相关资源
      最近更新 更多