Check failed: weights_.Size() == num_row_ (38997 vs. 383852) : Size of weights must equal to number.
Posted Alex_996
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Check failed: weights_.Size() == num_row_ (38997 vs. 383852) : Size of weights must equal to number.相关的知识,希望对你有一定的参考价值。
XGB训练模型报错:Check failed: weights_.Size() == num_row_ (38997 vs. 383852) : Size of weights must equal to number of rows.
分析
单纯看报错应该是说什么维度没有对上,但是很奇怪,我的数据只是换了一个标签而而已,特征并没有改变,按理来说不应该有特征维度对不上的情况,所以只有可能是标签的问题。
训练集的数据是用libsvm格式存储的,看了几条数据没发现啥问题,但是特征维度太多了,所以很难一个一个看,所以打算换一种加载数据的方式。
XGB加载数据:
train = xgb.DMatrix("./data/tr_data")
test = xgb.DMatrix("./data/te_data")
load_svmlight_file加载数据:
load_svmlight_file("./data/tr_data")
然后又报了一个错,大意是说数据中有NULL
,导致解析不了。
所以现在情况就明晰了,基于前面的经验,特征不可能有问题,所以肯定是标签里面有NULL。
原来下载数据的逻辑是:
(case
when label = 'G' then '1'
when label = 'B' then '0'
else NULL
end) as label
如果标签中有NULL,说明label中存在不为G
和B
的情况,突然间想起,新的标签中加入了I
标签,导致最后下载数据的时候将I
标签映射为了NULL,破案了。
最后将下载数据的逻辑修改,只下载label in ('G', 'B', 0, 1)
的数据就OK了。
以上是关于Check failed: weights_.Size() == num_row_ (38997 vs. 383852) : Size of weights must equal to number.的主要内容,如果未能解决你的问题,请参考以下文章
解决Check failed: cudnnSetTensorNdDescriptor(handle_.get(), elem_type, nd, dims.data(), strides.data()
libdvd-pkg: `apt-get check` failed 解决方法
libdvd-pkg: `apt-get check` failed 解决方法
Check failed: error == cudaSuccess (10 vs. 0) invalid device ordinal