机器学习 - 决策树算法



决策树算法是一种基于层次树的算法,用于根据一组规则对结果进行分类或预测。它的工作原理是根据输入特征的值将数据分成子集。该算法递归地分割数据,直到到达每个子集中的数据属于同一类或目标变量具有相同值的地步。生成的树是一组可以用来预测或对新数据进行分类的决策规则。

决策树算法的工作原理是在每个节点选择最佳特征来分割数据。最佳特征是提供最大信息增益或最大熵减小的特征。信息增益是衡量在特定特征处分割数据所获得的信息量,而熵是衡量数据中随机性或无序性的量度。该算法使用这些度量来确定在每个节点分割数据的最佳特征。

下面是一个二叉树的例子,用于预测一个人是否健康,提供了年龄、饮食习惯和运动习惯等各种信息:

Decision Tree Algorithm

在上图的决策树中,问题是决策节点,最终结果是叶子节点。

决策树算法的类型

决策树算法主要有两种类型:

  • 分类树 - 分类树用于将数据分类到不同的类别或范畴。它的工作原理是根据输入特征的值将数据分成子集,并将每个子集分配给不同的类别。

  • 回归树 - 回归树用于预测数值或连续变量。它的工作原理是根据输入特征的值将数据分成子集,并将每个子集分配一个数值。

Python实现

让我们使用一个名为Iris数据集的流行数据集在Python中实现决策树算法,用于分类任务。它包含150个鸢尾花样本,每个样本具有四个特征:萼片长度、萼片宽度、花瓣长度和花瓣宽度。这些花属于三个类别:setosa、versicolor和virginica。

首先,我们将导入必要的库并加载数据集:

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

# Load the iris dataset
iris = load_iris()

# Split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(iris.data,
iris.target, test_size=0.3, random_state=0)

然后,我们创建一个决策树分类器的实例,并在训练集上对其进行训练:

# Create a Decision Tree classifier
dtc = DecisionTreeClassifier()

# Fit the classifier to the training data
dtc.fit(X_train, y_train)

现在,我们可以使用训练好的分类器对测试集进行预测:

# Make predictions on the testing data
y_pred = dtc.predict(X_test)

我们可以通过计算其准确率来评估分类器的性能:

# Calculate the accuracy of the classifier
accuracy = np.sum(y_pred == y_test) / len(y_test)
print("Accuracy:", accuracy)

我们可以使用Matplotlib库可视化决策树:

import matplotlib.pyplot as plt
from sklearn.tree import plot_tree

# Visualize the Decision Tree using Matplotlib
plt.figure(figsize=(20,10))
plot_tree(dtc, filled=True, feature_names=iris.feature_names,
class_names=iris.target_names)
plt.show()

可以使用`sklearn.tree`模块中的`plot_tree`函数来绘制决策树。我们可以传入训练好的决策树分类器,`filled`参数用于用颜色填充节点,`feature_names`参数用于标记特征,`class_names`参数用于标记目标类别。我们还指定`figsize`参数来设置图形的大小,并调用`show`函数来显示绘图。

完整的实现示例

以下是使用iris数据集在python中实现决策树分类算法的完整实现示例:

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

# Load the iris dataset
iris = load_iris()

# Split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=0)

# Create a Decision Tree classifier
dtc = DecisionTreeClassifier()

# Fit the classifier to the training data
dtc.fit(X_train, y_train)

# Make predictions on the testing data
y_pred = dtc.predict(X_test)

# Calculate the accuracy of the classifier
accuracy = np.sum(y_pred == y_test) / len(y_test)
print("Accuracy:", accuracy)

# Visualize the Decision Tree using Matplotlib
import matplotlib.pyplot as plt
from sklearn.tree import plot_tree
plt.figure(figsize=(20,10))
plot_tree(dtc, filled=True, feature_names=iris.feature_names,
class_names=iris.target_names)
plt.show()

输出

这将创建一个决策树图,如下所示:

Plot Of Decision Tree
Accuracy: 0.9777777777777777

正如你所看到的,该图显示了决策树的结构,每个节点代表基于特征值做出的决策,每个叶节点代表一个类别或数值。每个节点的颜色表示该节点中样本的主要类别或值,底部的数字表示到达该节点的样本数量。

广告