R gbm包:训练错误和Adaboost指数损失函数

时间:2013-03-12 22:43:34

标签: r machine-learning adaboost

我在R中使用gbm包进行二进制分类。我正在使用adaboost指数损失函数的算法。我有两个问题:

  1. 如果我想看到训练错误,我应该看一下吗? (假设我的模型对象称为fit,我使用了3倍CV。)

    best.iter <- gbm.perf(fit,method="cv")

    fit$train.error[best.iter]

  2. 如果我想对我的训练数据集进行预测,请通过以下代码行说明“train”,删除响应变量:pred <- predict(object=fit,newdata=train,n.trees=best.iter)。它只给了我adaboost的指数损失值。我怎么能把它转换回二进制类的概率?我尝试了plogislog。结果没有意义。例如,plogis给了我0.99 ***的所有内容,log给了我间隔[0.52,0.56]。我应该做什么样的转型?

  3. 仅供参考,我种了100棵树,装修过程似乎没问题。例如,

    > fit$oobag.improve
    [1] 0.1431295103 0.1093538334 0.0852480128 0.0678520088 0.0549712390 0.0452351232 0.0378058484 0.0319409903
    [9] 0.0275396129 0.0237185758 0.0208696658 0.0182786535 0.0163750200 0.0146381260 0.0132728128 0.0119435448
    [17] 0.0108959138 0.0099211566 0.0091093166 0.0084316036 0.0078037047 0.0071945142 0.0066821670 0.0061718044
    [25] 0.0058103999 0.0054534710 0.0051276913 0.0047975274 0.0044901763 0.0042387273 0.0039702177 0.0037345627
    [33] 0.0035337545 0.0033370776 0.0031656407 0.0029688111 0.0028016085 0.0026640768 0.0025268873 0.0023897908
    [41] 0.0022594735 0.0021612521 0.0020255227 0.0019376223 0.0018393318 0.0017481065 0.0016463413 0.0015561673
    [49] 0.0014813435 0.0014237926 0.0013459092 0.0012719409 0.0012116881 0.0011572038 0.0010948941 0.0010420570
    [57] 0.0009843288 0.0009398356 0.0008938670 0.0008542828 0.0008063698 0.0007637763 0.0007325414 0.0006917561
    [65] 0.0006582027 0.0006313925 0.0005979843 0.0005645791 0.0005410957 0.0005159002 0.0004869797 0.0004643209
    [73] 0.0004464032 0.0004213901 0.0004010297 0.0003815199 0.0003623747 0.0003445184 0.0003269569 0.0003105762
    [81] 0.0002960856 0.0002802715 0.0002679399 0.0002541207 0.0002425242 0.0002294759 0.0002200414 0.0002093278
    [89] 0.0001974315 0.0001893624 0.0001788743 0.0001709422 0.0001624860 0.0001538988 0.0001479532 0.0001403145
    [97] 0.0001338089 0.0001256208 0.0001206701 0.0001142448
    

    谢谢!

1 个答案:

答案 0 :(得分:0)

1.第一个问题:你是对的,通过fit $ train.error你可以检查训练错误。 fit $ train.error [best.iter]是检查所选最佳模型的训练误差。小心,适合$ train.error [best.iter]不是最小的训练错误,因为最好的模型是由cv.test.error选择的。

2.Adoboost是一种特殊情况,当ensamble模型选择指数损失函数时。要将其转换回其他类型的损失函数,首先需要知道如何计算adaboos错误。

对于y {-1,1}分类问题: 指数损失L=exp(-y*f(x))

其中f(x)是由训练有素的adaboost模型生成的结果。 类决定应该由f(x)的符号作出,如果f(x)> 0,则预测y = 1,否则y = -1。 然后你可以看到所有指数损失&lt; 1已被正确分类,损失<1被错误分类。现在很容易转换为二进制错误分类率。

请注意,如果您看到所有列车数据的丢失函数&lt; 1,请不要担心,这是因为adaboost优化了保证金而不是降低错误分类率。

希望这可以帮到你!