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

如何修复元组索引越界错误?sklearn代码问题修正

修正ColumnTransformer触发的IndexError错误

核心问题

你代码里train_test_split的返回值顺序完全搞反了,正确返回顺序是特征训练集、特征测试集、标签训练集、标签测试集,但你写成了features_train, labels_train, features_test, labels_test。这导致features_test实际接收的是一维的标签数组,而ColumnTransformer需要处理二维特征数据,一维数组没有shape[1],直接触发了IndexError。

修正后的完整代码

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import InputLayer, Dense
from tensorflow.keras.optimizers import Adam
from sklearn.model_selection import train_test_split
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler

def r_model(input_shape):
  model = Sequential(name="likelihood")
  model.add(InputLayer(input_shape=input_shape))
  model.add(Dense(10, activation='relu'))
  model.add(Dense(1))
  opt = Adam(learning_rate=0.1)
  model.compile(loss='mse', metrics=['mae'], optimizer=opt)
  return model

# 注意列名的空格,确保和数据集里的列名完全匹配
numerical = ['Serial No.', 'GRE Score', 'TOEFL Score', 'University Rating', 'SOP', 'LOR ', 'CGPA', 'Research']  
labels = df['Chance of Admit ']
features = df[numerical]

# 修正train_test_split的返回顺序
features_train, features_test, labels_train, labels_test = train_test_split(features, labels, test_size = 0.33, random_state = 42)

ct = ColumnTransformer([('standardize', StandardScaler(), numerical)], remainder='passthrough')
features_train = ct.fit_transform(features_train)
features_test = ct.transform(features_test)

# 可选:验证输入维度,确保是二维数组
print(f"训练集特征维度: {features_train.shape}, 测试集特征维度: {features_test.shape}")

额外注意事项

  • 检查列名空格:比如'LOR '和'Chance of Admit '末尾的空格,必须和DataFramedf中的列名完全一致,否则会导致特征选取失败,同样引发维度问题。
  • Adam学习率0.1偏大,回归任务建议从0.001开始尝试,避免模型训练不稳定。

内容的提问来源于stack exchange,提问作者Никита Зерекидзе

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:24:49