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
相关产品推荐
相关产品推荐

