xgboost Dmatrix label全為0 解決方法
阿新 • • 發佈:2019-01-14
這是我開始時的寫法
(因為我的資料有處理(-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)
這樣也行,但是這樣太吃記憶體,渣伺服器跑不動了。。