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)
我知道这个问题被问过很多次了,但我想不通。
我有这种格式的数据集。前 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)