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

Scikit-Learn分类模型报错:目标类型仅支持binary/multiclass 得到unknown如何解决

报错原因

你调用的所有算法均为分类模型,仅支持离散的二分类/多分类标签作为预测目标。但你代码中作为预测目标的y是Average_base_price(平均基础价格),属于连续浮点型数值,scikit-learn无法将其识别为分类任务的合法目标类型,因此触发了该报错。

解决方案

根据你的业务需求(衡量品牌对价格的影响、判断指定品类下生产商定价是否更高),推荐优先选择回归方案,也可以根据需要将任务转为分类:

方案1:改用回归模型(适配连续价格预测场景)

直接替换分类模型为回归模型,同步调整验证逻辑即可,修改后的代码参考:

# 前面数据读取、编码部分保持不变
from sklearn.linear_model import LinearRegression, Ridge
from sklearn.neighbors import KNeighborsRegressor
from sklearn.tree import DecisionTreeRegressor
from sklearn.svm import SVR
from sklearn.model_selection import KFold, cross_val_score

# 替换为回归模型
models = []
models.append(('线性回归', LinearRegression()))
models.append(('岭回归', Ridge()))
models.append(('KNN回归', KNeighborsRegressor()))
models.append(('决策树回归', DecisionTreeRegressor()))
models.append(('SVR', SVR(gamma='auto')))

# 评估逻辑调整
results = []
names = []
for name, model in models:
    # 回归任务用普通K折即可,不需要分层
    kfold = KFold(n_splits=10, random_state=1, shuffle=True)
    # 回归用R²作为评估指标,也可替换为neg_mean_absolute_error、neg_mean_squared_error
    cv_results = cross_val_score(model, X_train, Y_train, cv=kfold, scoring='r2')
    results.append(cv_results)
    names.append(name)
    print('%s: R²均值%.4f (标准差%.4f)' % (name, cv_results.mean(), cv_results.std()))

如果需要分析生产商对价格的影响,训练线性回归后查看特征系数即可:控制品类变量后,生产商特征的系数为正则代表该厂商定价普遍高于基准,系数为负则代表定价更低。

方案2:转为分类任务

如果你仅需要判断定价高低,可先将连续价格离散化为分类标签后再运行原有分类模型,示例离散化代码:

# 按品类分组,高于同品类均价标记为1(高定价),低于为0(低定价)
dataset['is_high_price'] = dataset.groupby('Category')['Average_base_price'].transform(
    lambda x: (x > x.mean()).astype(int)
)
# 替换y为新生成的分类标签
y = dataset['is_high_price'].values

修改后即可正常运行原有分类模型代码。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:54:02