机器学习与数据挖掘
BP 神经网络预测
用误差反向传播训练双隐层感知机,在留出测试集上报告定量预测误差,并用排列打乱衡量特征贡献。
这篇能回答什么
BP 神经网络预测回答的是「这些特征经过一层层非线性变换后,定量目标在未见过的样本上能预报到多准」。StatsX 用带两个隐层的多层感知机(MLPRegressor):特征与目标先做 Z-score,80% 训练、20% 测试(随机种子 42),ReLU 激活、Adam 优化,并开早停。黑盒部分用测试集上的排列重要度(打乱某一列后 R² 掉多少)来排序。
适合:房价、客流、产量等定量因变量,且你怀疑关系不是一条直线。教学示例预测总价(万元),特征只用面积(平米)、楼层、总楼层三列——故意不放单价,避免把「总价≈单价×面积」变成近乎恒等式。
如何选择方法
先问自己要的是可检验的线性系数、树模型筛变量,还是非线性预报误差。BP 给测试集 R² / RMSE / MAE,不给 p 值;线性回归给 B、Beta 与区间;随机森林重要性给基尼分裂贡献,且默认报的是训练集拟合。
BP 神经网络预测:≥1 个特征、1 个定量目标;隐层按特征数自适应,输出测试误差与排列重要度。
线性回归:可加线性、要标准误与共线诊断时优先。
随机森林特征重要性:混合类型特征、要基尼排序,且不必先标准化。
SHAP 模型解释:要「把预测推高多少」的可加归因,而不是打乱列名次。
输入、输出与限制
输入
特征按数值矩阵进入标准化。目录允许定类,但实现不会做哑变量:城市、装修情况这类字符串应先编码,或不要放进本过程。目标必须是 1 个定量列。
特征变量:最少 1 个,最多 100 个。
预测目标:正好 1 个定量变量。
输出
第一张表:测试集 R²、RMSE、MAE 及拓扑说明。第二张表:各特征排列重要度(%)与累积。散点图画出测试集真实值对预测值(最多 50 个点)。文字洞察会点名最关键特征。
产品限制
有效样本至少 50 行;拟合最多 20000 行(超出则截断)。
隐层节点为 max(2p, 10) 与 max(p, 5),p 为特征数;本例 3→10→5→1。
最大迭代 200,早停开启;排列重要度重复 5 次,种子 42。
重要度按均值下降之和归一成百分比,出现负贡献时头部特征可能超过 100%。
这些设定来自 sklearn MLPRegressor,不要拿 SPSS「神经网络」默认多层或未标准化的结果逐格对。
案例
研究问题。 综合评价教学表想用户型结构(面积、所在楼层、楼栋总层数)预报挂牌总价,并看非线性网络在留出样本上是否真的比「凭面积猜」更准。
教学示例工作表为「Sheet1」,有效样本约 600。特征为面积(平米)、楼层、总楼层,目标为总价(万元)。测试集 R² = 0.1691,RMSE = 251.4401 万元,MAE = 188.7752 万元。排列重要度里 面积(平米) 占 106.74%,总楼层为负贡献。下载后按这三列特征、总价目标即可复现两张表。
在 StatsX 中操作
步骤 1 · 上传表格
打开工作台,将 Excel / CSV / JSON 拖入上传区。本案例使用综合评价 xlsx,确认工作表为「Sheet1」。单文件不超过 20 MB。
步骤 2 · 查看画像与质量
确认总价(万元)、面积(平米)、楼层、总楼层为定量。不要把房源ID、小区名称拖进特征;也不要同时放入单价(元/平米),否则网络几乎只是在还原「单价×面积」。
步骤 3 · 选择「BP 神经网络预测」
在算法目录搜索「BP」或「神经网络」并点选。适合/可用标记仅供参考。
步骤 4 · 指定特征与目标并运行
特征变量勾选面积(平米)、楼层、总楼层;预测目标选总价(万元)。点击运行分析。有效行须不少于 50。
步骤 5 · 阅读结果
先读测试集 R² 与 RMSE,再看排列重要度是否出现负值。散点若只画了 50 个测试点,完整误差以评估表为准。




