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

独热编码分类数据过采样/欠采样时出现形状不匹配错误求助

类别不平衡采样报错的问题排查与解决

核心原因

这个报错本质是采样后的数据维度和原特征维度不匹配——采样器期望输出36列的特征矩阵,但实际生成了1列数据,大概率是数据结构或传入参数出了问题。

具体排查点及修复方法

  • 检查采样器的输入是否为完整特征矩阵
    RandomOverSampler要求输入的特征集是二维结构(比如DataFrame或numpy数组),如果不小心只传了某一列特征(比如X['col1']),就会变成一维数据,采样后自然和原36列的结构冲突。
    修复:确保传入全部特征,示例代码:

    from imblearn.over_sampling import RandomOverSampler
    ros = RandomOverSampler()
    X_resampled, y_resampled = ros.fit_resample(X, y)
    # 确认X是包含36列的完整特征集
    print(X.shape)  # 应输出类似 (40400, 36)
    
  • 验证独热编码后的数据结构
    虽然转成了int类型,但如果独热编码后的数据结构被意外改变(比如从DataFrame变成一维Series,或者数组维度错误),也会引发问题。
    修复:检查编码后的数据形状和类型:

    print(type(X))  # 应为 pandas.DataFrame 或 numpy.ndarray
    print(X.shape)  # 必须是 (样本数, 36)
    # 整列转换为int类型
    X = X.astype(int)
    
  • 确保特征和标签的索引对齐
    如果X和y的索引不一致,采样时会因为数据对齐问题导致维度错乱。
    修复:重置两者的索引:

    X = X.reset_index(drop=True)
    y = y.reset_index(drop=True)
    
  • 避免手动拼接采样后的数据
    不要自己手动把采样后的特征和标签拼回原数据集,直接用采样器返回的X_resampled和y_resampled即可,这两个变量已经是维度匹配的。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:46:09