共计 1038 个字符,预计需要花费 3 分钟才能阅读完成。
核心概念:分裂准则与投票机制
CART 决策树使用基尼指数(Gini Index)作为分裂准则,其计算公式为:

$$ Gini = 1 – \sum_{k=1}^K p_k^2 $$
其中 $p_k$ 是节点中第 $k$ 类样本的比例。分裂时选择使基尼指数下降最多的特征和切分点。
随机森林通过 Bootstrap 采样构建多棵决策树,最终采用多数投票机制:
$$ \hat{y} = \text{mode}({h_1(x), h_2(x),…, h_T(x)}) $$
理论上,这种集成方法应该比单棵决策树具有更好的泛化能力。
现象分析:三种典型场景
通过二维特征空间的决策边界可视化(使用 plotly 生成交互图),我们发现以下情况会导致分类结果一致:
-
同质数据:当所有 Bootstrap 样本与原始数据分布几乎相同时
-
简单特征空间:特征间无交互作用,单个特征已能完美分割数据
-
默认超参数 :未设置
max_features时,所有树使用相同特征子集
代码实践:打破一致性的方法
from sklearn.ensemble import RandomForestClassifier
import numpy as np
# 生成带噪声的数据
X = np.random.randn(1000, 10)
y = (X[:,0] > 0).astype(int) # 仅第一个特征有效
# 对比实验
rf_default = RandomForestClassifier(n_estimators=100)
rf_diverse = RandomForestClassifier(n_estimators=100, max_features=3) # 关键参数
# 特征重要度分析(时间复杂度 O(n_trees * n_features))rf_diverse.fit(X, y)
print(rf_diverse.feature_importances_)
生产建议:调参公式
对于高维数据,建议采用以下经验公式设置参数:
min_samples_leaf = max(1, int(np.log2(n_features)))max_depth = min(10, int(np.sqrt(n_samples)))
避坑指南:金融风控场景
在金融数据中需警惕以下陷阱:
- 强主导特征:如 ” 交易金额 ” 可能导致所有树相同分裂
- 时间序列泄漏:Bootstrap 会破坏时间依赖性
- 稀疏类别:少数类别可能在采样中被完全忽略
开放式问题
当特征相关性极高时,Bagging 采样的效果会显著降低,因为不同子集包含的信息冗余度高。这是否意味着我们需要转向其他集成方法?
正文完
