1. 程式人生 > >xgboost Dmatrix label全為0 解決方法

xgboost Dmatrix label全為0 解決方法

這是我開始時的寫法

(因為我的資料有處理(-101)所以就想著直接用np的廣播寫方便一點)

dtrain = xgb.DMatrix(train_data,label=np.asarray(train_label)-101)
dtest = xgb.DMatrix(test_data,label=np.asarray(test_label)-101)
其中 train_data 和 test_data 是 csr_matrix
<class 'scipy.sparse.csr.csr_matrix'>

出現問題,發現訓練時的錯誤率都為0,實際錯誤率卻非常高

檢查了一下,發現問題在dtrain的label上

dtrain.get_label()
array([  8.40779079e-45,   1.12103877e-44,   4.20389539e-45, ...,
         9.80908925e-45,   4.20389539e-45,   4.20389539e-45], dtype=float32)

和github上的demo程式碼比對以後發現他的label用的是[],然後嘗試了

dtrain = xgb.DMatrix(train_data,label=list(map(lambda x : x-101,train_label)))
dtest = xgb.DMatrix(test_data,label=list(map(lambda x : x-101,test_label)))

成功



——————————————————————

其實我最最開始的解決方案也不是那麼寫的,我寫的是

dtrain = xgb.DMatrix(train_data.toarray(),label=np.asarray(train_label)-101)
dtest = xgb.DMatrix(test_data.toarray(),label=np.asarray(test_label)-101)

這樣也行,但是這樣太吃記憶體,渣伺服器跑不動了。。