决策树分类实战:从Iris数据集解析到Python实现

1次阅读
没有评论

共计 1864 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

Iris 数据集简介

Iris 数据集是机器学习的经典入门数据集,包含 150 个样本,每个样本有 4 个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)和 1 个类别标签(Setosa、Versicolor、Virginica)。这个数据集的特点是:

决策树分类实战:从 Iris 数据集解析到 Python 实现

  • 特征均为连续数值型
  • 类别完全平衡(每类 50 个样本)
  • 特征与类别间存在明显相关性

决策树算法原理

决策树通过递归地将数据划分为更纯净的子集来进行分类。主要包含两个步骤:

  1. 特征选择 :根据某种标准(如信息增益、基尼指数)选择最佳分裂特征
  2. 节点分裂 :按照选定特征的值将数据划分到不同子节点

算法会递归执行这两个步骤,直到满足停止条件(如节点纯度达到阈值、达到最大深度等)。

Python 实现全流程

1. 数据准备

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# 加载数据
iris = load_iris()
X, y = iris.data, iris.target

# 划分训练集和测试集(7:3 比例)X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

2. 模型训练

from sklearn.tree import DecisionTreeClassifier

# 创建决策树模型
# criterion: 分裂标准(gini/entropy)# max_depth: 树的最大深度
# min_samples_split: 节点分裂所需最小样本数
model = DecisionTreeClassifier(criterion='gini', 
                              max_depth=3,
                              min_samples_split=2,
                              random_state=42)

# 训练模型
model.fit(X_train, y_train)

3. 模型评估

from sklearn.metrics import accuracy_score, classification_report

# 预测测试集
y_pred = model.predict(X_test)

# 计算准确率
print(f"准确率: {accuracy_score(y_test, y_pred):.2f}")

# 打印分类报告
print(classification_report(y_test, y_pred))

关键参数解析

  • criterion: 分裂标准
  • ‘gini’:基尼不纯度(计算更快)
  • ‘entropy’:信息增益(理论上更精确)

  • max_depth: 控制树的最大深度

  • 值太小可能导致欠拟合
  • 值太大容易过拟合

  • min_samples_split: 节点继续分裂所需的最小样本数

  • 防止对极少数样本做过细划分

性能优化建议

避免过拟合

  1. 使用交叉验证选择最优参数
  2. 设置合理的 max_depth
  3. 添加 min_samples_split/min_samples_leaf 约束
  4. 使用剪枝(sklearn 中通过 ccp_alpha 参数)

分裂标准对比

# 测试不同分裂标准
for criterion in ['gini', 'entropy']:
    model = DecisionTreeClassifier(criterion=criterion, random_state=42)
    model.fit(X_train, y_train)
    acc = model.score(X_test, y_test)
    print(f"{criterion} 标准准确率: {acc:.3f}")

常见问题解答

1. 需要做特征缩放吗?

决策树不需要特征缩放,因为它基于特征值比较做分裂,不受特征尺度影响。

2. 如何处理类别不平衡?

  • 使用 class_weight 参数调整类别权重
  • 对少数类样本上采样或多数类下采样

3. 为什么测试集准确率波动大?

  • 检查 random_state 是否固定
  • 可能 max_depth 设置过大导致过拟合
  • 尝试增加测试集比例

扩展应用

  1. 尝试在更大规模的数据集(如葡萄酒分类数据集)上应用
  2. 比较决策树与 KNN、SVM 等算法的效果
  3. 可视化决策树(使用 sklearn.tree.plot_tree)

学习资源推荐

  • 《机器学习实战》第 3 章
  • scikit-learn 官方文档(决策树部分)
  • Kaggle 上的决策树入门教程

总结

通过本实战,我们完成了从数据加载到模型评估的完整流程,并深入理解了决策树的关键参数和调优方法。Iris 数据集作为经典案例,很好地展示了决策树直观、易解释的特点。建议读者尝试调整不同参数,观察模型性能变化,这是掌握算法最有效的方式。

正文完
 0
评论(没有评论)