【问题标题】:Are train(method="glm",...) and glm(...) expected to give the same answer?train(method="glm",...) 和 glm(...) 是否期望给出相同的答案?
【发布时间】:2018-05-05 08:20:43
【问题描述】:

我正在使用名为 trainSAtestSA 的数据集,其中包括 chd age alcohol obesity tobacco typea ldl 列。

这个命令(注意我在 R 中工作)

set.seed(13234)
modFit<-train(chd~ age+ alcohol+ obesity +tobacco +typea +ldl, method="glm",family="binomial", data=trainSA)
missClass(testSA$chd, predict(modFit,testSA))

返回0.3116883,而这个

set.seed(13234)
modFit<-glm(chd~ age+ alcohol+ obesity +tobacco +typea +ldl, family="binomial", data=trainSA)
missClass(testSA$chd, predict(modFit,testSA))

返回0.2943723

我可以使用相同的种子一个接一个地运行它们(从而保持所有其他参数相同)并获得稍微不同的结果。

这是预期的,还是我需要在其中一个中包含额外的命令?

注意:我选择不在此问题中包含有关我的其余代码的详细信息,因为它们似乎不相关,但如有必要,我可以这样做。

【问题讨论】:

    标签: r glm r-caret training-data


    【解决方案1】:

    您的输出不匹配,因为 predict 函数对于两个不同模型的行为不同。考虑这个简单的可重现示例。

    library(caret)
    set.seed(123)
    df <- data.frame(
        y = as.factor(rbinom(100, 1, 0.5)),
        x1 = rnorm(100),
        x2 = rnorm(100)
    )
    trainSA <- df[1:70,]
    testSA <- df[71:100,]
    
    modFit1<-train(y ~ x1 + x2, method="glm",family="binomial", data=trainSA)
    head(predict(modFit1, testSA))
    [1] 0 1 1 1 0 1
    Levels: 0 1
    
    modFit2<-glm(y ~ x1 + x2, family="binomial", data=trainSA)
    head(predict(modFit2, testSA))
             71          72          73          74          75          76 
    -0.06855758  0.35434220  0.09654412  0.01410099 -0.91703771  0.25432903 
    

    您需要指定更改跨两个模型使用预测函数的方式,以便它们给出相同的结果。这是一种方法。

    as.integer(predict(modFit1,testSA))-1 == as.integer(predict(modFit2, testSA, type = 'response') >= 0.5)
    
     [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
     [18] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
    

    我不能给你一个完整的答案,因为你没有提供任何关于你的数据或missClass函数的细节,也许考虑改变你第二次调用predict的方式。

    predict(modFit,testSA, type = 'response') >= 0.5
    

    上面的代码将为您提供您可能正在寻找的二进制类预测,但这又取决于您的数据以及您的函数实际在做什么。

    【讨论】:

      猜你喜欢
      • 2020-11-14
      • 1970-01-01
      • 2019-09-19
      • 1970-01-01
      • 2011-02-01
      • 2011-09-15
      • 1970-01-01
      • 2013-06-13
      • 1970-01-01
      相关资源
      最近更新 更多