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

