为什么在 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
)
事实证明,这是由于数据集非常不平衡和使用了错误的内核共同造成的。一旦我用一些过采样来平衡数据集,不同成本函数的误差就不同了。当我使用径向内核而不是线性内核时,它看起来更好。
我正在尝试从 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
)
事实证明,这是由于数据集非常不平衡和使用了错误的内核共同造成的。一旦我用一些过采样来平衡数据集,不同成本函数的误差就不同了。当我使用径向内核而不是线性内核时,它看起来更好。