共计 1912 个字符,预计需要花费 5 分钟才能阅读完成。
决策树与 CART 算法概览
决策树是机器学习中经典的 白盒模型(White Box Model),因其结构直观、可解释性强,广泛应用于分类和回归任务。与其他算法(如 ID3、C4.5)相比,CART(Classification and Regression Trees)的核心差异在于:

- 二分法分裂:每次节点分裂只生成两个子节点,降低复杂度
- 基尼系数(Gini Index):作为分类任务的分裂标准,计算效率高于信息增益
- 回归支持:通过方差最小化处理连续值预测
# 基尼系数计算示例
def gini(labels):
_, counts = np.unique(labels, return_counts=True)
prob = counts / len(labels)
return 1 - np.sum(prob ** 2)
三大常见痛点与应对策略
1. 高维特征计算效率
当特征维度超过 1000 时,传统穷举搜索分裂点的方式会显著降低训练速度。解决方案:
- 特征预筛选(方差阈值、互信息)
- 并行化特征评估(如 Spark MLlib 的实现)
2. 过拟合现象
表现为训练集准确率高但测试集差,可通过:
- 预剪枝(Pre-pruning):限制最大深度、最小样本分裂
- 后剪枝(Post-pruning):CCP(Cost Complexity Pruning)
# sklearn 中的剪枝参数
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(
max_depth=5, # 预剪枝
ccp_alpha=0.01 # 后剪枝强度
)
3. 类别不平衡问题
可通过调整类别权重或采样策略解决:
# 类别加权示例
clf = DecisionTreeClassifier(class_weight={0:1, 1:10} # 少数类权重放大
)
完整实现与可视化
数据预处理
import pandas as pd
from sklearn.model_selection import train_test_split
# 加载泰坦尼克数据集
data = pd.read_csv('titanic.csv')
# 处理缺失值
X = data[['Pclass', 'Sex', 'Age']].fillna(data['Age'].median())
X = pd.get_dummies(X, columns=['Sex'])
y = data['Survived']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
模型训练与可视化
from sklearn.tree import export_graphviz
import graphviz
clf = DecisionTreeClassifier(max_depth=3)
clf.fit(X_train, y_train)
# 导出决策树图
dot_data = export_graphviz(clf,
feature_names=X.columns,
class_names=['Died', 'Survived'],
filled=True)
graphviz.Source(dot_data)
生产级优化方案
1. 剪枝效果对比
通过交叉验证选择最优剪枝参数:
from sklearn.model_selection import GridSearchCV
params = {'ccp_alpha': [0, 0.01, 0.1],
'max_depth': [3, 5, None]
}
grid = GridSearchCV(clf, params, cv=5)
grid.fit(X_train, y_train)
print(f"最佳参数:{grid.best_params_}")
2. 特征重要性分析
import matplotlib.pyplot as plt
plt.barh(X.columns, clf.feature_importances_)
plt.title('Feature Importance')
3. 内存与持久化优化
使用 joblib 替代 pickle 加速模型存储:
from joblib import dump, load
dump(clf, 'model.joblib') # 保存
clf_loaded = load('model.joblib') # 加载
延伸思考方向
- 如何将 CART 与随机森林 /GBDT 等集成方法结合?
- 在实时推理场景下,如何优化决策树的预测延迟?
- 当特征存在高相关性时,CART 会面临哪些挑战?
通过本文的代码示例和优化方案,读者可以快速将 CART 决策树应用于实际业务场景,并根据具体需求调整模型策略。建议在模型上线后持续监控特征分布变化,及时触发重新训练。
正文完
