如何修复元组索引越界错误?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,提问作者Никита Зерекидзе
相关产品推荐
相关产品推荐

