线性 SVM 中的错误预测

Wrong prediction in linear SVM

我正在编写一个 R 脚本,当 运行 给出因变量的预测值时。我所有的变量都被明确划分(如图)并分配了一个数字,总共class个是101个。(每个class是歌曲名称)。

所以我有一个训练数据集,其中包含像 {(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)).

我想要的是最接近的答案。 我可以做些什么来实现这些目标?

  1. 获得至少 10 个最接近的结果,而不是 R 中的 1 个。
  2. 线性 svm 模型在这里做得好吗?
  3. 如何像在训练数据集中那样获取值 82,45,如果没有条目则找到最接近的条目。 (有没有不求简单欧式距离的模型)?

是什么让您认为您的分类器会预测一组预测变量的结果与您的原始观察结果相同?我认为对于分类的工作原理可能存在一些基本的误解。

这是一个使用线性回归模型的简单 counter-example。同样的原则也适用于您的 SVM。

  1. 模拟一些数据

    set.seed(2017);
    x <- seq(1:10);
    y <- x + rnorm(10);
    
  2. 我们现在修改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
    
  3. 拟合模型并获得预测。

    fit <- lm(y ~ x, data = df);
    pred <- predict(fit);
    
  4. 让我们看一下预测的响应 y.pred 并将它们与原始数据(xy)进行比较。

    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 的预测响应是 y.pred=0.65,即使您 观察到 y=-10.