2013-03-12 42 views
0

我在R中使用gbm包二進制分類。我正在爲算法使用adaboost指數損失函數。我有兩個問題:R gbm包:訓練錯誤和Adaboost指數丟失函數

  1. 如果我想看到訓練錯誤,我應該看看這個嗎? (假設我的模型對象是所謂的吻合,我用了3倍CV)

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

    fit$train.error[best.iter]

  2. 如果我想要做我的訓練數據集的預測,說「火車」,與通過下面這行代碼刪除響應變量:pred <- predict(object=fit,newdata=train,n.trees=best.iter)。它只給我adaboost的指數損失值。我怎麼能把它轉換回二進制類的概率?我試過plogislog。結果沒有意義。例如,plogis給我0.99 ***的一切,log給了我的區間[0.52,0.56]。我應該做什麼樣的轉變?

僅供參考,我種了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 

謝謝!

回答

0

1.第一個問題:你是正確的,通過適合$ train.error你可以檢查訓練錯誤。 fit $ train.error [best.iter]是檢查所選最佳模型的訓練錯誤。小心,適合$ train.error [best.iter]不是最小的訓練錯誤,因爲最佳模型是由cv.test.error選擇的。

2.Adaboost是ensamble模型選擇指數損失函數時的特例。爲了將其轉換回其他類型的損失函數,您首先需要知道如何計算adaboos錯誤。

用於Y {-1,1}分類問題: 指數損耗L=exp(-y*f(x))

其中f(x)是由訓練有素的AdaBoost模型產生的結果。 如果f(x)> 0,則預測y = 1,否則y = -1,則應該通過f(x)的符號進行類別決策。 然後您可以看到所有指數損失< 1已被正確分類,損失< 1被錯誤分類。現在很容易轉換爲二進制錯誤分類率。

請注意,如果您看到所有列車數據的損失函數< 1,請不要擔心,這是因爲adaboost優化了保證金,而不是減少錯誤分類率。

希望這能幫助你!

+0

澄清:L> 1意味着分類,而L <1應該是錯誤分類的權利?你在這兩種情況下都輸入了「<」。 – Boxuan 2013-03-28 20:49:05