![165ea136695eb7f2bb245a1e82dde5f9.png](https://i-blog.csdnimg.cn/blog_migrate/86da3a04762fa8fabee2a7df2c41bfda.jpeg)
很多文章介绍过决策树及其它的作用(如下链接)。
•https://medium.com/swlh/decision-tree-classification-de64fc4d5aac
•https://towardsdatascience.com/the-basics-decision-tree-classifiers-b0d20394eaeb
•https://medium.com/@borcandumitrumarius/decision-tree-classifiers-explained-e47a5b68477a
本文将重点介绍如何在iris数据集中使用python中的scikit-learn来实现决策树,以及在分析算法性能时有用的一些功能。
什么是分类器
分类器算法用于通过决策规则将输入数据映射到目标变量,并可用于预测和了解与特定类或目标相关联的特征。这是一个有监督的机器学习算法,因为我们已经有了最终的标签,只想知道他们如何被预测。我们利用决策树分类器,根据鸢尾花的花瓣长度、花瓣宽度、萼片长度和萼片宽度等特征来预测鸢尾花的类型。
什么是决策树
决策树,一种类似树的结构,其中内部节点表示属性,分支表示决策规则,叶节点表示结果。这是通过根据一个属性选择度量将数据分割成不同的分区,在本例中是Gini索引(尽管我们可以根据需要将其更改为信息熵增益)。这本质上意味着我们每个分裂的目的是减少基尼不纯度,根据错误的分类结果来衡量一个节点的不纯程度。
实现决策树
首先,我们希望将数据转换为正确的格式,以便创建决策树。这里,我们将使用sklearn数据集数据库中的iris数据集,它非常简单,可以展示如何实现决策树分类器。
scikit-learn提供的决策树分类器的好处是,目标变量可以是类别变量,也可以是数值变量。为了清晰起见,考虑到iris数据集,我更喜欢保留花的分类性质,因为以后解释起来更简单,尽管如果需要,标签可以稍后引入。因此,可以使用以下代码导入数据集:
import pandas as pdimport numpy as npfrom sklearn.datasets import load_iris# 加载数据data = load_iris()# 转换为数据帧df = pd.DataFrame(data.data, columns = data.feature_names)# 创建“Species”列df['Species'] = data.target# 将其替换为实际名称target = np.unique(data.target)target_names = np.unique(data.target_names)targets = dict(zip(target, target_names))df['Species'] = df['Species'].replace(targets)
接下来我们要提取训练和测试数据集。这样做的目的是确保模型没有针对所有可用数据进行训练,这样我们就可以测试它在看不见的数据上的表现。如果使用所有的数据作为训练数据,那么我们可能会过拟合模型,这意味着它可能在看不见的数据上表现不佳。
# 提取特征和目标变量x = df.drop(columns="Species")y = df["Species"]# 保存特征名称和目标变量feature_names = x.columnslabels = y.unique()# 拆分数据集from sklearn.model_selection import train_test_splitX_train, test_x, y_train, test_lab = train_test_split(x,y, test_size = 0.4, random_state = 42)
现在我们有了正确格式的数据,可以开始创