分类算法 - 决策树

分类算法 - 决策树 首页 / 机器学习入门教程 / 分类算法 - 决策树

通常,决策树分析是一种预测建模工具,可以应用于许多领域,决策树可以通过一种算法方法构建,该算法可以根据不同条件以不同方式拆分数据集。决策树是属于监督算法类别的最强大的算法。

它们可用于分类和回归任务。一棵树的两个主要实体是决策节点,在这里数据被拆分并离开,在这里无涯教程得到输出。下面提供了用于预测一个人是否合适的二叉树示例,该信息提供了诸如年龄,饮食习惯和运动习惯等各种信息-

Decision Tree Introduction

在上面的决策树中,问题是决策节点,最终输出是叶子。无涯教程有以下两种类型的决策树。

  • 分类决策树 - 在这种决策树中,决策变量是分类的。上面的决策树是分类决策树的一个示例。

  • 回归决策树 - 在这种决策树中,决策变量是连续的。

决策树算法

Gini Index

它是成本函数的名称,用于判断数据集中的二进制拆分,并与分类目标变量"Success"或"Failure"一起使用。

无涯教程网

基尼指数值越高,同质性越高,理想的Gini指数值为0,最差的值为0.5(对于2类问题),拆分的基尼系数可以通过以下步骤计算-

  • 首先,使用公式 p ^ 2 + q ^ 2 计算子节点的基尼系数,该公式是成功和失败的概率平方之和。

  • 接下来,使用该拆分的每个节点的加权Gini得分计算拆分的Gini指数。

分类和回归树(CART)算法使用Gini方法生成二进制拆分。

Split Creation

拆分基本上包括数据集中的一个属性和一个值。可以通过以下三个部分在数据集中创建拆分-

  • 第1部分   -  计算基尼得分,刚刚在上一节中讨论了这一部分。

  • 第2部分   -  拆分数据集,可以定义为将数据集分为具有属性索引和该属性拆分值的两行列表,从数据集中获得左右两个组后,可以使用第一部分中计算的基尼得分来计算split的值,分割值将决定属性将驻留在哪个组中。

  • 第3部分   -  判断所有分割 - 找到基尼得分并分割数据集后的下一部分是对所有分割的判断,为此,首先,必须检查与每个属性关联的每个值作为候选拆分,然后需要通过判断分割成本来找到最佳分割,最佳拆分将用作决策树中的节点。

代码实现

在以下示例中,无涯教程将在Pima印度糖尿病上实现决策树分类器-

链接:https://www.learnfk.comhttps://www.learnfk.com/python-machine-learning/machine-learning-with-python-classification-algorithms-decision-tree.html

来源:LearnFk无涯教程网

首先,从导入必要的python包开始-

import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split

接下来,如下所示从其网络链接下载iris数据集:

col_names = ['pregnant', 'glucose', 'bp', 'skin', 'insulin', 'bmi', 'pedigree', 'age', 'label']
pima = pd.read_csv(r"C:\pima-indians-diabetes.csv", header = None, names = col_names)
pima.head()
怀孕葡萄糖 BP皮肤胰岛素 Bmi谱系年龄标签
0 6 148 72 35 0 33.6 0.627 50 1
1 1 85 66 29 0 33.6 0.627 50 1
2 8 183 64 0 0 23.3 0.672 32 1
3 1 89 66 23 94 28.1 0.167 21 0
4 0 137 40 35 168 43.1 2.288 33 1

现在,将数据集分为特征和目标变量,如下所示:

feature_cols=['pregnant', 'insulin', 'bmi', 'age','glucose','bp','pedigree']
X=pima[feature_cols] # Features
y=pima.label # Target variable

接下来,将数据分为训练和测试拆分。以下代码将数据集分为70%的训练数据和30%的测试数据-

X_train, X_test, y_train, y_test=train_test_split(X, y, test_size=0.3, random_state=1)

接下来,借助sklearn的DecisionTreeClassifier类训练模型,如下所示:

clf=DecisionTreeClassifier()
clf=clf.fit(X_train,y_train)

最后,需要进行预测。可以在以下脚本的帮助下完成-

y_pred=clf.predict(X_test)

接下来,无涯教程可以获得准确性得分,混淆矩阵和分类报告,如下所示:

from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
result = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(result)
result1 = classification_report(y_test, y_pred)
print("Classification Report:",)
print (result1)
result2 = accuracy_score(y_test,y_pred)
print("Accuracy:",result2)

输出

Confusion Matrix:
   [[116 30]
   [ 46 39]]
Classification Report:
              precision     recall      f1-score     support
        0          0.72       0.79          0.75         146
        1          0.57       0.46          0.51          85
micro avg          0.67       0.67          0.67         231
macro avg          0.64       0.63          0.63         231
weighted avg       0.66       0.67          0.66         231

Accuracy: 0.670995670995671

可视化决策树

上面的决策树可以在以下代码的帮助下可视化-

from sklearn.tree import export_graphviz
from sklearn.externals.six import StringIO
from IPython.display import Image
import pydotplus
dot_data=StringIO()
export_graphviz(clf, out_file=dot_data, filled=True, rounded=True,
   special_characters=True,feature_names=feature_cols,class_names=['0','1'])

graph=pydotplus.graph_from_dot_data(dot_data.getvalue())
graph.write_png('Pima_diabetes_Tree.png')
Image(graph.create_png())
可视化决策树

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

朱赟的技术管理课 -〔朱赟〕

深入拆解Tomcat & Jetty -〔李号双〕

NLP实战高手课 -〔王然〕

系统性能调优必知必会 -〔陶辉〕

代码之丑 -〔郑晔〕

打造爆款短视频 -〔周维〕

数据分析思维课 -〔郭炜〕

自动化测试高手课 -〔柳胜〕

Python实战 · 从0到1搭建直播视频平台 -〔Barry〕

好记忆不如烂笔头。留下您的足迹吧 :)