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)

这样也行,但是这样太吃内存,渣服务器跑不动了。。


猜你喜欢

转载自blog.csdn.net/csdn_yi_e/article/details/79832049