R中关于SVM分类器的查询

Posted

技术标签:

【中文标题】R中关于SVM分类器的查询【英文标题】:Query about SVM classifier in R 【发布时间】:2016-03-16 16:12:21 【问题描述】:

我正在处理一个音乐数据集,我必须将音乐数据分类为流派。我有测试和训练数据集。 我已链接数据集供您检查 here. 我在 Rstudio 工作

这是我编写的代码。我是初学者,不知道我在做什么。我随机射箭。如果您需要更多信息,请告诉我。

使用的库是:-

library("e1071")

代码:-

svm.model <- svm(GENRE ~ ., data = musictraindata, cost = 62.5, gamma = 0.5)

现在我的问题是在 x 参数中放什么。我已经从火车数据集中输入了“GENRE”,但它给了我以下错误。

svm.default(x, y, scale = scale, ..., na.action = na.action) 中的错误: 需要用于回归的数值因变量。

请有人指导我应该做什么。谢谢。

更正后:- 我用上述更正运行了代码。我得到了一个 svm.model 如下:-

svm.model

Call:
svm(formula = factor(GENRE) ~ ., data = musictraindata, cost = 62.5, gamma = 0.5, type = "C-classification", 
    tolerance = 0.01)

Parameters:
   SVM-Type:  C-classification 
 SVM-Kernel:  radial 
       cost:  62.5 
      gamma:  0.5 
Number of Support Vectors:  11880

现在我尝试通过将其与测试数据一起使用来创建预测模型。

svm.pred <- predict(svm.model,musictestdata)

当我绘制svm.pred 时,我得到如下图,这是极不可能的。这里是:

这是我应该如何进行的对吗?难道我做错了什么 ? 告诉我。

【问题讨论】:

【参考方案1】:

很难说没有可重复的示例,但我会确认您的因变量(类型)的类是一个因素,并且没有像 NA 那样愚蠢的事情发生。使用class(musictraindata$GENRE) 进行检查。另外值得注意的是,R 对大小写敏感,因此“流派”和“流派”会有所不同。

您还可以尝试指定要运行的 SVM 类型,方法是使用 (type = "C-classification") 看看它是否会引发更有用的错误?

【讨论】:

class(musictraindata$GENRE) 给我“ [1] "character" " 作为输出。通过使用 (type = "C-classification") 运行代码,Rstudio 需要花费大量时间来处理。如果我得到一些输出,我会更新帖子。同时让我知道我是否可以做其他事情或者您需要更多信息。再次感谢。 svm.model &lt;- svm(factor(GENRE) ~ ., data = musictraindata, cost = 62.5, gamma = 0.5) 应该可以工作,或者您可以使用 musictraindata$GENRE &lt;- factor(musictraindata$GENRE) 并运行您的原始 svm 代码。您需要将流派作为一个因素,而不是一个角色。 尝试summary(factor(musictraindata$GENRE)) 以确保其中包含正确的流派。 SO 新手,但如果有聊天/方式让我查看您的数据,我不介意提供帮助。 我做到了。当我重新运行代码时,它可以正常工作。万分感谢 ! PS:我可能已经发送了 LinkedIN 连接请求以进一步讨论此事,但我想它已经解决了。如果我在进一步深入研究数据集时被赶上,会告诉你。 :D

以上是关于R中关于SVM分类器的查询的主要内容,如果未能解决你的问题,请参考以下文章

R中支持向量机和朴素贝叶斯分类器的可变重要性

以 SVM 作为弱学习器的 Opencv 级联分类器

将 SVM 分类器应用于看不见的新数据时,我遇到了错误消息。 (R 用户)

sklearn 绘制来自 SVM 分类器的结果

如何获得 scikit-learn SVM 分类器的所有 alpha 值?

用于 SVM-HMM 或其他基于顺序的分类器的 JAVA 库