XGBoost Python 错误:“标签大小必须等于行数”

问题描述 投票:0回答:3

我在Python中使用xgboost。

import pandas as pd
import numpy as np
import xgboost as xgb
from sklearn.model_selection import train_test_split

df=pd.read_csv('442.csv')
y=df.columnone
X=df.columnfive

X_train,X_test,Y_train,Y_test=train_test_split(X,y,test_size=0.2)
dtrain = xgb.DMatrix(X_train, label=Y_train)
dtest = xgb.DMatrix(X_test, label=Y_test)

标签的形状看起来和训练集一致?

X_train.shape
>(405020,)
Y_train.shape
>(405020,)

param = {
   'eta': 0.3,
   'max_depth': 3, 
   'objective': 'multi:softprob', 
   'num_class': 2}
steps = 20  # The number of training iterations

但是运行这个给了我这个结果:

model = xgb.train(param, dtrain, steps)
>XGBoostError: Check failed: labels_.Size() == num_row_ (405020 vs. 1) : Size of labels must equal to number of rows.

当我跑步时

dtrain.num_row()
>1
dtrain.num_col()
>405020

这可能与错误有关?但我仍然不知道这是怎么发生的。我的初始 X 和 y 变量都有正确的行数和一列。

python data-science xgboost
3个回答
3
投票

Xgboost
需要一个二维输入数组和一个输出向量。你给它两个向量,所以它很困惑。使用
df[["columnone"]]
作为输入应该可以。


0
投票

我遇到了同样的错误,但这是因为我的代码中有一个错误

x = trainset[feature_cols + dummy_var_cols]
y = testset[[label_column]]

dtrain = xgb.DMatrix(x_with_dummies, y)

你能发现它吗?我的

y
变量来自我的测试集而不是我的训练集!


0
投票

对我来说,这是一个基于我试图更快地测试的行子集的错误 - 该子集没有至少一个每个标签,因此它给出了此错误。

© www.soinside.com 2019 - 2024. All rights reserved.