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

使用sklearn.TargetEncoder处理价格预测时遇类型错误及维度问题求助

问题解决:TargetEncoder编码时的目标类型错误及维度不匹配问题

问题背景

我手头有一个包含21列的产品数据集,其中manufacturer是包含30+类别的分类特征,目标变量是连续型的price(价格)。因为用OneHotEncoding会触发维度诅咒,所以选择用TargetEncoder对该特征编码,但运行代码时遇到了一系列错误:

原代码片段

f = data['manufacturer'].to_numpy().reshape(-1, 1)
g = data['price'].to_list()
enc_auto = TargetEncoder(smooth="auto")
f_trans = enc_auto.fit_transform(f, g)

首次报错

ValueError: Target type was inferred to be 'multiclass'. Only ('binary', 'continuous') are supported.

后续尝试操作引发的错误:

  • 转置特征替代reshape:
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
  • 使用reshape(1, -1):
ValueError: Found input variables with inconsistent numbers of samples: [1, 675413]
  • 分开执行fit和transform,仍出现类似错误。

错误原因及解决办法

1. 目标变量类型识别错误(核心问题)

报错里说目标被识别成了多分类类型,但price是连续数值,问题出在你把目标变量转成了列表(to_list()),TargetEncoder无法正确识别这种格式的连续型数据。

解决:直接传入Pandas Series或Numpy数组格式的目标变量,不要转成列表。

2. 特征维度处理错误

manufacturer是单特征,用reshape(-1,1)是完全正确的操作——它把一维数组转成了(n_samples, 1)的二维格式,符合编码器对输入特征的要求。转置或者用reshape(1,-1)会把特征变成(1, n_samples)的形状,相当于1个样本对应675413个特征,和目标变量的675413个样本完全不匹配,必然报错。

修正后的完整代码

# 特征处理保持正确的reshape方式
f = data['manufacturer'].to_numpy().reshape(-1, 1)
# 直接传入原Series或转为numpy数组,不转列表
g = data['price']  # 或者 g = data['price'].to_numpy()
enc_auto = TargetEncoder(smooth="auto")
f_trans = enc_auto.fit_transform(f, g)

额外检查项

  • 确认price列的数据类型是数值型(int或float),如果是字符串格式,先做类型转换:
    data['price'] = pd.to_numeric(data['price'], errors='coerce')
    # 记得处理转换后产生的缺失值,比如用中位数填充
    data['price'] = data['price'].fillna(data['price'].median())
    
  • 如果你用的是category_encoders库的TargetEncoder,建议更新到最新版本,旧版本对目标类型的判断逻辑可能存在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:42:52