简介波士顿房价数据集是机器学习最经典的回归数据集之一包含犯罪率、房间数、人口等特征以及对应的房价中位数标签适用于线性回归、决策树、随机森林等模型训练与评估特别适合刚接触数据科学的学生和初学者作为入门实践。压缩包共3个文件其中csv文件存放整理好的原始数据py脚本提供快速加载与建模的示例代码md文档对字段含义和使用方法作简要说明整体仅15KB轻量且易于分发。该资源已有1360人学习下载是CSDN上人气较高的公开数据包。通过这份资料读者可直接跳过繁琐的数据搜集与清洗环节聚焦特征分析、模型搭建与预测效果调优也可参照脚本和说明快速复现一次完整的回归建模流程适合作为课程作业、教学案例或自学项目的起步素材。1. 二十年前的房价数据为什么今天还要下波士顿房价数据集与它的应用边界2025 年还在下一份 1978 年收集、1993 年发布的波士顿房价数据集听起来像考古但不管 Kaggle 上新数据集怎么卷这个 506 样本、13 特征的小表格依然是回归入门绕不开的基准。它的价值不在“新”而在“小且完整”特征含义清楚、量纲差异大、存在明显的非线性关系和截断问题正好把特征工程、数据泄漏、模型评估这些基本功都练一遍。适合刚学完 pandas 和 sklearn 的从业者拿它跑通全流程也适合老手在五分钟内验证一个回归思路是否靠谱。2. 拆包到首跑zip 嵌套解压、字段识别与数据分布体检2.1 压缩包到底装了什么两层 zip 与文件格式差异很多平台在上传数据集时会做二次压缩下载下来经常是“波士顿房价数据集.zip”里面再套一层同名的 zip解压完发现还有一层。不要急着双击先在命令行里确认包结构。Linux 下我习惯先跑zipinfo看一眼再决定解压路径zipinfo 波士顿房价数据集.zip | head -20 unzip 波士顿房价数据集.zip -d boston_data cd boston_data ls -la第一行zipinfo列出压缩包内的文件清单head -20限制输出行数避免文件多的时候刷屏unzip -d boston_data指定解压到独立目录防止文件散落到当前目录。解压后看到的可能是一个.data文件、.csv文件也可能是另一个 zip。这里有个很容易翻车的点如果外层 zip 解压后出现“输入密码”的提示先别急着找密码。很多二次打包工具只是把 zip 的 general purpose bit flag 里的加密位置成了 1文件并没有真正加密这就是常见的“zip 伪加密”。现象是双击就弹密码框但用 7-Zip 直接拖拽文件出来往往能成功或者用unzip -o强制覆盖也能绕过去。后面第四章展开说。拿到文件后不要盲信 README。下载来的版本可能被重新整理过列名可能从全大写变成小写甚至多出索引列。先识别字段再谈建模。2.2 用 pandas 完成首次加载最小可复现代码不管原始文件后缀是.data还是.csv先用 pandas 读进来再统一检查结构。.data是旧格式列之间用空格分隔不是逗号所以read_csv要指定sepimport pandas as pd df pd.read_csv(boston_housing.csv) # 如果解压出来是 .data 文件用下面这行 # df pd.read_csv(boston_housing.data, sepr\s, headerNone) print(df.shape) print(df.dtypes) print(df.isnull().sum())sepr\s表示按一个或多个空白字符分隔适配老式.data文件headerNone是因为这种文件通常没有列名列名要在读完之后手动指定。输出结果里df.shape判断样本量和特征量是否 506×14dtypes确认哪些特征是数值型、哪些是离散型isnull().sum()检查缺失值——原版数据没有缺失但二次整理的版本不一定这一步不能省。常见做法是先打印前五行再跟网上资料核对列名顺序。波士顿房价的 13 个特征顺序是固定的CRIM犯罪率、ZN住宅用地比例、INDUS非商业用地比例、CHAS是否邻近查尔斯河、NOX一氧化氮浓度、RM平均房间数、AGE老房子比例、DIS到就业中心距离、RAD公路可达性、TAX房产税率、PTRATIO师生比、B社区构成相关指数、LSTAT低收入人群比例最后一个是目标 MEDV房价中位数单位千美元。columns [CRIM, ZN, INDUS, CHAS, NOX, RM, AGE, DIS, RAD, TAX, PTRATIO, B, LSTAT, MEDV] df.columns columns print(df.describe().T)describe().T会输出每个特征的均值、标准差、最小值、四分位数和最大值。这一步能立刻看出量纲差异RM 均值 6 左右TAX 均值几百B 特征直接到几百差异巨大后续标准化跑不掉。2.3 数据分布第一眼相关性热力图与目标变量分布建模前先看相关性和目标分布这个习惯救过我很多次。波士顿房价这套数据最明显的特点是 MEDV 在 50 的位置有一排样本堆积这是因为数据收集时对超过五万美元的房价做了截断处理只记录为 50。如果不认识这个特征后面所有模型的误差都会被这堆样本带偏。import matplotlib.pyplot as plt import seaborn as sns plt.figure(figsize(12, 10)) sns.heatmap(df.corr(), annotTrue, cmapcoolwarm, fmt.2f, linewidths0.5) plt.show() df[MEDV].hist(bins30, edgecolorblack) plt.xlabel(MEDV (千美元)) plt.show()annotTrue把相关系数直接标在格子里fmt.2f控制数值保留两位小数。热力图里重点看两列MEDV 与 RM 的相关系数在 0.7 左右正相关MEDV 与 LSTAT 在 -0.7 左右强负相关。这两个特征基本决定了线性回归的上限。hist看 MEDV 分布时注意最右边 50 那根柱子是不是明显偏高那是截断样本不是正常长尾。提示如果热力图里某个特征和 MEDV 的相关性出奇地高或者符号反了先回 2.2 核对列名和读取方式不要急着调模型。3. 特征工程与回归基线从 13 个原始特征到一套可复现流水线3.1 特征逐个过哪些直接能喂模型哪些要动手脚波士顿房价的 13 个特征不是都能直接丢进线性模型。下面这张表是我每次拿到这套数据都会过一遍的清单按处理方式分组特征含义处理建议RM平均房间数连续特征保留原值线性模型主力LSTAT低收入人群占比连续特征和 MEDV 近似负线性保留DIS到就业中心加权距离连续特征保留CRIM人均犯罪率右偏严重可先取 log 再看分布ZN / INDUS用地比例很多样本为 0分布接近双峰可保留也可分箱NOX一氧化氮浓度连续特征和 DIS 相关性高注意多重共线性AGE老房子比例连续特征信息量偏弱可保留RAD / TAX公路可达性 / 税率等级数据TAX 与 RAD 强相关选一个即可PTRATIO师生比连续特征保留B社区构成相关指数数值很大且分布集中建议去掉对比效果CHAS是否邻近查尔斯河二分类 0/1别做标准化当分类特征处理这里特别说两个容易忽略的特征。CHAS 是 0/1 二值变量逻辑上不应该进 StandardScaler标准化后它只会变成两个固定值虽然不影响线性回归的预测结果但会让系数解释变得很别扭。B 特征历史上和社区构成相关现在看带有明显的时代遗留问题实际工程里我一般直接删掉或者至少做一次“带 B”和“不带 B”的对比实验你会发现它对模型影响很小却会给评审留下不必要的质疑点。Z世代的从业者可能还会犯另一个错把 RAD 和 TAX 同时留下来。两个特征的相关系数超过 0.9线性回归里会出现系数震荡训练集上分数好看测试集上翻车。处理办法是两者选其一优先保留 TAX因为 TAX 的语义更直观。3.2 划分训练集与标准化一个不会泄漏的流水线数据泄漏是回归任务里最常见也最隐蔽的问题。很多人刚上手时先把整个数据集标准化再切训练集和测试集看起来没毛病实际上测试集的信息已经通过均值和方法差混进了训练过程。正确的顺序永远是先切分再对训练集 fit对测试集只 transformfrom sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler X df.drop(columns[MEDV]) y df[MEDV] X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.2, random_state42 ) scaler StandardScaler() X_train_scaled scaler.fit_transform(X_train) X_test_scaled scaler.transform(X_test)test_size0.2表示留出 20% 的样本做测试506 个样本里大概 101 个random_state42固定随机种子保证每次跑出来结果一致这对后续调参对比非常重要。fit_transform先计算训练集的均值和标准差再用同一套参数转换transform只做转换不重新计算这就堵住了泄漏口。如果想把流程再收紧一点可以直接用 Pipeline 把标准化和模型串起来训练时只 fit 一次from sklearn.pipeline import Pipeline from sklearn.linear_model import LinearRegression pipe Pipeline([ (scaler, StandardScaler()), (reg, LinearRegression()) ]) pipe.fit(X_train, y_train) y_pred pipe.predict(X_test)Pipeline 的好处是调参时不会忘记缩放交叉验证也能自动处理每一折的标准化不用手动维护训练集和测试集两套状态。3.3 跑通线性回归基线R²、MAE 的预期范围线性回归是这套数据集的第一个合理基线。虽然 13 个特征里存在非线性关系但线性模型能跑出一个不算难看的分数给后面上树模型留出对比空间from sklearn.metrics import mean_absolute_error, r2_score from sklearn.metrics import mean_squared_error y_pred pipe.predict(X_test) print(R2:, r2_score(y_test, y_pred)) print(MAE:, mean_absolute_error(y_test, y_pred)) print(RMSE:, mean_squared_error(y_test, y_pred, squaredFalse))预期范围我直接给你简单线性回归在随机种子 42、测试集 20% 的情况下R² 大概在 0.70 到 0.80 之间MAE 约 3.2 到 3.8 千美元RMSE 约 4.5 到 5.5 千美元。如果你跑出来 R² 低于 0.5先检查是不是把 CHAS 也标准化了或者 B 特征没删或者把 MEDV 截断样本全留在了测试集里。mean_squared_error的新版参数squaredFalse直接返回 RMSE老版本没有这个参数需要自己开根号。如果你用的 sklearn 版本较旧改成np.sqrt(mean_squared_error(y_test, y_pred))即可。RMSE 比 MAE 大是正常的因为平方项会让离群点的影响被放大这里 MEDV50 的截断样本就是推高 RMSE 的主力。提示这一步跑出来的 R² 不要发出去当结论它只是基线。真正要看的不是绝对值而是后面随机森林、XGBoost 相比这个基线能提升多少。4. 避坑记录load_boston 失效、zip 伪加密与数据泄漏的五个真实现场4.1 现象load_boston()直接报 ImportError老教程全部失效很多旧代码第一行是from sklearn.datasets import load_boston现在跑会直接告诉你找不到这个函数。原因是从 sklearn 1.2 开始官方因为数据集本身的伦理争议把它移除了这是一个不可逆的决策不要试图通过降级 sklearn 来绕过。解决方法是改用本地文件加载也就是第二章的方式。如果你坚持要体验一键加载可以用fetch_openml(boston, parserpandas)但需要联网且数据格式和原版有差异。我的习惯是下载好的 zip 解压后直接read_csv一劳永逸。4.2 现象zip 解压要求输入密码但压缩包介绍里没提密码这是“zip 伪加密”的典型表现。很多二次打包工具只是把 zip 的加密标志位置为 1并没有真正加密文件内容。解决路径分三步先用 7-Zip 打开压缩包尝试直接把文件拖拽到文件夹不行就用命令行unzip -o强制覆盖还不行就用zipinfo查看加密标志位。第二步还有一个副作用解压出来的文件名可能乱码这是 zip 格式在中文环境下的历史问题解压后用ls -lb看真实文件名再用mv改名即可。不要把时间耗在找密码上。4.3 现象模型在训练集上 R² 0.95测试集上直接掉到 0.4这是典型的数据泄漏。最常见的原因是先对整个数据集做了StandardScaler().fit_transform再切分训练测试集。标准化时计算出的均值和方差已经看了全部样本相当于把测试集的信息提前告诉了模型。解决方法是把切分放在最前面或者用 3.2 的 Pipeline。还有一个隐蔽场景有些教程让你用df.corr()筛选特征后再切分这同样属于泄漏因为相关性也是从全量数据算的。正确的做法是先用训练集算相关性、选特征再去套测试集。4.4 现象CHAS 特征标准化后模型系数解释变得很奇怪CHAS 是 0/1 分类变量放进 StandardScaler 后会变成两个固定数值线性回归照样能跑但输出的系数已经不能直接解释为“邻近查尔斯河对房价的影响”。而且当数据里有分类变量时标准化会让后续的树模型分裂点变得难以调试。解决方法是把 CHAS 单独留在特征矩阵里不参与标准化如果是 Pipeline可以给 CHAS 单独用ColumnTransformer处理。更简单粗暴的做法是直接去掉这个特征跑一遍对比你会发现对 R² 影响很小。4.5 现象R² 很高但预测的房价明显偏贵对不上业务认知R² 只反映模型解释了多大比例的方法差不反映误差的绝对大小。波士顿数据里有一批 MEDV50 的截断样本模型看到这些样本会把所有高房价都往 50 靠结果就是 MAE 勉强能看但 RMSE 被顶得很难看。解决方法是画一张“预测值 vs 实际值”的散点图检查右上角是不是有一排横着的点另一个做法是做一个“MEDV 是否等于 50”的标记列看看模型在这部分样本上的表现。如果你要做真实房价预测应该把截断样本单独拿出来分析而不是硬塞进训练集。5. 进阶玩法把回归改成三分类再用 SHAP 验证特征贡献线性回归只能告诉你“LSTAT 越低房价越高”但说不出这个特征到底在哪些样本上起作用。把 MEDV 切成低中高三档转成分类任务再用 SHAP 看特征贡献才能把这张老数据表榨出新的信息。df[MEDV_cat] pd.qcut(df[MEDV], q3, labels[low, mid, high]) from sklearn.ensemble import RandomForestClassifier X df[[RM, LSTAT, DIS, TAX, PTRATIO, NOX]] y df[MEDV_cat] X_tr, X_te, y_tr, y_te train_test_split( X, y, test_size0.2, random_state42 ) model RandomForestClassifier(n_estimators300, max_depth6, random_state42) model.fit(X_tr, y_tr) print(model.score(X_te, y_te))pd.qcut按分位数切分三档样本量接近避免某一类太少导致评估失真。随机森林的分类准确率预期在 0.75 到 0.85 之间比回归难看到一点但对异常值更稳。特征只保留六个核心变量是为了让 SHAP 图更清爽。import shap explainer shap.TreeExplainer(model) shap_values explainer.shap_values(X_te) shap.summary_plot(shap_values, X_te, class_names[low, mid, high])SHAP 输出里每个点代表一个样本颜色代表特征值大小。你会看到 LSTAT 和 RM 在三种房价档位上的分布模式完全不同低档房主要由 LSTAT 拉升贡献高档房主要由 RM 决定。这个结论比线性回归的系数表直观得多也是面试时展示理解深度的好素材。玩到这里这套 1978 年的数据才算真正被吃透。从那以后我每次拿到陌生数据集都强制自己走一遍shape、dtypes、缺失值、分布、相关性到基线模型这条固定流水线再谈花活。波士顿房价数据集足够老但这条肌肉记忆是新的希望帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
职臣Ai格式排版:新手先学会选对模板 https://www.zhichenai.com论文写完了,为什么还不能直接提交?很多新手以为格式排版只是改字体、调行距,真正操作时却会发现:封面、标题层级、目录、页码、参考文献和章节间距,往往都有明确要求。只要某一处不符合学校规… · 2026/9/25 22:43:07
毕业论文排版别急着交:职臣AI避坑清单 https://www.zhichenai.com论文写到最后,很多同学以为只剩下“调整格式”这一步,真正提交时却发现:封面不符合要求、标题层级混乱、页码位置错误、参考文献间距不统一,甚至因为一个模板选错,整篇论文都要重新修改。毕业… · 2026/9/25 22:43:07
C#坦克大战源码深度解析:WinForms帧循环、碰撞检测与AI实战 简介:C#控制类游戏坦克大战源码实例,是一份面向C#初学者与游戏开发入门者的代码参考,完整演示了控制台游戏从地图、坦克、子弹到音效的基础实现思路,适合希望从零搭建小游戏逻辑的开发者。源码内置声音效果,sound音效文… · 2026/9/25 22:43:01
Pandas数据分析实战:从数据清洗到分组聚合的完整流程 简介:这是一本面向已具备Python基础读者的Pandas实战指南,通过近百个真实案例系统讲解数据清洗、分组聚合、时间序列分析以及与Matplotlib和Seaborn集成可视化等核心技能。资源为1个PDF电子书,压缩包大小53.38MB,文件类型单一&… · 2026/9/25 23:21:26
LSTM多变量成绩预测的Python实战:从数据到模型 简介:这套LSTM系列教程资源面向Python机器学习初学者与时间序列预测实践者,聚焦多变量预测、单变量预测及多步预测等典型任务,覆盖股票、天气、销售等常见应用场景,帮助用户从数据预处理到模型评估建立完整预测流程。资源共33个文… · 2026/9/25 23:21:19
Java多人聊天系统实战:从Socket到线程池的完整构建指南 简介:一套用于 Java 课程设计与期末项目的简易多人聊天系统实现,主要面向有 Java 基础、正在学习网络编程或 Socket 通信的在校学生。系统面向校园师生沟通场景,覆盖用户注册登录、聊天室的创建与加入、文本消息的实时收发等核心流程… · 2026/9/25 23:21:12
河北核雕手串纯手工靠谱商家推荐:金丝楠木手串100真品官方旗舰店客户口碑力荐 文章开篇以行业痛点从用户角度出发,列举本行业大众选择时最常见的4大踩坑难题、选购顾虑、普遍痛点,使用用户高频搜索口语,不植入品牌。 玩橄榄核手串的时候,你有没有遇到过这些糟心事?挑的时候满心欢喜,拿到手才发现… · 2026/9/25 23:21:12
OpenLess云同步完整指南:词典、风格包跨设备一键备份,同时守住隐私与凭据边界 OpenLess云同步完整指南:词典、风格包跨设备一键备份,同时守住隐私与凭据边界 【免费下载链接】openless Hold a key, speak, release — AI-polished text appears at your cursor in any app. Open-source voice input for macOS & Windows. (按住… · 2026/9/25 23:20:39
SharpPcap实战:C#零权限抓包与工业协议解析 简介:这是一份面向C#开发者与网络编程学习者的实用型抓包工具资源,聚焦网络诊断、协议分析与安全监控场景,特别适合初学者理解数据包捕获原理,也便于进阶者快速集成SharpPcap库到实际项目中。压缩包共17个文件,含3个程… · 2026/9/25 23:20:20
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37