决策树分类算法的案例(代码实现及运行测试)

article/2025/10/15 0:11:53

1 案例需求

我们的任务就是训练一个决策树分类器,输入身高和体重,分类器能给出这个人是胖子还是瘦子。

所用的训练数据如下,这个数据一共有10个样本,每个样本有2个属性,分别为身高和体重,第三列为类别标签,表示“胖”或“瘦”。该数据保存在1.txt中。

1.5 50 thin

1.5 60 fat

1.6 40 thin

1.6 60 fat

1.7 60 thin

1.7 80 fat

1.8 60 thin

1.8 90 fat

1.9 70 thin

1.9 80 fat

2 模型分析

决策树对于“是非”的二值逻辑的分枝相当自然。而在本数据集中,身高与体重是连续值怎么办呢?

虽然麻烦一点,不过这也不是问题,只需要找到将这些连续值划分为不同区间的中间点,就转换成了二值逻辑问题。

本例决策树的任务是找到身高、体重中的一些临界值,按照大于或者小于这些临界值的逻辑将其样本两两分类,自顶向下构建决策树。

3 python实现

使用python的机器学习库,实现起来相当简单和优雅

# -*- coding: utf-8 -*-

import numpy as np

import scipy as sp

from sklearn import tree

from sklearn.metrics import precision_recall_curve

from sklearn.metrics import classification_report

from sklearn.cross_validation import train_test_split

''' 数据读入 '''

data   = []

labels = []

with open("d:\\python\\ml\\data\\1.txt") as ifile:

    for line in ifile:

        tokens = line.strip().split(' ')

        data.append([float(tk) for tk in tokens[:-1]])

        labels.append(tokens[-1])

x = np.array(data)

labels = np.array(labels)

y = np.zeros(labels.shape)

''' 标签转换为0/1 '''

y[labels=='fat']=1

''' 拆分训练数据与测试数据 '''

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.2)

''' 使用信息熵作为划分标准,对决策树进行训练 '''

clf = tree.DecisionTreeClassifier(criterion='entropy')

print(clf)

clf.fit(x_train, y_train)

''' 把决策树结构写入文件 '''

with open("tree.dot", 'w') as f:

      f = tree.export_graphviz(clf, out_file=f)

''' 系数反映每个特征的影响力。越大表示该特征在分类中起到的作用越大 '''

print(clf.feature_importances_)

'''测试结果的打印'''

answer = clf.predict(x_train)

print(x_train)

print(answer)

print(y_train)

print(np.mean( answer == y_train))

'''准确率与召回率'''

precision, recall, thresholds = precision_recall_curve(y_train, clf.predict(x_train))

answer = clf.predict_proba(x)[:,1]

print(classification_report(y, answer, target_names = ['thin', 'fat']))

这时候会输出

[ 0.2488562  0.7511438]

array([[  1.6,  60. ],

       [  1.7,  60. ],

       [  1.9,  80. ],

       [  1.5,  50. ],

       [  1.6,  40. ],

       [  1.7,  80. ],

       [  1.8,  90. ],

       [  1.5,  60. ]])

array([ 1.,  0.,  1.,  0.,  0.,  1.,  1.,  1.])

array([ 1.,  0.,  1.,  0.,  0.,  1.,  1.,  1.])

1.0

             precision    recall  f1-score   support

       thin       0.83      1.00      0.91         5

        fat        1.00      0.80      0.89         5

avg / total       1.00      1.00      1.00         8

array([ 0.,  1.,  0.,  1.,  0.,  1.,  0.,  1.,  0.,  0.])

array([ 0.,  1.,  0.,  1.,  0.,  1.,  0.,  1.,  0.,  1.])

可以看到,对训练过的数据做测试,准确率是100%。但是最后将所有数据进行测试,会出现1个测试样本分类错误。

说明本例的决策树对训练集的规则吸收的很好,但是预测性稍微差点。

4 决策树的保存

一棵决策树的学习训练是非常耗费运算时间的,因此,决策树训练出来后,可进行保存,以便在预测新数据时只需要直接加载训练好的决策树即可

本案例的代码中已经决策树的结构写入了tree.dot中。打开该文件,很容易画出决策树,还可以看到决策树的更多分类信息。

本例的tree.dot如下所示:

