决策树是一种常用的机器学习算法,它通过学习训练样本中的简单阈值规则组合来推断决策边界。在本例中,将使用鸢尾花数据集,这是一个包含150个样本和4个特征的经典数据集。将展示如何训练决策树模型,并绘制其决策边界。
首先,需要加载鸢尾花数据集。这个数据集已经包含在了scikit-learn库中,可以通过以下代码来加载它:
from sklearn.datasets import load_iris
iris = load_iris()
接下来,将展示如何使用决策树模型来训练数据,并绘制其决策边界。将对数据集中的每一对特征进行训练,并展示其决策边界。
import matplotlib.pyplot as plt
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.inspection import DecisionBoundaryDisplay
# 参数设置
n_classes = 3
plot_colors = "ryb"
plot_step = 0.02
# 遍历特征对
for pairidx, pair in enumerate([[0, 1], [0, 2], [0, 3], [1, 2], [1, 3], [2, 3]]):
# 只取对应的两个特征
X = iris.data[:, pair]
y = iris.target
# 训练决策树模型
clf = DecisionTreeClassifier()
clf.fit(X, y)
# 绘制决策边界
ax = plt.subplot(2, 3, pairidx + 1)
plt.tight_layout(h_pad=0.5, w_pad=0.5, pad=2.5)
DecisionBoundaryDisplay.from_estimator(clf, X, cmap=plt.cm.RdYlBu, response_method="predict", ax=ax,
xlabel=iris.feature_names[pair[0]], ylabel=iris.feature_names[pair[1]])
# 绘制训练点
for i, color in zip(range(n_classes), plot_colors):
idx = np.where(y == i)
plt.scatter(X[idx, 0], X[idx, 1], c=color, label=iris.target_names[i], edgecolor="black", s=15)
plt.suptitle("决策树在特征对上的训练结果")
plt.legend(loc="lower right", borderpad=0, handletextpad=0)
plt.axis("tight")
除了绘制决策边界,还可以展示单个决策树模型的结构。这可以通过训练一个包含所有特征的决策树模型来实现。
from sklearn.tree import plot_tree
plt.figure()
clf = DecisionTreeClassifier().fit(iris.data, iris.target)
plot_tree(clf, filled=True)
plt.title("在所有鸢尾花特征上训练的决策树")
plt.show()
通过上述代码,不仅能够看到决策树在不同特征组合上的表现,还能直观地了解决策树的结构。这些信息对于理解模型的工作原理和优化模型性能都是非常有帮助的。