采用 Iris 数据集的前两个属性和前100个数据集,构建决策树,并画出类似于书籍图4.11的分类边界 构建决策树
时间: 2024-11-06 07:18:04 浏览: 6
使用Iris数据集中的前两个属性(通常指萼片长度和花瓣长度),我们可以构建一个简单的决策树模型来进行分类。Iris数据集包含三种鸢尾花(Setosa, Versicolor, Virginica),这为我们提供了一个很好的示例来展示分类过程。
首先,我们需要加载所需的库如pandas、numpy、matplotlib以及sklearn中的DecisionTreeClassifier。然后,我们从数据集中选取前100个样本,只保留萼片长度(sepal length)和花瓣长度(petal length)这两个特征:
```python
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
import matplotlib.pyplot as plt
# 加载数据
iris = load_iris()
X = iris.data[:, :2] # 取前两个属性
y = iris.target[:100] # 取前100个样本标签
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建并训练决策树模型
clf = DecisionTreeClassifier(random_state=42)
clf.fit(X_train, y_train)
# 绘制决策边界
plt.figure(figsize=(10, 6))
plot_decision_regions(X, y, clf=clf, title="Decision Tree with first two features")
plt.xlabel("Petal Length")
plt.ylabel("Sepal Length")
plt.legend(loc='upper left')
plt.show()
# 决策区域函数
def plot_decision_regions(X, y, clf, resolution=0.02):
markers = ['s', 'x', 'o']
colors = ['red', 'blue', 'green']
cmap = plt.cm.RdYlBu
classes = np.unique(y)
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, resolution),
np.arange(y_min, y_max, resolution))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.8, cmap=cmap)
for i, c in enumerate(classes):
idx = np.where(y == c)
plt.scatter(X[idx, 0], X[idx, 1], c=colors[i],
label=c, edgecolor='black', marker=markers[i], alpha=0.8)
```
这个脚本会生成一个图像,显示了基于萼片长度和花瓣长度的决策树分类边界。请注意,由于实际绘制依赖于图形环境,上述代码需要在支持Matplotlib的环境中运行。
阅读全文