多层感知器(MLP)
这个方法是做什么的
全连接前馈神经网络:输入层接一到多个隐藏层再接输出层,靠反向传播反复调整权重,去逼近自变量到因变量的映射。隐藏层结构用逗号写(默认 64,32 即两层)、激活函数四选一(relu / tanh / logistic / identity)、L2 正则化强度 alpha 与最大迭代次数各一个输入框,任务类型由你在控件里选“分类”或“回归”,不像决策树那样自动判定。建模管道是“中位数或众数插补 → 定量标准化 / 定类独热编码 → 网络”,并且在交叉验证的每一折内单独拟合,标准化用的均值与标准差只来自训练折。它不产出任何回归系数,变量贡献一律靠置换重要性。
报告共五张卡,比四棵决策树少了“节点明细”那一张——网络没有可读规则可翻译。主结果是卡② 表5 的 5 折交叉验证折外指标(均值、折间 SD、95%CI),“训练集”列只作过拟合对照;没有独立留出测试集,机器学习-回归那一族在同一张表上另附的留出列,这里不存在,所以卡② 的每一个数都来自同一次交叉验证,不构成两次独立验证。卡③ 分类给折外混淆矩阵(目标多于 2 类时不画 ROC,图注会说明原因),回归给折外校准图与真实值—预测值散点。卡④ 的置换重要性在全样本拟合的最终模型上做,表注写明因此略偏乐观。
需要准备什么数据
- 放入因变量Y:不限
- 放入自变量X:至少 1 个
数据要求
- 数据表至少 20 行。
- 单列缺失率不超过 30%。
- 不接受取值全都一样的列(零方差列没有可分析的变异)。
以上条目由系统从该方法的校验规则直接生成,与上传数据时的实际拦截规则一致。
什么时候用它
- 自变量与因变量的关系明显非线性、还带交互,而你说不清该套什么函数形式
- 定量与定类自变量混在一起,希望一次丢进去看整体能预测到什么程度
- 同一份数据想和树模型对照:树切的是阶梯,网络给的是连续光滑映射,两者错开的地方值得回查
- 只需要预测精度与变量贡献排序,不需要可解释、可检验的系数
- 分类与回归都要试一次:换一个控件即可,报告结构自动跟着换
前提:至少 20 条完整记录(19 条会被拦下),所选变量上有缺失的整行剔除,禁止常数列,因变量不得同时出现在自变量里。神经网络参数量远多于树模型,样本量最好达到自变量个数的 10 倍以上,卡① 表4 会给出实测比值。定类自变量水平数过多会在独热后造成维度爆炸;网络对量纲敏感,标准化已在管道里做了,但它消不掉极端离群值,建议先处理。
什么时候不要用它
- 需要向读者交代每个自变量的效应方向、大小与显著性:整份报告没有系数、没有针对自变量的 p。连续因变量用「线性回归 (最小二乘法)」,二分类用「逻辑回归」,有序多分类用「有序逻辑回归」。
- 样本只有几十条:网络的可训练参数轻易超过样本量,折间指标会剧烈波动。这种规模下用参数少得多的「线性判别分析」或「KNN近邻分类」更稳。
- 需要一份能给业务照着执行的规则:网络给不出“若…则…”。要可读规则用「C&RT决策树」或「CHAID决策树」。
- 自变量高度共线:置换重要性会在相关变量之间互相稀释,排名失去意义。先用「VIF共线性诊断」看一眼,或改用能自动压变量的「Lasso回归」。
- 观测之间不独立(同一对象多期测量、班级 / 医院内部嵌套):交叉验证会把同一个体拆到训练折与验证折两边,指标虚高;用「混合模型」或「面板模型」。
容易误读的地方
- 默认的 500 次迭代在演示数据上根本没跑完,报告却一个字都没说。 实测网络在 500 次时撞上上限(sklearn 抛出收敛告警,告警只进服务端日志),把上限提到 3000 才在第 521 次收敛。报告里唯一提到“收敛”的是摘要末尾那句提示,而它在 max_iter=500 和 100 两次运行里逐字相同——那是常驻文案,不是检查结果。更值得警惕的是收敛之后反而更差:折外准确率 100 次为 0.7750、500 次为 0.7667、3000 次为 0.7375。迭代上限在这里起的是正则化作用,“调大到收敛”不一定是改进。
- 激活函数选 identity,网络就不再是“多层”的了。 identity 是恒等映射,层与层之间没有非线性,整个网络塌缩成一个线性模型(分类时相当于带 L2 的多分类 logistic 回归),隐藏层结构只影响优化过程、不再增加能表达的函数。实测四档:relu 0.7667、tanh 0.7833、logistic 0.8042、identity 0.8000——线性那一档并不比非线性差,而四档的最大差距 0.0375 小于折间 SD(0.06~0.08)。240 条数据分不出它们的高下。
- 参数动了、数字也动了,不等于调参有效。 把 alpha 从 0 调到 10(跨五个数量级):0.7708 与 0.7708,默认 1e-4 是 0.7667,三个数落在同一个折间 SD 里。判据是变化幅度要明显超过卡② 表5 的“折间 SD”那一列,否则你看到的只是随机波动。这也是表注说“本模块不做超参数搜索”的原因:在同一份数据上反复挑参数再报交叉验证指标,那个指标本身已经乐观了。
- “任务类型”选错了它不会拦你。 演示数据的因变量是取值 1/2/3 的客户分层编码。选“分类”得到准确率 0.7667;改选“回归”照样跑通,卡① 表1 写成“定量(回归任务)”,卡② 给出 R² = 0.7199——此时模型默认 1、2、3 是等距有序的数值。回归模式只在整列都不是数值时才报错。类别编码请一律选“分类”。
- 唯一取值 ≤ 10 的定量自变量会被当成定类做独热。 演示数据的“客服工单数”(0~9 共 10 个取值)在卡① 表1 被标成“定类 | 10 个水平”,独热成多列,大小顺序整个丢掉。在数据页把它的测量尺度改声明为定量后,同一份数据准确率从 0.7667 升到 0.7750,表1 那行变成“定量 | 均值 4.2667”。读报告第一件事是看卡① 表1 的“测量尺度”列,确认模块理解的变量类型和你想的一致。
报告里有什么
- 输出结果一:数据概览与前提检验
- 输出结果二:交叉验证性能主结果表
- 输出结果三:折外预测诊断可视化
- 输出结果四:判别效能与变量重要性
- 输出结果五:结论与学术表述
混淆矩阵基于交叉验证的折外预测:行是真实类别、列是预测类别,对角线为预测正确的样本数。可用右上角切换器切到「表格」读取精确计数。