gpt4 book ai didi

r - 在插入符号中使用成本敏感 C50

转载 作者:行者123 更新时间:2023-12-04 09:30:40 27 4
gpt4 key购买 nike

我在 caret 包中使用 train 来训练一些 c50 模型。我设法用 C5.0 方法做得很好,但是当我想使用成本敏感的 C50 方法时,我很难理解如何调整成本参数。我想做的是在预测错误的类(class)时引入成本。我尝试在插入符号包网站 ( http://topepo.github.io/caret/index.html ) 中搜索并阅读此处和那里找到的几个手册/教程。我没有找到有关如何处理成本参数的任何信息。所以这就是我自己尝试的:

  • 使用默认设置运行火车,看看我得到了什么。在输出中,train 函数尝试使用从 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, etc} 的值。
    注意:我的数据是这样的,当我之前使用 C50 或其他树时,它采用“Positive class = 0”,所以当我使用 C50 时我不得不反转成本矩阵,所以如果我使用插入符号方法 C5.0Cost,我需要做同样的事情或找到另一种方法来做到这一点......

    我真的很感激这里的任何帮助。
    谢谢!

    最佳答案

    train 有一个成本敏感的型号代码和 C5.0(使用 method = "C5.0Cost")。例如:

    library(caret)

    set.seed(1)
    dat1 <- twoClassSim(1000, intercept = -12)
    dat2 <- twoClassSim(1000, intercept = -12)

    stats <- function (data, lev = NULL, model = NULL) {
    c(postResample(data[, "pred"], data[, "obs"]),
    Sens = sensitivity(data[, "pred"], data[, "obs"]),
    Spec = specificity(data[, "pred"], data[, "obs"]))
    }

    ctrl <- trainControl(method = "repeatedcv", repeats = 5,
    summaryFunction = stats)

    set.seed(2)
    mod1 <- train(Class ~ ., data = dat1,
    method = "C5.0",
    tuneGrid = expand.grid(model = "tree", winnow = FALSE,
    trials = c(1:10, (1:5)*10)),
    trControl = ctrl)

    xyplot(Sens + Spec ~ trials, data = mod1$results,
    type = "l",
    auto.key = list(columns = 2,
    lines = TRUE,
    points = FALSE))

    set.seed(2)
    mod2 <- train(Class ~ ., data = dat1,
    method = "C5.0Cost",
    tuneGrid = expand.grid(model = "tree", winnow = FALSE,
    trials = c(1:10, (1:5)*10),
    cost = 1:10),
    trControl = ctrl)

    xyplot(Sens + Spec ~ trials|format(cost), data = mod2$results,
    type = "l",
    auto.key = list(columns = 2,
    lines = TRUE,
    points = FALSE))

    最大限度

    关于r - 在插入符号中使用成本敏感 C50,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26140218/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com