为什么在 R 中训练 SVM 时得到相同的错误值?

Why do I get the same error values when training SVMs in R?

我正在尝试从 Framingham Heart study 对数据集建模。此数据具有一些分类变量并具有以下结构(TenYearCHD 是因变量):

'data.frame':   2928 obs. of  16 variables:
 $ male           : int  1 1 0 0 0 0 1 1 0 0 ...
 $ age            : int  39 48 61 46 43 63 52 43 50 43 ...
 $ education      : int  4 1 3 3 2 1 1 1 1 2 ...
 $ currentSmoker  : int  0 1 1 1 0 0 0 1 0 0 ...
 $ cigsPerDay     : int  0 20 30 23 0 0 0 30 0 0 ...
 $ BPMeds         : int  0 0 0 0 0 0 0 0 0 0 ...
 $ prevalentStroke: int  0 0 0 0 0 0 0 0 0 0 ...
 $ prevalentHyp   : int  0 0 1 0 1 0 1 1 0 0 ...
 $ diabetes       : int  0 0 0 0 0 0 0 0 0 0 ...
 $ totChol        : int  195 245 225 285 228 205 260 225 254 247 ...
 $ sysBP          : num  106 128 150 130 180 ...
 $ diaBP          : num  70 80 95 84 110 71 89 107 76 88 ...
 $ BMI            : num  27 25.3 28.6 23.1 30.3 ...
 $ heartRate      : int  80 75 65 85 77 60 76 93 75 72 ...
 $ glucose        : int  77 70 103 85 99 85 79 88 76 61 ...
 $ TenYearCHD     : int  0 0 1 0 0 1 0 0 0 0 ...

当我使用 tune.svm() 训练 SVM 时,无论成本值如何,所有模型都给出相同的错误(错误分类)率。

我已经尝试手动缩放数据并让 scale = TRUE 进入 tune.svm()。我还尝试过对分类变量进行单热编码。我遇到并尝试过的任何事情都没有任何改变。有什么明显的我在这里遗漏的吗?

我的模型调优代码:

library(e1071)

dat.train = as.data.frame(scale(dat))

svm1.tune = tune.svm(
  as.factor(TenYearCHD) ~ .,
  data = dat.train,
  type = "C-classification",
  kernel = "linear",
  scale = FALSE,
  cost = seq(from = 0.1, to = 5, by = 0.5),
  cross = 10
)

事实证明,这是由于数据集非常不平衡和使用了错误的内核共同造成的。一旦我用一些过采样来平衡数据集,不同成本函数的误差就不同了。当我使用径向内核而不是线性内核时,它看起来更好。