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

基于Python Statsmodels实现波士顿数据集单变量线性回归求助

分步指导:完成波士顿数据集单变量线性回归评估任务

嘿,我明白你Python基础薄弱但要完成这个评估的需求,下面我会一步步把每个环节讲清楚,尽量直白易懂:

1. 先搞定Vim的基础操作

因为你需要用Vim写代码,先把这个操作捋顺:

  • 打开终端,输入 vim boston_regression.py 创建并打开代码文件
  • 按下 i 键进入插入模式,这时候就能开始写代码了
  • 写完代码后,按 Esc 键退出插入模式,输入 :wq 回车,就能保存并退出Vim(:w 是保存,:q 是退出,合起来就是保存退出)
  • 运行代码的话,在终端输入 python3 boston_regression.py 就行

2. 完整代码+逐段解释

我把整个任务的代码拆成模块,每个模块都给你讲清楚为什么这么写:

模块1:加载波士顿数据集

# 导入需要的库
from sklearn.datasets import load_boston
import pandas as pd
import statsmodels.api as sm

# 加载数据集
boston = load_boston()
# 把数据集转成DataFrame表格格式,方便查看和处理
dataset = pd.DataFrame(boston.data, columns=boston.feature_names)
# 把目标变量(房价)添加到表格里
dataset['target'] = boston.target
# 打印前5行数据,确认数据加载成功
print("数据集前5行预览:")
print(dataset.head())

解释:

  • load_boston() 是sklearn提供的加载波士顿房价数据集的方法
  • pd.DataFrame 把原始的数组数据转成我们更熟悉的表格形式,columns=boston.feature_names 给每一列加上特征名称(比如RM代表平均房间数)
  • 最后用head()打印前5行,能快速确认数据有没有加载对

模块2:拟合单变量线性回归模型

# 提取自变量RM(平均房间数)和因变量target(房价)
X = dataset['RM']
y = dataset['target']

# 重点:statsmodels的OLS模型默认不包含截距项,所以必须手动给自变量加常数项
# 加完之后X会变成两列:const(截距)和RM
X = sm.add_constant(X)

# 创建OLS模型并拟合数据
model = sm.OLS(y, X).fit()

# 输出模型的系数(截距和RM的系数)
print("\n模型系数:")
print(model.params)

# 输出完整的模型统计摘要,这是评估模型的关键内容
print("\n模型详细统计摘要:")
print(model.summary())

解释:

  • 我们要做的是“房价(target)”和“平均房间数(RM)”的单变量回归,所以先把这两列单独提出来
  • 为什么要加sm.add_constant(X)?因为线性回归的公式是 y = a + b*RM,其中a是截距,statsmodels默认不会自动加入这个截距项,所以必须手动添加
  • sm.OLS(y, X).fit() 是创建普通最小二乘模型并拟合我们的数据
  • model.params 直接输出模型的两个系数:截距(const)和RM的系数,你能直接看到每增加一个房间,房价平均变化多少
  • model.summary() 会输出完整的统计结果,里面的关键指标比如R-squared(越接近1拟合效果越好)、P值(小于0.05说明RM对房价有显著影响)都能帮你评估模型

3. 特殊情况处理(如果加载数据集报错)

如果你运行load_boston()时报错,是因为sklearn新版本出于伦理问题移除了这个数据集,你可以用下面的替代代码加载原始数据:

# 替代加载方案
import pandas as pd
import numpy as np
data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
dataset = pd.DataFrame(np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]]))
dataset.columns = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'target']

这段代码和原来的load_boston()效果完全一样,只是直接从数据集的原始来源加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:02:57