数据集必须包含 R 中 SVM 中的所有因素

Posted

技术标签:

【中文标题】数据集必须包含 R 中 SVM 中的所有因素【英文标题】:must a dataset contain all factors in SVM in R 【发布时间】:2019-08-23 15:46:43 【问题描述】:

我正在尝试使用 R 中的支持向量机查找新输入向量的类概率。 训练模型显示没有错误。

fit <-svm(device~.,data=dataframetrain,
    kernel="polynomial",probability=TRUE)

但是预测一些输入向量会显示一些错误。

predict(fit,dataframetest,probability=prob)
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
contrasts can be applied only to factors with 2 or more levels

dataframetrain 看起来像:

> str(dataframetrain)
'data.frame':   24577 obs. of  5 variables:
 $ device   : Factor w/ 3 levels "mob","pc","tab": 1 1 1 1 1 1 1 1 1 1 ...
 $ geslacht : Factor w/ 2 levels "M","V": 1 1 1 1 1 1 1 1 1 1 ...
 $ leeftijd : num  77 67 67 66 64 64 63 61 61 58 ...
 $ invultijd: num  12 12 12 12 12 12 12 12 12 12 ...
 $ type     : Factor w/ 8 levels "A","B","C","D",..: 5 5 5 5 5 5 5 5 5 5 ...

dataframetest 看起来像:

> str(dataframetest)
'data.frame':   8 obs. of  4 variables:
 $ geslacht : Factor w/ 1 level "M": 1 1 1 1 1 1 1 1
 $ leeftijd : num  20 60 30 25 36 52 145 25
 $ invultijd: num  6 12 2 5 6 8 69 7
 $ type     : Factor w/ 8 levels "A","B","C","D",..: 1 2 3 4 5 6 7 8

我用“geslacht”的 2 个因子训练了模型,但有时我必须用“geslacht”的 1 个因子来预测数据。 是否有可能使用只有 1 个“geslacht”因子的测试集来预测类概率?

希望有人能帮帮我!!

【问题讨论】:

【参考方案1】:

geslacht 添加另一个级别(但不是数据)。

x <- factor(c("A", "A"), levels = c("A", "B"))
x
[1] A A
Levels: A B

x <- factor(c("A", "A"))
levels(x) <- c("A", "B")
x
[1] A A
Levels: A B

【讨论】:

以上是关于数据集必须包含 R 中 SVM 中的所有因素的主要内容,如果未能解决你的问题,请参考以下文章

R中的一类SVM分类

R使用Iris数据集构建SVM分类器

R中关于SVM分类器的查询

R语言e1071包中的支持向量机:螺旋线型线性不可分数据集RBF核函数支持向量机SVM(验证模型在测试集上的表现可视化模型预测的结果添加超平面区域与原始数据标签进行对比分析)

R语言e1071包中的支持向量机:仿真数据(螺旋线性不可分数据集)简单线性核的支持向量机SVM(模型在测试集上的表现可视化模型预测的结果添加超平面区域与原始数据标签进行对比分析)如何改进核函数

在 R 中使用 SVM 获取概率值时遇到问题