"决策树是一种流行的监督学习算法,常用于分类任务。在这个例子中,我们将使用Python的scikit-learn库来实现一个决策树分类器,处理经典的机器学习数据集——莺尾花(Iris)数据集。这个数据集包含150个样本,每个样本有4个特征(花萼长度、花萼宽度、花瓣长度和花瓣宽度)和1个目标变量(鸢尾花的种类)。"
在Python中,scikit-learn库提供了丰富的机器学习工具,包括决策树的实现。首先,我们需要导入必要的模块:
1. `load_iris` 函数来自 `sklearn.datasets`,用于加载鸢尾花数据集。
2. `DecisionTreeClassifier` 类来自 `sklearn.tree`,这是我们要使用的决策树分类器。
3. `train_test_split` 函数来自 `sklearn.model_selection`,用于将数据划分为训练集和测试集。
4. `accuracy_score` 函数来自 `sklearn.metrics`,用于计算模型预测的准确率。
接下来,我们加载鸢尾花数据集,并提取特征和目标变量:
```python
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
```
为了评估模型性能,我们需要将数据集分为训练集和测试集。这里我们设置了测试集大小为20%(即80%的数据用于训练,20%用于测试),并设定随机种子为0以确保每次运行结果可复现:
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
```
然后,我们实例化决策树分类器,并使用训练数据拟合模型:
```python
clf = DecisionTreeClassifier(random_state=0)
clf.fit(X_train, y_train)
```
完成模型训练后,我们可以使用测试集对模型进行预测,并评估模型的准确率:
```python
y_pred = clf.predict(X_test)
acc = accuracy_score(y_test, y_pred)
print("Accuracy: {:.2f}%".format(acc * 100))
```
这段代码将输出模型在测试集上的预测准确率,通常越高表示模型性能越好。
决策树的工作原理是通过学习特征之间的关系,构建一棵树形结构,每个内部节点代表一个特征,每个分支代表一个特征值,而叶子节点则对应一个类别。在预测时,新样本根据特征值沿树向下移动,直到到达叶子节点,从而得到预测类别。
在实际应用中,决策树可能面临过拟合或欠拟合的问题,可以通过调整超参数如最大深度(max_depth)、最小叶子节点样本数(min_samples_leaf)等来优化模型性能。此外,scikit-learn还提供了其他决策树变种,如随机森林(Random Forest)和梯度提升决策树(Gradient Boosting Decision Tree),它们通过集成多个决策树来提高预测能力并减少过拟合风险。