You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XGBoost分类报错:分类指标无法混合处理连续与多类目标如何解决

报错根因
  • 你使用XGBClassifier分类模型要求输入的目标变量必须是离散的类别标签,但你选择的AVG目标列是连续数值,导致计算分类评估指标accuracy_score时,识别到输入同时包含连续(真实值y_test)和离散(预测值predictions)两种类型的目标,触发类型不匹配报错。
  • 你此前转换特征列类型的操作无效,因为问题并非出在特征列,而是出在目标变量y的类型。
  • 额外提醒:你当前代码中训练集拆分时直接传入了完整dataset作为特征,导致特征中包含了AVG目标列,会造成数据泄露,训练出来的模型完全不可用,需要先把目标列从特征中剔除。
解决方案

根据你的实际业务需求选择对应处理方式:

若确认执行分类任务

先将连续的AVG目标列离散化为固定的类别标签,同时修正特征提取逻辑:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from xgboost import XGBClassifier
import random

# 修正读数据的笔误(原代码变量名多写了s)
tab = 'tab.csv'
dataset = pd.read_csv(tab, decimal=".")

# 1. 剔除特征中的目标列,避免数据泄露
X = dataset.drop('AVG', axis=1)
# 2. 离散化目标列:示例为二分类,按中位数拆分,大于中位数为正类1,否则为负类0
threshold = dataset['AVG'].median()
y = (dataset['AVG'] > threshold).astype(int)
# 若为多分类场景,可使用分箱生成多个类别:
# y = pd.cut(dataset['AVG'], bins=3, labels=[0,1,2]).astype(int)

seed = random.randrange(1, 1000)
test_size = 0.33
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_size, random_state=seed)

X_train = np.array(X_train).astype(float)
X_test = np.array(X_test).astype(float)

model = XGBClassifier()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: %.2f%%" % (accuracy * 100.0))

若实际是预测连续的AVG数值

将任务切换为回归任务,使用对应模型和评估指标:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from xgboost import XGBRegressor
import random

tab = 'tab.csv'
dataset = pd.read_csv(tab, decimal=".")

X = dataset.drop('AVG', axis=1)
y = dataset['AVG']

seed = random.randrange(1, 1000)
test_size = 0.33
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_size, random_state=seed)

X_train = np.array(X_train).astype(float)
X_test = np.array(X_test).astype(float)

model = XGBRegressor()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print("MSE: %.2f" % mse)

内容的提问来源于stack exchange,提问作者FChris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 20:45:04