【问题标题】:R: Tuning SVM parameter - class.weights in {e1071} packageR:调整 SVM 参数 - {e1071} 包中的 class.weights
【发布时间】:2015-06-20 16:46:45
【问题描述】:

我想用包 {e1071} 训练一个支持向量机分类器。我意识到 class.weight 是我想要调整的参数之一。例如。我想测试两个类权重 c(25, 50) 与 c(20, 55) 我想知道内置的 tune 函数是否可以完成这项工作,如果可以,如何?

这是我的训练数据:

training.data  = 

  height0 height1 height2 weight0 weight1 gender class
1     0      1       0       1       0      1       1
2     0      1       0       0       1      0       1
3     0      1       0       0       0      1       1
4     1      0       0       1       0      0       1
5     0      1       0       0       1      0       2
6     0      1       0       0       1      0       2

并且响应变量'class'中有2个级别

training.data$class = 

[1] 1 1 1 1 2 2
Levels: 1 2

我想用这样的功能,

param.obj <- tune(svm, class ~., data = training.data, 
    ranges = list("1" = c(25, 20), "2" = c(50,55) ),
    tunecontrol = tune.control(sampling = "cross", cross = 5) )

但我认为这不是正确的做法,因为如果我将“2”更改为“3”,它仍然有效。

param.obj <- tune(svm, class ~., data = training.data, 
    ranges = list("1" = c(25, 20), "3" = c(50,55) ),
    tunecontrol = tune.control(sampling = "cross", cross = 5) )

不会给我一个错误。我在 Google 上四处搜索,但似乎找不到正确的方法...感谢任何帮助!

【问题讨论】:

    标签: r machine-learning classification svm training-data


    【解决方案1】:

    ranges 列表是一个命名的参数列表,您要调整的参数是class.weights。我相信你在曲调中的范围线会是这样的:

    ranges=list (class.weights=list(c("1"=25, "2"=20), c("1"=50, "2"=55))
    

    【讨论】:

    • 没错。谢谢! (更像ranges=list (class.weights=list(c("1"=25, "2"=50), c("1"=20, "2"=55)),但它绝对是我要找的东西!)
    猜你喜欢
    • 2013-01-12
    • 2011-11-15
    • 2016-08-13
    • 2012-06-16
    • 2016-06-21
    • 2014-08-03
    • 2014-11-28
    • 2019-01-21
    • 2017-09-28
    相关资源
    最近更新 更多