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

按行生成回归预测(Python):双模型预测报错求解

解决回归预测对比与推理适配问题

核心问题分析

  • ValueError: Shape of passed values is (11, 1), indices imply (11, 11):多因预测结果为二维数组(如(11,1)),但构造DataFrame时误将其当作多列数据传入,或索引不匹配导致。
  • 列名匹配失败:训练时特征列名与推理输入列名不一致,或合并结果时列名未正确指定。

简洁实现方案(适配训练+推理全流程)

以下是符合机器学习常规流程的代码,包含数据拆分、模型训练、预测对比、MAE评估,同时适配推理阶段:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error

# ---------------------- 1. 数据准备 ----------------------
# 示例数据集,替换为你的真实数据
df = pd.DataFrame({
    'distance': np.random.rand(100) * 100,
    'target': np.random.rand(100) * 50 + 0.3 * np.random.rand(100) * 100
})

# 拆分数据集:X必须为二维数组(双括号[[...]]保证维度)
X = df[['distance']]
y = df['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=42)

# ---------------------- 2. 训练双回归器 ----------------------
model_lr = LinearRegression()
model_rf = RandomForestRegressor(random_state=42)

model_lr.fit(X_train, y_train)
model_rf.fit(X_train, y_train)

# ---------------------- 3. 预测结果与真实值对比 ----------------------
# 获取一维预测结果,避免形状冲突
y_pred_lr = model_lr.predict(X_test)
y_pred_rf = model_rf.predict(X_test)

# 合并为对比DataFrame,保留原测试集索引
compare_df = pd.DataFrame({
    '真实值': y_test.values,
    '线性回归预测': y_pred_lr,
    '随机森林预测': y_pred_rf
}, index=y_test.index)

print("真实值与预测值对比:")
print(compare_df.head())

# ---------------------- 4. MAE指标评估 ----------------------
mae_lr = mean_absolute_error(y_test, y_pred_lr)
mae_rf = mean_absolute_error(y_test, y_pred_rf)
print(f"\n线性回归MAE: {mae_lr:.2f}")
print(f"随机森林MAE: {mae_rf:.2f}")

# ---------------------- 5. 推理阶段适配函数 ----------------------
def predict_by_distance(model, distance_input):
    """
    兼容单个/批量distance输入的推理函数
    :param model: 训练完成的回归模型
    :param distance_input: 单个数值/数值列表/数组
    :return: 预测结果(单个值/数组)
    """
    # 统一转为二维数组,符合sklearn模型输入要求
    X_in = np.array(distance_input).reshape(-1, 1)
    pred_result = model.predict(X_in)
    # 单个输入返回数值,批量返回数组
    return pred_result[0] if len(pred_result) == 1 else pred_result

# 推理示例
single_pred = predict_by_distance(model_lr, 50)
batch_pred = predict_by_distance(model_rf, [20, 30, 70])
print(f"\n单个distance=50的预测值(线性回归):{single_pred:.2f}")
print(f"批量distance=[20,30,70]的预测值(随机森林):{batch_pred.round(2)}")

关键注意点

  • 训练/推理时特征输入必须为二维数组:用df[['distance']]而非df['distance'],推理时通过reshape(-1,1)确保输入维度正确。
  • 构造对比DataFrame时直接使用一维预测结果,避免二维数组导致的形状不匹配错误。
  • 推理函数兼容单值与批量输入,适配实际部署场景。

内容的提问来源于stack exchange,提问作者kevin811

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:42:28