ValueError: y should be a 1d array, got an array of shape instead

ValueError: y should be a 1d array, got an array of shape instead

我知道这个问题被问过很多次了,但我想不通。

我有这种格式的数据集。前 767 列用于训练并具有训练数据。接下来的 669 列是标签。

标签采用一个热向量的格式,即[0,0,0......1,0,0]。所以我有 669 列。现在我想使用 XGBoost 对其进行训练。我的代码是。

self.clf = XGBClassifier(objective="multi:softmax", num_classes=669)
data = single_data.iloc[:, 0:767]
label = single_data.iloc[:, 767:]
self.clf.fit(data, label)

我得到的错误是

ValueError: y should be a 1d array, got an array of shape (1638, 670) instead.

我该如何解决这个问题?谢谢

我假设您的数据如下所示:

import pandas as pd
label = pd.DataFrame({'c0':[0,1,0,0,0], 'c1':[1,0,0,0,0], 'c2':[0,0,1,1,0], 'c3':[0,0,0,0,1]})
print(label)

输出

   c0  c1  c2  c3
0   0   1   0   0
1   1   0   0   0
2   0   0   1   0
3   0   0   1   0
4   0   0   0   1

将它们转换为整数

label = label.apply(lambda x: x.argmax(), axis=1).values

现在你的标签看起来像这样,一个数组:

array([1, 0, 2, 2, 3], dtype=int64)