我在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变量都具有正确的行数和每列一列。
答案 0 :(得分:0)
CREATE DATABASE ches;
需要一个二维输入数组和一个输出向量。您给它两个向量,所以很困惑。使用Xgboost
作为输入应该可以。
答案 1 :(得分:0)
我遇到了同样的错误,但这是因为我的代码中有一个错误
x = trainset[feature_cols + dummy_var_cols]
y = testset[[label_column]]
dtrain = xgb.DMatrix(x_with_dummies, y)
你能发现吗?我的y
变量来自测试集而不是火车集!