digraph Tree {

0 [label="X[1] <= 55.0000\nentropy = 0.954434002925\nsamples = 8", shape="box"] ;

1 [label="entropy = 0.0000\nsamples = 2\nvalue = [ 2.  0.]", shape="box"] ;

0 -> 1 ;

2 [label="X[1] <= 70.0000\nentropy = 0.650022421648\nsamples = 6", shape="box"] ;

0 -> 2 ;

3 [label="X[0] <= 1.6500\nentropy = 0.918295834054\nsamples = 3", shape="box"] ;

2 -> 3 ;

4 [label="entropy = 0.0000\nsamples = 2\nvalue = [ 0.  2.]", shape="box"] ;

3 -> 4 ;

5 [label="entropy = 0.0000\nsamples = 1\nvalue = [ 1.  0.]", shape="box"] ;

3 -> 5 ;

6 [label="entropy = 0.0000\nsamples = 3\nvalue = [ 0.  3.]", shape="box"] ;

2 -> 6 ;

}

根据这个信息,决策树应该长的如下这个样子:

 


http://chatgpt.dhexx.cn/article/0tigxWrX.shtml

相关文章

决策树cart算法实战

1、使用决策树预测隐形眼镜类型&#xff0c;隐形眼镜数据集(lenses.csv)是非常著名的数据集&#xff0c;它包含很多患者眼部状况的观察 条件以及医生推荐的隐形眼镜类型。隐形眼镜类型包括硬材质、软材质以及不适合佩戴隐形眼镜。 要求&#xff1a;读取lenses.csv中的隐形眼镜数…

人工智能决策树大作业

人工智能技术: 机器学习之决策树大作业 以西瓜集 2.0 为建模数据&#xff0c;采用交叉验证方法进行数据训练集和验证集的划分&#xff0c;实现决策树 “预剪枝”算法&#xff0c;要求:尽可能充分利用有限的西瓜集 2.0 数据所提供信息&#xff0c;建立泛化能力强的 决策树模型。…

决策树算法:原理与python实现案例

文章目录 决策树算法浅析决策树的介绍决策树最佳划分的度量问题决策树python案例 决策树算法浅析 决策树的介绍 决策树的定义&#xff1a; 决策树是一种逼近离散值目标函数的方法&#xff0c;学习到的函数使用树结构进行表示&#xff0c;完成决策任务。这里决策树可以是分类树…

决策树实例-ID3

决策树-ID3实例 参考书籍&#xff1a; 《机器学习》周志华&#xff0c;第1版 《统计学习方法》李航&#xff0c;第2版 用来记录自己对书中知识的理解&#xff0c;加强自己的理解和记忆&#xff0c;同时提出自己迷惑不解的地方&#xff0c;提高自己编辑的表达能力。 代码参考博…

决策树算法及Python 代码示例

决策树是一种基于树形结构的算法&#xff0c;用于在一系列决策和结果之间建立模型。它通过对特征和目标变量之间的关系进行划分&#xff0c;来预测目标变量的值。 决策树算法示例: 假设我们有一组数据&#xff0c;其中包含天气&#xff0c;温度&#xff0c;湿度和是否出门的特…

决策树一CART算法(第四部分)

决策树一CART算法(第四部分) CART树的剪枝&#xff1a;算法步骤 输入&#xff1a;CART算法生成的决策树。 输出&#xff1a;最优决策树T 设 K 0 &#xff0c; T T 0 K0&#xff0c;TT_0 K0&#xff0c;TT0​ &#xff0c;从完整的决策树出发 ​ k代表迭代次数&#xff0c;先…

决策树算法

决策树 决策树(Decision Tree)首先对数据进行处理,利用归纳算法生成可读的规则和决策树,然后使用决策对新数据进行分析,本质上是通过一系列规则对数据进行分类的过程 决策树是一种典型的分类方法。其中: 每个内部结点表示一个属性上的判断每个分支代表一个判断结果的输出每…

决策树ID3、C4.5和CART算法例子详解

决策树 决策树是附加概率结果的一个树状的决策图&#xff0c;是直观的运用统计概率分析的图法。机器学习中决策树是一个预测模型&#xff0c;它表示对象属性和对象值之间的一种映射&#xff0c;树中的每一个节点表示对象属性的判断条件&#xff0c;其分支表示符合节点条件的对…

决策树算法原理及案例

