机器学习实操 第一部分 机器学习基础 第6章 决策树
机器学习实操 第一部分 机器学习基础 第6章 决策树
内容概要
第6章深入介绍了决策树,这是一种功能强大的机器学习算法,能够处理分类、回归以及多输出任务。决策树通过递归地分割数据集来构建模型,具有易于解释和可视化的特点。本章详细讲解了决策树的训练算法、正则化方法以及在不同任务中的应用。通过理论和实践相结合的方式,读者将掌握如何使用决策树解决实际问题。
主要内容
-
决策树的训练与可视化
- 构建决策树:使用CART算法训练决策树,通过递归分割数据集来构建树结构。
- 可视化决策树:使用
export_graphviz
函数输出树结构,并通过Graphviz工具进行可视化。
-
决策树的预测过程
- 分类任务:从根节点开始,根据特征值递归地向下遍历树,直到到达叶节点,输出叶节点中样本最多的类别。
- 回归任务:类似地,输出叶节点中样本的平均值作为预测值。
-
CART算法
- 分类任务:通过最小化基尼不纯度来选择最优的特征和阈值进行分割。
- 回归任务:通过最小化均方误差(MSE)来选择最优的特征和阈值进行分割。
-
正则化技术
- 过拟合问题:决策树容易过拟合训练数据,需要通过正则化参数(如
max_depth
、min_samples_split
、min_samples_leaf
等)来限制树的复杂度。 - 剪枝技术:通过统计检验(如卡方检验)来剪枝不必要的节点,减少过拟合。
- 过拟合问题:决策树容易过拟合训练数据,需要通过正则化参数(如
-
决策树的优缺点
- 优点:易于解释、可视化,对数据预处理要求低。
- 缺点:对数据的旋转敏感,容易过拟合,方差较高。
-
多输出任务
- 多输出分类:决策树可以扩展到多输出任务,通过同时预测多个目标变量。
关键代码和算法
6.1 决策树分类
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from graphviz import Source# 加载数据
iris = load_iris(as_frame=True)
X_iris = iris.data[["petal length (cm)", "petal width (cm)"]].values
y_iris = iris.target# 训练决策树分类器
tree_clf = DecisionTreeClassifier(max_depth=2, random_state=42)
tree_clf.fit(X_iris, y_iris)# 可视化决策树
export_graphviz(tree_clf, out_file="iris_tree.dot",feature_names=["petal length (cm)", "petal width (cm)"],class_names=iris.target_names, rounded=True, filled=True)
Source.from_file("iris_tree.dot")
6.2 决策树回归
import numpy as np
from sklearn.tree import DecisionTreeRegressor# 生成非线性数据
np.random.seed(42)
X_quad = np.random.rand(200, 1) - 0.5
y_quad = X_quad ** 2 + 0.025 * np.random.randn(200, 1)# 训练决策树回归器
tree_reg = DecisionTreeRegressor(max_depth=2, random_state=42)
tree_reg.fit(X_quad, y_quad)
6.3 正则化决策树
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split# 生成非线性数据
X_moons, y_moons = make_moons(n_samples=150, noise=0.2, random_state=42)# 训练决策树分类器
tree_clf1 = DecisionTreeClassifier(random_state=42)
tree_clf2 = DecisionTreeClassifier(min_samples_leaf=5, random_state=42)
tree_clf1.fit(X_moons, y_moons)
tree_clf2.fit(X_moons, y_moons)# 评估模型
X_moons_test, y_moons_test = make_moons(n_samples=1000, noise=0.2, random_state=43)
print("Unregularized tree accuracy:", tree_clf1.score(X_moons_test, y_moons_test))
print("Regularized tree accuracy:", tree_clf2.score(X_moons_test, y_moons_test))
精彩语录
-
中文:决策树是一种强大的机器学习算法,能够处理分类和回归任务。
英文原文:Decision trees are versatile machine learning algorithms that can perform both classification and regression tasks.
解释:强调了决策树的多功能性。 -
中文:决策树的一个重要特点是它们的预测过程易于解释。
英文原文:One of the many qualities of decision trees is that they require very little data preparation.
解释:指出了决策树的一个优势,即对数据预处理要求低。 -
中文:CART算法通过最小化基尼不纯度或均方误差来选择最优的分割特征和阈值。
英文原文:The CART algorithm works by first splitting the training set into two subsets using a single feature k and a threshold t.
解释:介绍了CART算法的基本原理。 -
中文:决策树的过拟合问题可以通过调整正则化参数来缓解。
英文原文:To avoid overfitting the training data, you need to restrict the decision tree’s freedom during training.
解释:强调了正则化在决策树训练中的重要性。 -
中文:决策树对数据的旋转敏感,因此在某些情况下可能需要进行特征工程。
英文原文:Decision trees love orthogonal decision boundaries (all splits are perpendicular to an axis), which makes them sensitive to the data’s orientation.
解释:指出了决策树的一个局限性。
总结
通过本章的学习,读者将掌握决策树的核心概念和应用方法。这些内容包括决策树的训练、可视化、预测过程,以及如何通过正则化技术来避免过拟合。此外,本章还介绍了决策树在分类和回归任务中的应用,以及其优缺点。决策树的透明性和灵活性使其成为许多实际应用中的首选算法。