如何阅读输出
下表由同一份教学示例在 StatsX 中训练 BP 网络得到。测试集 R² 只有 0.1691,RMSE 约 251.4401 万元,对照总价均值大约四百多万元,误差并不小。拓扑为输入 3、隐层 10 与 5、输出 1,表注写明 ReLU、Adam 与早停。
| 评估指标 | 计算值 | 指标释义 |
|---|---|---|
| 测试集拟合优度 (R²) | 0.1691 | 越接近 1,模型非线性拟合与预测能力越强 |
| 均方根误差 (RMSE) | 251.4401 | 预测值与真实值误差的平方均值之根,越小越好 |
| 平均绝对误差 (MAE) | 188.7752 | 预测值与真实值绝对误差的均值,越小越好 |
模型拓扑结构:输入层(3) -> 隐层1(10) -> 隐层2(5) -> 输出层(1)。采用 ReLU 激活函数与 Adam 优化器,并引入早停(Early Stopping)机制以防过拟合。
排列重要度把测试集上打乱各列造成的性能下降加成 100%。面积(平米) 为 106.74%,楼层仅 1.41%,总楼层为 −8.15%。负值表示打乱该列后测试表现没有变差(甚至略好),它在当前网络里更像噪声;归一化之后面积才会超过 100%。
| 特征名称 | 排列重要度 (%) | 累积重要度 (%) |
|---|---|---|
| 面积(平米) | 106.74 | 106.74 |
| 楼层 | 1.41 | 108.15 |
| 总楼层 | -8.15 | 100 |
排列重要度通过随机打乱某特征后模型性能下降幅度衡量贡献,数值已归一化为百分比。


【BP神经网络】目标=总价(万元),拓扑=输入层(3) -> 隐层1(10) -> 隐层2(5) -> 输出层(1)。
解读顺序建议:样本是否 ≥50 → 测试 R² / RMSE / MAE(不是训练集)→ 拓扑是否与特征数匹配 → 排列重要度有没有负值 → 散点是否沿对角线。本例网络没有「记住」总价:早停在限制过拟合,但也说明三列户型结构对总价的非线性映射并不强;同一张表上线性回归或带面积的简单模型常常更稳。
理论与公式
第 l 层先做仿射变换再套激活。隐层用 ReLU,输出层为线性以便回归原量纲(预测阶段再逆标准化):
训练最小化标准化目标上的均方误差;反向传播把误差对权重的梯度传回各层,Adam 按梯度自适应更新。测试集指标还原到原单位后计算:
特征 j 的排列重要度是:把测试集第 j 列随机打乱后,评分(这里是标准化空间的 R²)相对原评分下降的均值。StatsX 再把各特征的下降值除以总和乘 100%。下降为负时,该特征对泛化没有帮助。
注意事项
这里的 R² 是 20% 测试集,不能和随机森林页上的训练集 R²=0.88 直接比「谁更准」。
早停降低过拟合,也会让网络在弱信号数据上提前停,表现为偏低的测试 R²。
未放入单价时,总价仍受地段、装修、挂牌时点影响,三列户型解释力有限是预期现象。
排列重要度不是回归系数,也没有标准误;负值不要解释成「总楼层让房价下降」。
字符串定类、ID 列不要当特征。需要自动哑编码时改用随机森林过程。
隐层宽度、迭代上限与种子都是产品固定值,换软件超参后数字会变。
常见问题
参考文献
Rumelhart, D. E., Hinton, G. E., Williams, R. J. Learning representations by back-propagating errors[J]. Nature, 1986, 323: 533–536.
Breiman, L. Random forests[J]. Machine Learning, 2001, 45: 5–32.
周志华. 机器学习[M]. 北京: 清华大学出版社, 2016.