数据分析2.9 —— 数据标准化 Normalization
针对不同场景使用不同模型需要不同的数据处理方式
前言
特征缩放在机器学习中是一个关键步骤,但并不是所有模型都需要进行缩放。本节将根据不同的模型和数据特点,提供适当的缩放策略,并重点分析梯度提升决策树(GBDT)对异常值的敏感性。
1. 特征缩放与模型的关系
对缩放敏感的模型(需要特征缩放)
这些模型依赖于欧几里得距离、梯度优化或线性代数计算,因此对特征范围的差异非常敏感。
- 逻辑回归 & 线性回归
- 特点:基于梯度下降优化,数据的分布对收敛速度有较大影响。
- 推荐缩放方法:StandardScaler 或 MinMaxScaler
- 支持向量机(SVM)
- 特点:支持向量机通过计算特征空间的距离来分类,因此缩放会影响分类边界的定位。
- 推荐缩放方法:StandardScaler
- K-近邻(KNN) & K-均值(K-Means)
- 特点:此类模型依赖于特征间的距离计算,因此缩放会影响模型性能。
- 推荐缩放方法:MinMaxScaler 或 StandardScaler
对缩放不敏感的模型(无需特征缩放)
这些模型主要依赖规则或树结构进行决策,而不依赖于距离或线性假设。
- 决策树(Decision Tree)
- 特点:通过特征的分裂进行划分,不依赖于特征的距离。
- 推荐缩放方法:不需要
- 随机森林(Random Forest)
- 特点:多个决策树的集成,整体对特征的尺度变化不敏感。
- 推荐缩放方法:不需要
- 朴素贝叶斯(Naive Bayes)
- 特点:基于特征的条件概率分布,特征的尺度变化不会影响模型。
- 推荐缩放方法: 不需要
2. 梯度提升决策树(GBDT)的异常值敏感性
虽然单独的决策树对异常值有较强的鲁棒性,但梯度提升决策树(GBDT),如 XGBoost、LightGBM、CatBoost 等,可能对目标值(y)或某些特征的异常值非常敏感,原因如下:
- 回归任务中的目标值异常:GBDT在优化损失函数(如均方误差 MSE)时,对异常值非常敏感,可能导致模型过度关注异常点。解决方案:使用鲁棒的损失函数,如 Huber Loss 或 Quantile Loss。
from sklearn.ensemble import GradientBoostingRegressor
model = GradientBoostingRegressor(loss="huber")- 特征中存在极端值:特征的极端值可能影响树的分裂点选择,导致模型对这些特征过拟合。解决方案:使用 RobustScaler 或对特征进行 log 变换进行缩放或标准化。
- 极端样本权重或不平衡分布:样本的权重较大或特征存在极端值时,可能影响分裂的方向。解决方案:调整样本权重,或者对异常值进行处理,如截断或删除。
3. GBDT 的参数调优与异常值应对
在使用 GBDT 时,可以通过调整以下参数来减弱异常值的影响:
- 学习率(learning_rate):降低学习率可以减缓模型对异常值的过拟合。
- 最大增量步长(max_delta_step):控制每次更新的最大步长,避免梯度更新过大导致过拟合。
- 目标函数(objective):将默认的目标函数替换为鲁棒性更强的函数(如 Huber 或 Log-Cosh)。
4. 不同缩放方式的适用场景

5. 总结
对于决策树、随机森林等模型,通常不需要进行特征缩放。然而,在回归任务中,GBDT 对目标值和特征的异常值可能会特别敏感,需特别关注缩放方法和损失函数的选择。
对于基于梯度优化的模型,特征缩放通常是必要的。选择合适的缩放方法不仅能加快模型的收敛速度,还能有效提高模型的性能。
评论
目录