调用make_column_transformer拟合训练集报tuple index out of range如何解决
问题根因
两个核心问题触发了本次报错:
- 你构造的
X_train是一维Series结构(shape为(2020896,)),scikit-learn的列转换器要求输入至少二维的表格结构,代码尝试访问X.shape[1]获取列数时,一维数组没有第二个维度,直接触发索引越界。 - 列转换器的配置和输入数据不匹配:你在转换器中指定要处理
["Time", "Open"]两列,但实际构造X_btc时只提取了Time单列,输入的数据源里根本不存在Open列,同时逻辑冗余——Unix时间戳和比特币开盘价都是连续值,不需要做OneHot独热编码。
修复方案
步骤1:调整特征构造逻辑
如果你是要用时间戳预测开盘价,将单列提取改为双括号提取,得到二维DataFrame结构:
# 原错误代码:X_btc = btc_data["Time"] X_btc = btc_data[["Time"]] # 双括号提取得到二维结构,shape为(样本数, 1) y_btc = btc_data["Open"]
如果你后续需要把开盘价也作为特征输入,直接在双括号里加列即可,比如X_btc = btc_data[["Time", "Open"]],注意同步调整标签列的定义。
步骤2:修改列转换器配置
删掉冗余的独热编码配置,仅保留需要的归一化逻辑:
ct = make_column_transformer( (MinMaxScaler(), ["Time"]), )
步骤3:运行后续代码
完成上述修改后,再执行ct.fit(X_train)和后续的转换操作就不会触发维度错误。
内容的提问来源于stack exchange,提问作者Khosraw Azizi
相关产品推荐
相关产品推荐

