我在火车包中使用火车训练一些c50型号 . 我设法用C5.0方法做得很好但是当我想使用成本敏感的C50方法时,我很难理解如何调整成本参数 . 我想要做的是在预测错误的课程时引入费用 . 我尝试在插入包网站(http://topepo.github.io/caret/index.html)中搜索并阅读此处和那里找到的几本手册/教程 . 我没有找到有关如何处理成本参数的任何信息 . 所以这就是我自己尝试的:
-
使用默认设置运行火车,看看我得到了什么 . 在输出中,列车功能尝试从0到2的成本,并给出成本= 2的最佳模型 .
-
尝试在expand.grid函数中添加成本作为矩阵,就像使用C5.0包一样 . 代码如下(试验被推到1,因为我只想在输出中输入一棵树/一套规则)
c50Grid < - expand.grid(.trials = 1,.model = c(“tree”,“rules”),. winnow = c(“TRUE”,“FALSE”),. cost = matrix(c(0,1) ,2,0),ncol = 2))
然而,当我执行列车功能时,虽然我没有收到任何错误(但我得到50个警告),火车再次尝试从0到2的成本 . 我做错了什么?哪种格式有成本参数?这是什么意思?我如何解释结果?获得成本的那一类是“预测0级错误成本是否超过1级”?此外,我尝试使用一个矩阵,但虽然它不适用于这种格式,我如何添加我想测试的不同成本?
谢谢!任何帮助都会非常受欢迎!
编辑:
所以,试着自己找一个关于C5.0Cost成本参数含义的答案,我去了C5.0Cost.R(https://r-forge.r-project.org/scm/viewvc.php/models/files/C5.0Cost.R?view=markup&root=caret&pathrev=761)并查找了代码 . 这一行:
cmat <-matrix(c(0, param$cost, 1, 0), ncol = 2)
我猜,它将成本参数传递给成本矩阵 . 所以,我想现在我能理解它是如何运作的 . 如果我有class = {0,1}并且我的正类是0,那么这个矩阵表示“预测0级错误成本比1级高两倍”,对吧?我现在的问题是,我怎么能这样做呢?我怎么能设置“预测1级错误成本比0级加倍”,这将是:
cmat <- matrix(c(0, 1, param$cost, 0), ncol=2)
我可以将成本设置为0.5吗?如果想要使用不同的值进行训练,只需使用小于1 {0.5,0.6,0.7等}的值 . 注意:我的数据的方式,当我之前使用C50或其他树时,它采用“正类= 0”,所以当我使用C50时我不得不反转成本矩阵,所以如果我使用插入方法C5.0Cost,我我需要做同样的事情或找到另一种方式来做到这一点......
我真的很感激这里的任何帮助 . 谢谢!
2 回答
train
和C5.0(使用method = "C5.0Cost"
)有一个成本敏感的型号代码 . 例如:马克斯
不幸的是,您目前无法改变插入符号中误报的成本 . 这似乎是一个错误!有关此问题的详细信息,请参阅此post .