XGBoost分类

所属分类:机器学习-分类

这个方法是做什么的

和梯度提升同一条思路——一轮一轮地加树、每棵新树修正前面还没解释掉的部分——但 XGBoost 在目标函数里显式加了对树复杂度的惩罚项,并用二阶导数信息决定切分,所以在同样轮数下通常更稳、也更能吃住深一点的树。本模块默认跑 200 轮、树深 6、学习率 0.1,切分用直方图算法。因变量是定类列,自变量可同时含定量与定类,定类列在管线内独热编码;报告不产出系数、优势比或任何自变量的 p 值。

报告共五张卡:卡① 建模设置与八项体检,卡② 分层 5 折交叉验证主结果与无信息率检验,卡③ 混淆矩阵与 ROC/PR/逐类别指标四张图,卡④ 效应量区间与置换重要性,卡⑤ 论文表述。本模块有一层别处没有的转换要先知道:XGBoost 只接受数值型标签,所以引擎会先把因变量的类别名按字符编码顺序编成 0、1、2……,展示时再还原成原来的名字。这层转换在报告里不留痕迹,却决定了二分类时“哪一类算正类”——排序靠后的那一类是正类,ROC 曲线、PR 曲线与“正类占比基线”全按它算(见下)。

需要准备什么数据

  • 放入因变量Y:不限
  • 放入自变量X:至少 1 个

数据要求

  • 数据表至少 30 行。
  • 单列缺失率不超过 20%。
  • 不接受取值全都一样的列(零方差列没有可分析的变异)。
  • 「放入因变量Y」的类别数需在 2~20 之间。
  • 「放入因变量Y」的每一组至少 5 个样本。

以上条目由系统从该方法的校验规则直接生成,与上传数据时的实际拦截规则一致。

什么时候用它

  • 结构化表格数据、几百到几十万行,想要一个精度上限较高的分类器
  • 类别边界既非线性又带交互,且你愿意为此接受“说不清模型为什么这么判”
  • 自变量数量较多、类型混杂,不想逐个做变换或筛选
  • 需要一个强基线来判断“更简单的模型是不是已经够用了”

前提:因变量是定类列,2~20 个类别、每类至少 5 例;整表至少 30 行,含缺失的整行会被剔除。默认的 200 轮 × 树深 6 是为“样本够多”设计的:在几百行的数据上它的表达能力远超需要,卡① 表3 第一行的 N/p 判定与表4 的折间标准差是判断这件事的两个抓手。本模块的数据要求里也写着“正则化强度与树深需与样本量配合,小样本时请以交叉验证区间为准”。

什么时候不要用它

  • 因变量是连续数值:用「XGBoost回归」。
  • 要报告每个自变量的效应方向、大小与显著性:本模块没有系数表;二分类结局用「逻辑回归」,结局有序用「有序逻辑回归」。
  • 要交给临床或业务一张能手算的评分工具:树集成没有可写下来的公式,用「逻辑回归」配「列线图(Nomogram)」。
  • 结局带时间与删失(多久复发、还没复发的也要计入):把它压成“是 / 否”会丢掉随访时长这一维,用「Cox比例风险回归」。
  • 样本只有几十条:200 轮深度 6 的模型在这种规模上几乎必然记住训练数据;参数更省的方法更可靠,判别变量全为定量时用「线性判别分析」,否则用「逻辑回归」。
  • 观测之间不独立(同一患者多次就诊、同一门店多期数据):交叉验证按类别分层、却不按个体分组,同一个体会被拆到两边,成绩虚高;用「面板模型」或「混合模型」。

容易误读的地方

  • 报告里没有一处写明“正类是哪一类”,而它由类别名的字符顺序决定。 实测:把因变量的两类改名为“复发 / 未复发”后,卡① 表2 的行序变成“复发”在前、“未复发”在后,正类被定成了未复发,卡④ 表7 的“高于正类占比基线 0.4958”对应的正是未复发那 119 例。于是 PR 曲线与 PR-AUC 衡量的是“检出不复发的能力”,与你关心的方向正好相反。核对办法是拿表7 那个基线数值去对表2 的频数,看它等于哪一类的占比。要控制正类,只能改类别名的写法。
  • PR-AUC 的 95%CI 上界写着 1.0000,那是截断出来的。 表4 里 PR-AUC 均值 0.8676、折间标准差 0.1150,按 t 分布(自由度 4、临界值 2.776)算出的上界是 1.0104,超出定义域后被截到 1.0000;下界 0.7249 则是实算值。表注写着区间“已截断到各指标的定义域”。看到 1.0000 不要读成“可能达到完美”,它只是碰到了天花板——真正的信息是这个区间有多宽(本次 0.28)。
  • “中等”和“良好”之间只差 0.0009。 卡⑤ 写的是“模型的整体判别表现为中等(交叉验证 Macro-F1=0.7991)”,而这个形容词的档位切点是 0.80——Macro-F1 再高 0.0009 就会印成“良好”。同一份报告里 κ=0.6000 判“中等(moderate)”,切点在 0.61;紧邻的 MCC=0.6000 却判“强”,因为那一列以 0.5 为切点。这些词是刻度盘上的标签。 实测只把随机种子从 42 改成 7、其余全不动,同一份数据的 Macro-F1 变成 0.8103、κ 变成 0.6248,两个词双双跳档成“良好”与“较强(substantial)”。结论里请报数值与区间。
  • 折间标准差大,说明这个成绩本身还没站稳。 本次 Accuracy 的折间标准差是 0.0867,95%CI 撑到 [0.6924, 0.9076]——五折里最好和最差的那两折差得很远。原因通常不是模型不好,而是 240 行样本配 200 轮深度 6 的容量,每折训练集换一批数据,学到的边界就明显不同。这种情况下拿交叉验证均值去和别的算法比高低意义不大,先把区间摆出来看它们重不重叠。
  • 表8 里“区间跨 0”只是说这一次没测稳。 本次“门店面积(平米)”的 ΔF1=0.0058、95%CI[−0.0189, 0.0306],判为“贡献不稳定”;而“广告投入(万元)”是 0.1862。置换重要性算在留出的 48 例上、只重排 10 次,样本少、重复少都会把区间撑宽。更根本的是:当两个自变量携带重叠信息时,模型可以只靠其中一个作判断,另一个打乱了也不掉分——那不等于它与结局无关。

报告里有什么

  1. 输出结果一:数据概览与前提检验
  2. 输出结果二:交叉验证性能主结果表
  3. 输出结果三:分类效果可视化
  4. 输出结果四:效应量与事后分析
  5. 输出结果五:结论与学术表述
混淆矩阵(交叉验证折外预测,n=240)
图1 混淆矩阵(交叉验证折外预测,n=240)
ROC 曲线(交叉验证折外预测,AUC=0.869)
图2 ROC 曲线(交叉验证折外预测,AUC=0.869)
Precision-Recall 曲线(交叉验证折外预测,PR-AUC=0.841)
图3 Precision-Recall 曲线(交叉验证折外预测,PR-AUC=0.841)
各类别的精确率 / 召回率 / F1(交叉验证折外预测)
图4 各类别的精确率 / 召回率 / F1(交叉验证折外预测)
卡③ 全部基于交叉验证折外预测绘制:混淆矩阵与曲线所用的预测都来自模型未见过该样本的那一折,不是训练集回代结果。

在线统计分析平台 · 233 种分析方法 · AI 智能解读

在线使用
使用教程