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中存在不为GB的情况,突然间想起,新的标签中加入了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 解决方法

python check_weighted_graph

Check failed: error == cudaSuccess (10 vs. 0) invalid device ordinal

springboot整合es出现elasticsearch health check failed