许多小树与诚实的特征排序
决策树用类似“20 日收益是否超过 1%?”的问题反复划分行,每一步选择使各组最纯的划分。一组的基尼不纯度为 G=1-Σₖpₖ²,能降低两个子节点加权不纯度的划分就是好划分。深度不限的树最后每片叶子只有一行:训练准确率 100%,测试准确率约 50%。有两种办法让树保持诚实。随机森林对许多浅树取平均,每棵树在随机抽取的行和特征上生长,错误因此部分抵消。梯度提升逐个加入小树,每棵树拟合当前总和仍然出错的部分:Fₘ=Fₘ₋₁+νhₘ,学习率 ν 让每一步都很小。两者都由 max_depth、min_samples_leaf 和树的数量控制,并且都需要 random_state 才能重现结果。
特征重要性有两种。不纯度重要性(feature_importances_)累计每个特征在训练行上降低了多少不纯度;它的总和为 1,偏向取值很多的特征,并且是在模型已经见过的数据上计算的。置换重要性打乱测试行的某一列,衡量得分下降多少:重要的特征被打乱会受损,无用的则不会。在标签取决于两个特征乘积的人工问题上,逻辑回归的 AUC 接近 0.5,而树能找到这种交互,两种排序都指向正确的两列。在 SPY 方向上结果却毫无用处:不限深度的树测试准确率为 50.5%,AUC 分别为 0.498(逻辑回归)、0.515(森林)和 0.531(提升),六个不纯度重要性都在 0.13 到 0.20 之间,置换排序与之不一致。平坦的重要性和接近 0.5 的测试 AUC 说明没有什么可排序的。
- 限制深度:不限深度的树训练 100%,测试约 50%。
- 不纯度重要性在训练行上计算;值得信赖的是测试行上的置换重要性。
- 树能看到线性模型看不到的交互,但嘈杂的收益率中并没有:预期 AUC 接近 0.5。
实验:评分内容
- 深度曲线15 分
- 森林与提升10 分
- 三个模型三个 AUC20 分
- 不纯度重要性10 分
- 置换排序20 分
- SPY 研究25 分