独热编码分类数据过采样/欠采样时出现形状不匹配错误求助
类别不平衡采样报错的问题排查与解决
核心原因
这个报错本质是采样后的数据维度和原特征维度不匹配——采样器期望输出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
相关产品推荐
相关产品推荐

