7.6 算法比较
本章出现的算法在时间和性能上的对比如表 7-1 所示。时间是完成一轮完整训练所需的时间。训练随机森林的部分代码训练了一系列不同规模的模型。在这种情况下,最长训练时间作为所需时间。“算法”列的其他用来展示训练行为随决策树数目的变化情况。相似地,对于惩罚线性回归算法,多数情况使用 10 折交叉验证,但也有的只使用了一个测试数据集。单个测试数据集只需要一轮训练时间,然而对于 10 折交叉验证需要进行 10 轮训练。对于引入 10 折交叉验证的算法,表 7-1 中只显示了 10轮时间的十分之一。
除了玻璃分类数据集(多类别分类问题),惩罚线性回归的训练时间要比梯度提升和随机森林快一个数量级。通常随机森林和梯度提升的性能要优于惩罚线性回归。惩罚线性回归只在某些数据集上性能接近随机森林和梯度提升。若要在红酒数据集上达到接近的性能,需要进行基扩展(basis expansion)。基扩展如果应用到其他数据集上,也可能会带来性能的进一步提升。
表 7-1 性能与训练时间的对比
数据集 | 算法 | 训练时间 | 性能 | 性能评价标准 |
玻璃 | 随机森林 2000 | 2.354401 | 0.227272727273 | 分类错误 |
玻璃 | 梯度提升法 500 决策树 | 3.879308 | 0.227272727273 | 分类错误 |
玻璃 | 套索(lasso)回归 | 12.296948 | 0.373831775701 | 分类错误 |
岩石与水雷 | 随机森林 2000 决策树 | 2.760755 | 0.950304259635 | 曲线下面积 |
岩石与水雷 | 梯度提升法 2000 决策树 | 4.201122 | 0.956389452333 | 曲线下面积 |
岩石与水雷 | ElasticNet 回归 | 0.519870* | 0.868672796508 | 曲线下面积 |
鲍鱼 | 随机森林 500 决策树 | 8.060850 | 4.30971555911 | 均方误差 |
鲍鱼 | 梯度提升法 2000 决策树 | 22.726849 | 4.22969363284 | 均方误差 |
红酒 | 随机森林 500 决策树 | 2.665874 | 0.314125711509 | 均方误差 |
红酒 | 梯度提升法 2000 决策树 | 13.081342 | 0.313361215728 | 均方误差 |
红酒 | 套索扩展回归 | 0.646788* | 0.434528740430 | 均方误差 |
* 标星的时间是单独一次交叉验证的时间。这些方法根据 n 折交叉验证技术会重复训练几次。但是其他方法只在一个测试数据集上进行测试。所以采用单独一次交叉验证的时间与其他算法对比。
随机森林和梯度提升法两者的性能很接近。只不过某些时候,一个算法要比另一个算法需要训练更多的决策树才能达到相似的性能。随机森林和梯度提升法的训练时间大致也一样。在两者训练时间不一致时,一个算法的训练时间可能远远超出了它必需的时间。例如,针对鲍鱼数据集,梯度提升法的测试数据误差在 1 000 步(决策树)时就已经很平坦了,但是训练还是一直持续到 2 000。如果进行修正就可以砍掉梯度提升一半的训练时间,就会使两者的训练时间保持一致。上述情况对红酒数据集也同样成立。
本书评论