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

线性回归预测波士顿房价数据集出现负值的问题排查与解决

波士顿房价预测出现负值的成因与修正方案

成因分析

  • 普通线性回归的无约束输出特性:线性回归的预测公式是y = w₀ + w₁*rm + w₂*lstat + w₃*ptratio,输出范围是全体实数,没有下限约束。当输入的特征组合落在训练数据的分布范围之外(即外推场景),模型会沿着拟合的线性关系继续延伸,很容易出现不符合实际逻辑的负值。
  • 输入属于极端特征组合:查看波士顿数据集的特征分布:
    • rm(平均房间数)的训练集范围约为3.56-8.78,该输入的rm=4接近下限;
    • lstat(低收入人口比例)的训练集范围为1.73-37.97,lstat=32接近上限;
    • ptratio(师生比)的训练集范围为12.6-22.0,ptratio=22刚好是最大值。
      这种多特征同时处于极端区间的组合在训练集中样本极少,模型没有学习到该场景下的合理映射关系,最终导致预测值偏离实际。

修正方案

1. 直接截断预测结果(快速临时方案)

对模型输出做下限约束,强制将负值替换为合理的最低房价(比如数据集里的最低房价5.0,或直接设为0):

predict_client = reg.predict(df_predict)
predict_client = max(predict_client[0], 5.0)  # 用数据集最低房价作为下限
print("Prediction for client:", predict_client)

这种方法操作简单,但只是修正输出,没有解决模型本身的外推问题。

2. 使用带非负约束的回归模型

选择输出天然非负的模型,比如泊松回归、Gamma回归,这类模型属于广义线性模型,适合房价这类非负连续目标变量:

from sklearn.linear_model import PoissonRegressor

# 初始化并训练泊松回归模型
reg_poisson = PoissonRegressor(alpha=1.0, random_state=42)
reg_poisson.fit(X_train, y_train)

# 预测新客户房价
predict_client = reg_poisson.predict(df_predict)
print("Prediction for client:", predict_client)

Gamma回归的用法类似,更适合处理右偏分布的非负变量,可根据数据分布选择。

3. 特征与目标变量转换

  • 特征截断:将超出训练集分布的输入特征截断到训练集的最大/最小值,避免模型做过度外推;
  • 目标变量对数转换:对房价medv做对数转换后训练线性回归,预测时再通过指数转换还原结果,确保输出非负:
import numpy as np

# 对目标变量做对数转换
y_log = np.log(y)
reg_log = LinearRegression()
reg_log.fit(X_train, y_log)

# 预测后指数还原得到非负房价
predict_log = reg_log.predict(df_predict)
predict_client = np.exp(predict_log)
print("Prediction for client:", predict_client)

注:波士顿房价的最小值为5.0,无0值,无需额外处理对数转换的边界问题。

4. 改用非线性模型

非线性模型(如随机森林、梯度提升树)基于训练数据的样本分布做预测,不会做无限制的线性外推,能自然避免负值:

from sklearn.ensemble import RandomForestRegressor

# 初始化并训练随机森林回归器
rf_reg = RandomForestRegressor(n_estimators=100, random_state=42)
rf_reg.fit(X_train, y_train)

# 预测新客户房价
predict_client = rf_reg.predict(df_predict)
print("Prediction for client:", predict_client)

这类模型的泛化能力更强,对极端特征组合的预测更符合实际逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:45:22