使用sklearn ColumnTransformer的fit_transform()时遇'tuple index out of range'错误
数字数据集OneHot编码错误修复方案
错误根源
- 列索引越界:数据集前28列对应索引0-27,目标标签列是最后一列,索引应为28,原代码中
dataset.iloc[:,29].values访问了不存在的列,触发后续维度错误。 - 工具误用:
ColumnTransformer用于处理特征矩阵中指定列的转换,而单独的标签数组不需要该工具,直接用OneHotEncoder即可。 - 维度不匹配:
OneHotEncoder要求输入为二维数组,原代码中一维的y不符合输入要求。
修正后的完整代码
import numpy as np import pandas as pd import matplotlib.pyplot as plt import tensorflow as tf # 数据读取与拆分 dataset = pd.read_csv('dataset_cisla_polia2.csv', header=None, sep=';') X = dataset.iloc[:, 0:28].values # 提取前28列特征 y = dataset.iloc[:, 28].values # 提取最后一列标签 from sklearn.preprocessing import OneHotEncoder # 初始化编码器,设置sparse=False直接输出密集数组 encoder = OneHotEncoder(sparse=False) # 将一维标签转为二维格式后执行编码 y_encoded = encoder.fit_transform(y.reshape(-1, 1)) # 验证输出格式 print(y_encoded)
关键说明
y.reshape(-1,1):将一维数组转换为N行1列的二维结构,满足编码器的输入要求。sparse=False:让编码器返回常规numpy数组,而非稀疏矩阵,直接得到你需要的[1 0 0 ...]形式的编码结果。- 移除不必要的
ColumnTransformer,简化标签编码流程。
内容的提问来源于stack exchange,提问作者kurkurindd
相关产品推荐
相关产品推荐