机器学习在各个领域都有广泛的应用&#xff0c;特别在数据分析领域有着深远的影响。决策树是机器学习中最基础且应用最广泛的算法模型。本文介绍了机器学习的相关概念、常见的算法分类和决策树模型及应用。通过一个决策树案例&#xff0c;着重从特征选择、剪枝等方面描述决策树…

通过实例理解决策树算法(ID3,C4.5,Cart算法)

&#xff08;一&#xff09;实例&#xff1a;使用ID3算法给出“好苹果”的决策树 &#xff08;二&#xff09;决策树的工作原理 我们在做决策树的时候&#xff0c;会经历两个阶段&#xff1a;构造和剪枝。 构造原理——构造的过程就是选择什么属性作为节点的过程&#xff0c;…

数据挖掘之C4.5决策树算法

1.决策树算法实现的三个过程&#xff1a; 特征选择&#xff1a;选择哪些特征作为分类的标准是决策树算法的关键&#xff0c;因此需要一种衡量标准来进行特征的确定&#xff0c;不同的决策树衡量标准不同。例如C4.5决策树就是以信息增益率来作为衡量标准。决策树的生成&#xf…

决策树ID3例题

表格里统计了14天的气象数据&#xff0c;特征属性包括outlook,temperature,humidity,windy&#xff0c;类别属性为是否打球(play),用ID3算法生成决策树。 解答过程&#xff1a;

决策树算法与案例

决策树算法介绍 树模型 决策树&#xff1a;从根节点开始一步步走到叶子节点&#xff08;决策&#xff09;。所有的数据最终都会落到叶子节点&#xff0c;既可以做分类也可以做回归 树的组成 根节点&#xff1a;第一个选择点&#xff1b;非叶子节点与分支&#xff1a;中间过程…

数据挖掘--决策树ID3算法(例题)

决策树分类算法 决策树分类算法通常分为两个步骤&#xff1a;决策树生成和决策树修剪。 决策树生成算法的输入参数是一组带有类别标记的样本&#xff0c;输出是构造一颗决策树&#xff0c;该树可以是一棵二叉树或多叉树。二叉树的内部结点&#xff08;非叶子结点&#xff09;…

决策树算法原理+例题练习

一、决策树的优缺点 优点&#xff1a;计算复杂度不高&#xff0c;输出结果易于理解&#xff0c;对中间值的缺失值不敏感&#xff0c;可以处理不相关特征数据。缺点&#xff1a;可能会产生过度匹配的问题。使用数据类型&#xff1a;数值型和标称型。 二、一个实例 一天&#…

高级管理学:计算题

题1&#xff1a;决策树和期望值 某企业拟开发新产品&#xff0c;现在有两个可行性方案需要决策。 方案一&#xff1a;开发新产品 A&#xff0c;需要追加投资 180 万元&#xff0c;经营期限为 5 年。此间&#xff0c;产品销路好每年可获利 170 万元&#xff1b;销路一般每年可获…

Nikto漏洞扫描工具简介

nikto漏洞扫描工具在我的靶场上测试报告如下&#xff1a; 测试时间会很长&#xff0c;我是在虚拟环境下做的&#xff0c;给的配置不高&#xff0c;吃尽CPU&#xff0c;最后不得不强制关闭虚拟机&#xff0c;通过-o参数将结果输出到文档中。 结果显示&#xff1a; 一些黑客比较感…

wed渗透:记录kali系统下扫描工具nikto的使用

目录 前言1 工具介绍2 使用场景3 使用方法3.1 查看帮助信息3.2 Nikto插件3.3 扫描3.3.1 常规扫描3.3.2 指定端口扫描3.3.3 指定协议扫描3.3.4 指定目录扫描3.3.5 多目标扫描3.3.6 配合namp利用管道输入扫描3.3.7 利用代理扫描 3.4 Nikto扫描过程中的交互参数3.5 修改nikto配置文…

Nikto安装及使用

系统要求如下&#xff08;我自己使用的是linux&#xff0c;其它两个没有研究&#xff09;&#xff1a; 一、安装软件 第一步准备两个软件&#xff0c;如下&#xff1a; 1、nikto-master.zip&#xff08;官网下载地址&#xff1a;https://cirt.net/nikto2&#xff09; 2、libw…

Nikto详细使用教程

Nikto简介 基于perl语言开发的web页面扫描器。其特点扫描全面&#xff0c;速度快。 nikto常用命令 -upodate 升级&#xff0c;更新插件 -host 扫描目标URl -id username:password http认证接口 -list-plugins …