train_test_split后样本数不一致,逻辑回归MAE计算报错
问题排查与解决
核心错误原因
你犯了一个逻辑错误:用训练集的预测结果y_pred去和测试集标签y_test计算MAE。
y_pred = logReg.predict(X_train)是对训练集样本做预测,样本数和X_train一致(总样本的80%,即101612条)y_test是测试集的标签,样本数是总样本的20%(25404条)
两者样本数自然不匹配,触发报错。
为什么test_size=0.5时能运行?因为此时训练集和测试集样本数各占一半,数量相等,所以不会触发样本数不一致的报错,但这依然是逻辑错误——你应该用模型对测试集做预测,再和测试集标签对比评估模型泛化能力,而不是用训练集的预测结果。
修正后的代码步骤
把预测步骤改成对测试集X_test做预测:
# 训练模型并预测测试集 logReg = LogisticRegression(n_jobs=-1) logReg.fit(X_train, y_train) y_pred = logReg.predict(X_test) # 此处改为预测测试集 # 计算MAE mae = mean_absolute_error(y_test, y_pred) print("MAE:" , mae)
额外验证建议
如果担心特征和标签划分有问题,可以打印X和y的样本数确认是否一致:
print(f"X样本数: {X.shape[0]}, y样本数: {y.shape[0]}")
只要两者数值相等,就说明特征标签划分没问题。
内容的提问来源于stack exchange,提问作者ace brown
相关产品推荐
相关产品推荐

