跳到主要内容

机器学习与数据挖掘

BP 神经网络预测

用误差反向传播训练双隐层感知机,在留出测试集上报告定量预测误差,并用排列打乱衡量特征贡献。

更新日期 2026-08-29 机器学习

这篇能回答什么

BP 神经网络预测回答的是「这些特征经过一层层非线性变换后,定量目标在未见过的样本上能预报到多准」。StatsX 用带两个隐层的多层感知机(MLPRegressor):特征与目标先做 Z-score,80% 训练、20% 测试(随机种子 42),ReLU 激活、Adam 优化,并开早停。黑盒部分用测试集上的排列重要度(打乱某一列后 R² 掉多少)来排序。

适合:房价、客流、产量等定量因变量,且你怀疑关系不是一条直线。教学示例预测总价(万元),特征只用面积(平米)、楼层、总楼层三列——故意不放单价,避免把「总价≈单价×面积」变成近乎恒等式。

什么时候不该用

有效行少于 50 不能运行:网络参数多,小样本极易记住噪声。因变量若是是否流失、等级标签,本过程是回归器,应改用二元逻辑回归或分类树。关系近似线性、还要标准误与 VIF 时,线性回归更合适,也更容易复现。字符串定类列不会在这里自动哑编码,应先做成数值或改用随机森林特征重要性。

如何选择方法

先问自己要的是可检验的线性系数、树模型筛变量,还是非线性预报误差。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. 步骤 1 · 上传表格

    打开工作台,将 Excel / CSV / JSON 拖入上传区。本案例使用综合评价 xlsx,确认工作表为「Sheet1」。单文件不超过 20 MB。

  2. 步骤 2 · 查看画像与质量

    确认总价(万元)、面积(平米)、楼层、总楼层为定量。不要把房源ID、小区名称拖进特征;也不要同时放入单价(元/平米),否则网络几乎只是在还原「单价×面积」。

  3. 步骤 3 · 选择「BP 神经网络预测」

    在算法目录搜索「BP」或「神经网络」并点选。适合/可用标记仅供参考。

  4. 步骤 4 · 指定特征与目标并运行

    特征变量勾选面积(平米)、楼层、总楼层;预测目标选总价(万元)。点击运行分析。有效行须不少于 50。

  5. 步骤 5 · 阅读结果

    先读测试集 R² 与 RMSE,再看排列重要度是否出现负值。散点若只画了 50 个测试点,完整误差以评估表为准。

StatsX 工作台上传综合评价表
将教学示例表拖入工作台上传区。
列画像确认房价定量列
列画像确认面积、楼层与总价为定量。
在目录中选择 BP 神经网络预测
在算法目录中选定「BP 神经网络预测」。
为 BP 网络指定面积楼层与总价
特征勾选面积、楼层、总楼层,目标为总价后运行。

如何阅读输出

下表由同一份教学示例在 StatsX 中训练 BP 网络得到。测试集 R² 只有 0.1691,RMSE 约 251.4401 万元,对照总价均值大约四百多万元,误差并不小。拓扑为输入 3、隐层 10 与 5、输出 1,表注写明 ReLU、Adam 与早停。

BP 神经网络模型评估指标 (因变量: 总价(万元))
评估指标计算值指标释义
测试集拟合优度 (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%。

BP 神经网络特征排列重要度 (任务类型: 回归)
特征名称排列重要度 (%)累积重要度 (%)
面积(平米)106.74106.74
楼层1.41108.15
总楼层-8.15100

排列重要度通过随机打乱某特征后模型性能下降幅度衡量贡献,数值已归一化为百分比。

BP 神经网络评估与重要度表
工作台中的评估表,数字应与上表一致。
测试集真实总价与预测总价散点
测试集真实值对预测值;点越贴近对角线越好,本例离散较大,与 R²=0.17 一致。

【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.