共计 1970 个字符,预计需要花费 5 分钟才能阅读完成。
背景介绍
决策树是一种直观的机器学习算法,通过树状结构对数据进行分类或回归。CART(Classification and Regression Trees)是其中一种经典算法,它的特点是:

- 二叉树结构:每个节点最多有两个分支
- 可以同时处理分类和回归问题
- 使用基尼不纯度(分类)或均方误差(回归)作为分裂标准
- 递归地选择最优特征和分割点
CART 算法简单直观,容易解释,非常适合作为入门机器学习的第一站。
案例解析:鸢尾花分类
我们以经典的鸢尾花数据集为例,演示 CART 决策树的构建过程。这个数据集包含 150 个样本,每个样本有 4 个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)和 3 个类别标签(山鸢尾、变色鸢尾、维吉尼亚鸢尾)。
- 数据准备:加载数据集并划分训练集和测试集
- 特征选择:算法会自动计算每个特征的基尼不纯度
- 树构建:递归地选择最佳特征和分割点
- 剪枝:防止过拟合(后文会详细讨论)
代码实现
以下是使用 scikit-learn 实现 CART 决策树的完整代码:
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 1. 加载数据
iris = load_iris()
X = iris.data
y = iris.target
# 2. 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 3. 创建决策树模型
# criterion='gini' 表示使用基尼不纯度作为分裂标准
clf = DecisionTreeClassifier(criterion='gini', random_state=42)
# 4. 训练模型
clf.fit(X_train, y_train)
# 5. 预测并评估
predictions = clf.predict(X_test)
print(f"模型准确率: {accuracy_score(y_test, predictions):.2f}")
参数调优
CART 决策树有几个关键参数需要关注:
- max_depth:树的最大深度
- 值太小会导致欠拟合
- 值太大容易过拟合
-
建议从 3 开始尝试
-
min_samples_split:节点分裂所需的最小样本数
- 默认值为 2
-
增加此值可以防止过拟合
-
min_samples_leaf:叶节点所需的最小样本数
- 默认值为 1
- 增加此值可以平滑模型
调优示例代码:
from sklearn.model_selection import GridSearchCV
# 定义参数网格
param_grid = {'max_depth': [3, 5, 7],
'min_samples_split': [2, 5, 10],
'min_samples_leaf': [1, 2, 4]
}
# 网格搜索
grid_search = GridSearchCV(estimator=DecisionTreeClassifier(random_state=42),
param_grid=param_grid,
cv=5
)
grid_search.fit(X_train, y_train)
print(f"最佳参数: {grid_search.best_params_}")
print(f"最佳得分: {grid_search.best_score_:.2f}")
避坑指南
在实际应用中,有几个常见问题需要注意:
- 过拟合问题
- 症状:训练集准确率高,测试集准确率低
-
解决方案:增加 min_samples_split/min_samples_leaf,或使用剪枝
-
类别不平衡问题
- 症状:模型偏向多数类
-
解决方案:使用 class_weight 参数调整类别权重
-
特征重要性误解
- 注意:特征重要性高不代表因果关系
- 建议:结合业务知识分析
性能考量
CART 决策树的性能特点:
- 时间复杂度
- 训练:O(n_features * n_samples * log(n_samples))
-
预测:O(depth)
-
空间复杂度
- 存储树结构:O(n_nodes)
对于大型数据集,可以考虑:
- 使用 max_features 限制每层考虑的特征数
- 对数据进行采样
- 考虑使用随机森林等集成方法
总结
通过这个简单的鸢尾花分类案例,我们完整地走过了 CART 决策树的实现流程。从数据准备、模型训练到参数调优,每一个步骤都有其独特的考量。决策树最大的优势在于其可解释性,这对于业务理解和模型调试非常有帮助。
在实际项目中,建议先用简单的决策树建立 baseline,再考虑更复杂的模型。记住,没有放之四海而皆准的超参数,要根据具体数据和业务需求进行调整。
