2016-05-05 43 views
1

我有一個包含25000行和761列的數據集,其中包含一個二進制響應列。我的二進制響應的值爲'-1'和'1'。我試圖在其上運行xgboost,並不斷收到這says-R中的XGBoost故障排除

xg_base<-xgboost(data = features,label = output,objective="binary:logistic",eta=1,nthreads=2,nrounds = 10 
      , verbose = T, print.every.n = 5) 


Error in xgb.iter.update(bst$handle, dtrain, i - 1, obj) : 
label must be in [0,1] for logistic regression 

錯誤我使用下面的命令 -

levels(output)[levels(output)=="-1"] <- "0" 

我還是繼續得到同樣的錯誤改變了我的響應水平,我不確定這個問題到底是什麼。重要的一點是,這是一個罕見的事件檢測問題,陽性病例的比例爲總觀測值的1%。這可能是我得到錯誤的原因嗎?

+0

我認爲'輸出'變量必須在0和1之間,而不是一個因素。使用'xgboost'時可能需要重新編碼響應。 – steveb

回答

5

後更改-1的爲0的,改變從要素output到數字:

output <- as.numeric(levels(output))[output] 

我不認爲的事實,這是一種罕見的事件檢測問題與錯誤。

9

這樣做可以幫助有人試圖將等級0和1的因子變量轉換爲XGBoost輸入的標籤,您需要知道在轉換爲整數(或數字)後需要減去1:

> f <- as.factor(c(0, 1, 1, 0)) 

# XGBoost will not accept this for label 
> as.integer(f) 
[1] 1 2 2 1 

# Correct label 
> as.integer(f) - 1 
[1] 0 1 1 0 
0

在運行Xgboost模型之前,我們必須牢記某些步驟。

  1. 所有變量應該是數字
  2. 用於二元分類,您的輸出變量應的範圍從0到1

使用水平(輸出)水平(輸出)== 「 - 1」 ] < - 「0」 ,,你的輸出變量將是字符。將其更改爲數字,將範圍保持在0到1之間,並且Xgboost模型可能會工作。