简介
在这篇文章中,我们将介绍在Python的Sklearn(又称Scikit Learn)库中实现决策树的教程。首先,我们将给你一个关于什么是决策树的快速概述,以帮助你复习这个概念。然后,我们将用一个数据集实现一个端到端的项目,展示一个用DecisionTreeClassifier()函数实现Sklean决策树分类器的例子。
什么是决策树?
决策树是一种监督式学习算法,可用于回归和分类问题。该算法使用训练数据来创建可以用树状结构表示的规则。
像任何其他树形表示法一样,它有一个根节点、内部节点和叶子节点。内部节点代表属性的条件,分支代表条件的结果,叶子节点代表类别标签。
为了得出分类,你从顶部的根节点开始,按照if-else风格的规则,一路向下走到叶节点。你落脚的叶子节点就是你的分类问题的类标签。
决策树可以处理分类和数字数据。这与其他机器学习算法不同,后者不能处理分类数据,需要编码为数字值。
决策树的制作
为了制作一棵决策树,在每一级我们都必须选择属性作为根节点。这就是所谓的属性选择。这主要是利用:
- 吉尼指数。
- 信息增益。
- 卡方。
决策树是如何创建的将在后面的文章中介绍,因为在这里我们更关注Python的Sklearn库中的决策树的实现。
决策树的优点
使用决策树有一些优点,如下所示
- 决策树是一个白盒模型。我们可以很容易地理解模型的任何特定条件,其结果是真或假。
- 它可以处理连续和分类的数据。
决策树的缺点
决策树的一些缺点列举如下-- 1.
- 决策树可能会因为大量的属性而变得非常庞大和复杂。
- 决策树有时会对训练数据很敏感,数据的一个很小的变化就会导致完全不同的树状结构。
Python Sklearn中的决策树分类器实例
Scikit Learn库有一个模块函数DecisionTreeClassifier()可以很容易地实现决策树分类器。
我们将通过使用Balance-Scale数据集来展示Sklearn中的决策树分类器的例子。这个问题的目标是根据天平两边的权重来预测天平是向左倾斜还是向右倾斜。
该数据可以通过这个链接从UCI网站下载。
导入库
我们将首先导入最初需要的库,如NumPy、pandas、seaborn和matplotlib.pyplot。Sklearn模块将在后面的章节中导入。
在[1]中。
import
导入数据集
接下来,我们将CSV文件中的数据集导入到Pandas数据框中。
在[2]中。
col
Out[2]:
| 类名 | 左侧权重 | 左侧距离 | 右边的重量 | 右侧距离 | |
|---|---|---|---|---|---|
| 0 | B | 1 | 1 | 1 | 1 |
| 1 | R | 1 | 1 | 1 | 2 |
| 2 | R | 1 | 1 | 1 | 3 |
| 3 | R | 1 | 1 | 1 | 4 |
| 4 | R | 1 | 1 | 1 | 5 |
关于数据集的信息
我们可以通过使用df.info函数来获得我们数据集的整体信息。从输出结果中,我们可以看到,它有625条记录,有5个字段。
In [3]:
df
[输出] :
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 625 entries, 0 to 624
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Class Name 625 non-null object
1 Left weight 625 non-null int64
2 Left distance 625 non-null int64
3 Right weight 625 non-null int64
4 Right distance 625 non-null int64
dtypes: int64(4), object(1)
memory usage: 22.0+ KB
探索性数据分析(EDA
让我们做一下探索性数据分析以更好地了解我们的数据集。我们通过使用countplot函数绘制了类的图。我们可以在下图中看到,大部分的类名都属于标签R和L,分别指右和左。很少有数据属于B,即代表平衡。
In[4]:
sns
Out[4]:
在[5]中。
sns
Out[5]: Out[5]:
In [6]:
sns
Out[6]:
分割数据集的训练-测试
在将数据送入模型之前,我们首先使用train_test_split函数将其分成训练和测试数据。
在[7]中。
from
训练决策树分类器
我们使用基尼指数作为我们的属性选择方法,用Sklearn函数DecisionTreeClassifier()进行决策树分类器的训练。
我们通过向DecisionTreeClassifier()传递其他参数,如随机状态、最大深度和最小样本叶,来创建决策树分类器。
最后,我们通过使用model.fit()方法来完成训练过程。
在[8]。
from
输出[8]。
DecisionTreeClassifier(max_depth=3, min_samples_leaf=5, random_state=42)
测试准确度
我们现在将通过在测试数据上使用分类器来测试准确性。为此,我们首先使用model.predict函数,并将X_test作为属性传递。
在[9]中。
y_predict
接下来,我们使用Sklearn的accuracy_score函数来计算准确性。我们可以看到,在我们的测试数据上,我们得到了78.6%的相当好的准确性。
在[10]中。
from
Out[10]:
0.7861276595744681
绘制决策树
我们可以在Graphviz库的帮助下绘制我们的决策树,并在分类器模型、目标值和数据的特征名称之后传递一堆参数。
在[11]中。
target
在[12]中。
from
[输出] :

我们还可以通过使用Sklearn库中的export_tree函数来获得树的文本表示。
在[20]中。
from
[输出] :
|--- Left weight <= 2.50
| |--- Right distance <= 1.50
| | |--- Left distance <= 2.50
| | | |--- class: R
| | |--- Left distance > 2.50
| | | |--- class: L
| |--- Right distance > 1.50
| | |--- Right weight <= 2.50
| | | |--- class: R
| | |--- Right weight > 2.50
| | | |--- class: R
|--- Left weight > 2.50
| |--- Left distance <= 2.50
| | |--- Right weight <= 2.50
| | | |--- class: L
| | |--- Right weight > 2.50
| | | |--- class: R
| |--- Left distance > 2.50
| | |--- Right distance <= 3.50
| | | |--- class: L
| | |--- Right distance > 3.50
| | | |--- class: L
我们可以使用save()方法保存图。
在[19]中。
graph
Out[19]:
'graph1.jpg'
- 还可以阅读 - Python Sklearn中的线性回归与实例
- 同时阅读-- Python Sklearn Logistic Regression教程与实例
结语
希望你喜欢我们的教程,现在明白了如何用Python中的Sklearn(Scikit Learn)实现决策树分类器。我们向你展示了一个端到端的例子,使用SKlearn DecisionTreeClassifier()函数,用数据集建立一个决策树模型来完成预测任务。
The postDecision Tree Classifier in Python Sklearn with Exampleappeared first onMLK - Machine Learning Knowledge.