我正在编写一个R脚本,在运行时给出因变量的预测值。我的所有变量都被明确划分(如图所示)并分配了一个数字,类的总数是101.(每个类都是歌曲名称)。
所以我有一个训练数据集,其中包含{(2,5,6,1)82,(2,5,6,1)45,(2,5,3,1)34,......等对。 }。我在R studio中使用 linear svm 训练了这个数据集,对于给定(x,y,z,w)的某些值,它给出了正确的答案。但即使训练数据集中存在类似(2,5,6,1)X的记录,为什么它不能预测82或45的值?我很困惑,因为它忽略了这个术语并显示了全新的输出23。
training_set = dataset;
library(e1071)
classifier = svm(formula = Song ~ .,
data = training_set,
type = 'C-classification',
kernel = 'linear')
y_pred = predict(classifier, data.frame(Emotion = 2, Pact = 5, Mact = 6, Session = 1)).
我想要的是我最接近的答案。 我可以做些什么来实现这些目标?
答案 0 :(得分:1)
是什么让您认为您的分类器会预测一组预测因子与原始观察结果相同的结果?我认为可能存在一些关于分类如何运作的基本误解。
这是一个使用线性回归模型的简单反例。同样的原则适用于您的SVM。
模拟一些数据
pip
我们现在修改pip install --user --upgrade pip
的一个值,并显示(set.seed(2017);
x <- seq(1:10);
y <- x + rnorm(10);
,y
)对的数据。
x
安装模型并获得预测。
y
让我们看看预测的回复y[3] = -10;
df <- cbind.data.frame(x = x, y = y);
df;
# x y
#1 1 2.434201
#2 2 1.922708
#3 3 -10.000000
#4 4 2.241395
#5 5 4.930175
#6 6 6.451906
#7 7 5.041634
#8 8 7.998476
#9 9 8.734664
#10 10 11.563223
,并将它们与原始数据(fit <- lm(y ~ x, data = df);
pred <- predict(fit);
,y.pred
)进行比较。
x
请注意,即使您观察 y
,data.frame(df, y.pred = pred)
# x y y.pred
#1 1 2.434201 -2.1343357
#2 2 1.922708 -0.7418526
#3 3 -10.000000 0.6506304
#4 4 2.241395 2.0431135
#5 5 4.930175 3.4355966
#6 6 6.451906 4.8280796
#7 7 5.041634 6.2205627
#8 8 7.998476 7.6130458
#9 9 8.734664 9.0055288
#10 10 11.563223 10.3980119
的预测回复率为x=3
。