归一化,例如z-score,是机器学习中常见的预处理方法。我正在分析一个数据集,并使用像随机森林或XGBOOST框架这样的集成方法。
现在我比较使用
- 未归一化的特征
- z-score归一化的特征
通过交叉验证,我观察到在两种情况下,随着max_depth
参数的增加,训练误差都会减少。
对于第一种情况,测试误差也随之下降,并在某个MAE值处达到饱和:
然而,对于z-score归一化的特征,测试误差完全没有减少的趋势。
在以下问题中:https://datascience.stackexchange.com/questions/16225/would-you-recommend-feature-normalization-when-using-boosting-trees讨论了基于树的方法不需要归一化。但上面的例子显示归一化有严重影响。
因此,我有以下两个问题:
- 这是否意味着即使测试误差减少,基于集成的方法也可能发生过拟合?
- 在使用集成方法时,z-score这样的归一化应该成为常规做法吗?
- 归一化方法是否可能降低模型性能?
谢谢!
回答:
在没有代码或数据的情况下,很难看出发生了什么。
归一化是否有帮助取决于特定数据以及归一化步骤的应用方式。基于树的方法应该足够Robust来处理原始数据。在你的交叉验证中,你的代码是否对每个折叠单独进行归一化?在交叉验证前进行一次归一化可能会导致显著的数据泄露。
当深度值非常高时,你将得到一个更加复杂的模型,它会很好地拟合训练数据,但无法很好地泛化到新数据。我倾向于使用2到5的最大深度。如果我无法得到一个合理的模型,我会转向特征工程,而不是尝试过多调整超参数。