决策树作为机器学习中最直观的算法之一,其核心思想是通过一系列规则对数据进行递归划分。我最早接触这个算法时,被它"if-then"规则集的表达方式所吸引——就像医生问诊时的逻辑流程:先检查体温,再观察症状,最后结合化验结果做出诊断。
构建决策树的关键在于如何选择最优划分属性。这里涉及三个经典算法:
以常见的CART算法为例,基尼系数计算公式为:
code复制Gini(D) = 1 - Σ(p_i)^2
其中p_i是第i类样本在数据集D中的比例。我在实际项目中验证过,当数据类别分布均匀时,基尼系数会接近1-1/n(n为类别数),此时划分效果最差。
决策树容易过拟合是个老生常谈的问题。通过多次项目实践,我总结出几个关键参数调节技巧:
特别注意:在金融风控场景中,适当增大min_samples_leaf参数能有效防止模型捕捉到个别异常案例的噪声模式。
当单个决策树效果受限时,随机森林往往能带来显著提升。这种bagging集成方法通过构建多棵决策树并投票得出最终结果。
随机森林有两个关键随机性来源:
在我的一个电商推荐系统项目中,通过调整max_features参数发现:
当树的数量超过100时,建议采用以下优化策略:
python复制# sklearn中的并行设置
RandomForestClassifier(n_jobs=-1, verbose=1)
# 分布式计算方案(以Dask为例)
from dask_ml.ensemble import RandomForestClassifier
clf = RandomForestClassifier(n_estimators=500)
梯度提升决策树(GBDT)通过迭代地训练新树来纠正前序树的错误,这种boosting策略在许多竞赛中表现优异。
XGBoost之所以能成为Kaggle比赛的常胜将军,主要得益于这些设计:
一个典型的参数设置模板:
python复制params = {
'max_depth': 6,
'learning_rate': 0.05,
'subsample': 0.8,
'colsample_bytree': 0.7,
'reg_lambda': 1.5
}
LightGBM的两个创新点特别值得关注:
在广告CTR预测任务中,LightGBM相比XGBoost通常能获得:
当需要部署到移动端时,这些方法很实用:
建立以下监控指标能及时发现数据分布变化:
我曾遇到过一个典型案例:某金融风控模型上线3个月后AUC突然下降5个百分点,经排查发现是因为某个关键特征的缺失率从5%飙升到30%,这就是典型的特征漂移问题。
当正负样本比超过1:10时,这些方法值得尝试:
不要完全依赖默认的feature_importance,建议结合:
在某个医疗诊断项目中,我们发现某个特征在常规重要性排名中很低,但SHAP值却显示它对高风险病例有显著影响,这个发现直接改进了我们的预警机制。
比起网格搜索,我更推荐:
特别是在GPU资源有限的情况下,这种基于代理模型的优化方法能节省80%以上的调参时间。