机器学习与深度学习——通过决策树算法分类鸢尾花数据集iris求出错误率画出决策树并进行可视化

news2024/11/26 13:44:05

什么是决策树?

决策树是一种常用的机器学习算法,它可以对数据集进行分类或回归分析。决策树的结构类似于一棵树,由节点和边组成。每个节点代表一个特征或属性,每个边代表一个判断或决策。从根节点开始,根据特征的不同取值,不断向下遍历决策树,直到达到叶子节点,即最终的分类或回归结果。

在分类问题中,决策树通过将数据集分成不同的类别来进行分类。在回归问题中,决策树通过将数据集分成不同的区域来进行回归分析。

决策树的优点包括易于理解和解释、能够处理具有非线性关系的数据、对缺失数据具有容忍性等。然而,决策树也存在一些缺点,例如容易过拟合、对噪声数据敏感等。为了解决这些问题,常常需要对决策树进行剪枝或使用集成学习算法如随机森林来提高预测准确性。

两个目标

1、通过决策树算法对iris数据集前两个维度的数据进行模型训练并求出错误率,最后进行可视化展示数据区域划分。
2、通过决策树算法对iris数据集总共四个维度的数据进行模型训练并求出错误率。

基本思路:

1、先载入iris数据集 Load Iris data
2、分离训练集和设置测试集split train and test sets
3、使用决策树模型进行训练Train using clf
4、画出决策树
5、然后二维进行可视化处理Visualization
6、最后通过绘图决策平面plot decision plane

程序代码

1、通过决策树算法对iris数据集前两个维度的数据进行模型训练并求出错误率,最后进行可视化展示数据区域划分:

from sklearn import datasets
import numpy as np
### Load Iris data 加载数据集
iris = datasets.load_iris()
x = iris.data[:,:2]#前2个维度
# x = iris.data
y = iris.target
print("class labels: ", np.unique(y))
x.shape
y.shape

### split train and test sets
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, stratify=y)
x_train.shape
print("Labels count in y:", np.bincount(y))
print("Labels count in y_train:", np.bincount(y_train))
print("Labels count in y_test:", np.bincount(y_test))

### Train using clf 决策树模型
from sklearn import tree # 决策树算法
clf = tree.DecisionTreeClassifier() # 决策树分类器 # 设置决策树分类器  选择用信息熵作为测量标准
clf = clf.fit(x_train,y_train)  #训练模型
pred_test=clf.predict(x_test)#预测模型
err_num = (pred_test != y_test).sum()
rate = err_num/y_test.size
print("Misclassfication num: {}\nError rate: {}".format(err_num, rate))#计算错误率

#画出决策树
import matplotlib.pyplot as plt
plt.figure(dpi=200)
# feature_names=iris.feature_names设置决策树中显示的特征名称
tree.plot_tree(clf,feature_names=iris.feature_names,class_names=iris.target_names)

### Visualization
from matplotlib.colors import ListedColormap
import matplotlib.pyplot as plt
def plot_decision_regions(x, y, classifier, test_idx=None, resolution=0.02):
    markers = ('s', 'x', 'o', '^', 'v')
    colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')
    cmap = ListedColormap(colors[:len(np.unique(y))])
    x1_min, x1_max = x[:, 0].min() - 1, x[:, 0].max() + 1
    x2_min, x2_max = x[:, 1].min() - 1, x[:, 1].max() + 1
    xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution),
    np.arange(x2_min, x2_max, resolution))
    Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)
    Z = Z.reshape(xx1.shape)
    plt.contourf(xx1, xx2, Z, alpha=0.3, cmap=cmap)
    plt.xlim(xx1.min(), xx1.max())
    plt.ylim(xx2.min(), xx2.max())
    for idx, cl in enumerate(np.unique(y)):
        plt.scatter(x=x[y == cl, 0], y=x[y == cl, 1], alpha=0.8, c=colors[idx], marker=markers[idx], label=cl, edgecolor='black')
    if test_idx:
        x_test, y_test = x[test_idx, :], y[test_idx]
        plt.scatter(x_test[:, 0], x_test[:, 1], c=colors[4], edgecolor='black', alpha=1.0, linewidth=1, marker='.', s=100, label='test set')
        
#### plot decision plane
x_combined_std = np.vstack((x_train, x_test))
y_combined = np.hstack((y_train, y_test))
plot_decision_regions(x_combined_std, y_combined,
classifier=clf, test_idx=range(105,150))
plt.xlabel('petal length [standardized]')
plt.ylabel('petal width [standardized]')
plt.legend(loc='upper left')
plt.tight_layout()
plt.show()

运行截图
在这里插入图片描述

在这里插入图片描述

2、通过决策树算法对iris数据集总共四个维度的数据进行模型训练并求出错误率:

from sklearn import datasets
import numpy as np
iris = datasets.load_iris()
x = iris.data[:,:4]#前4个维度
# x = iris.data
y = iris.target
print("class labels: ", np.unique(y))
x.shape
y.shape

### split train and test sets 分割数据集和设置测试集
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, stratify=y)
x_train.shape
print("Labels count in y:", np.bincount(y))
print("Labels count in y_train:", np.bincount(y_train))
print("Labels count in y_test:", np.bincount(y_test))

### Train using clf 决策树模型
from sklearn import tree # 决策树算法
clf = tree.DecisionTreeClassifier(criterion="entropy") # 决策树分类器 # 设置决策树分类器  选择用信息熵作为测量标准
clf = clf.fit(x_train,y_train)  #训练模型
pred_test=clf.predict(x_test)#预测模型
err_num = (pred_test != y_test).sum()
rate = err_num/y_test.size
print("Misclassfication num: {}\nError rate: {}".format(err_num, rate))

#画决策树图
import matplotlib.pyplot as plt
plt.figure(dpi=200)
# feature_names=iris.feature_names设置决策树中显示的特征名称
tree.plot_tree(clf,feature_names=iris.feature_names,class_names=iris.target_names)

代码运行截图

在这里插入图片描述

在这里插入图片描述

决策树算法既可以做分类也可以做回归,决策树也存在一些缺点,例如容易过拟合、对噪声数据敏感等。为了解决这些问题,我们可以对决策树进行剪枝或使用集成学习算法如随机森林来提高预测准确性。

过拟合是指模型在训练数据上表现很好,但在测试数据上表现不佳的现象。以下是一些解决决策树算法过拟合问题的方法:

  1. 剪枝:决策树剪枝是一种常用的方法,用于减少决策树的复杂度并避免过拟合。常见的剪枝方法包括预剪枝和后剪枝。预剪枝是在构建树时停止拆分某些节点,后剪枝是在构建完整的树之后,再去掉一些子树。

  2. 正则化:与其他机器学习算法一样,决策树也可以使用正则化技术来防止过拟合。例如,可以使用L1或L2正则化来约束树的复杂度。

  3. 随机化:通过引入随机化,可以减少决策树的方差并提高模型的鲁棒性。例如,可以在构建树时随机选择特征,而不是根据特定的规则进行选择。

  4. 集成学习:将多个决策树组合成一个集成模型,例如随机森林和梯度提升树等。这种方法可以通过减少单个决策树的方差来提高整体模型的泛化性能。

  5. 数据扩充:通过增加数据样本数量或改变数据样本的特征值,可以减少过拟合。例如,可以使用数据增强技术,如旋转、平移和缩放等来生成更多的训练样本。

祝各位五一劳动节快乐!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/480080.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

list的使用介绍---C++

一、list简介 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。…

计算机网络第一章(谢希仁第8版学习)

作者:爱塔居 专栏:计算机网络 作者简介:大三学生,希望和大家一起加油 文章目录 目录 文章目录 一、网络、互连网、互联网(因特网)的概念 二、因特网的组成 三、交换方式 3.1 电路交换 3.2 分组交换 3.3 电路…

详解c++---list介绍

目录标题 list介绍list定义list遍历list数据插入push_backpush_frontinsert list删除pop_backpop_fronterase list排序list去重list合并list转移list其他函数emptysizefrontbackassignswapresizeclear list排序效率问题 list介绍 list是可以在常数范围内在任意位置进行插入和删…

【Java笔试强训 22】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥小易的升…

【Java笔试强训 21】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥 洗牌 &…

免费搭建Plex家庭影音中心 - 打造超级多媒体中心【公网远程访问】

文章目录 1.前言2. Plex网站搭建2.1 Plex下载和安装2.2 Plex网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 用手机或者平板电脑看视频,已经算是生活中稀松平常的场景了,特别是各…

java+jsp企业物流货运快递管理系统servlet

功能需求具体描述: (1)用户功能模块包括用户登录注册,用户信息的修改,用户发布货物信息,给客服人员留言,对运输公司进行评价。 (2)企业功能模块包括企业注册登录,企业信息的修改,受理用户发布的…

c#笔记-代码格式

格式 为了让编译器能看懂。我们编写的源码必须符合一定的规范。 区分大小写 c#是大小写敏感语言。A1和a1是不同的东西。 不区分空白字符 c#对空白字符(空格,制表符,换行)不敏感。只要不截断单词,可以任意地使用空…

Java 基础进阶篇(二)—— 面向对象的三大特征之二:继承

文章目录 一、继承概述二、内存运行原理 ★三、继承的特点四、继承后:成员变量和方法的访问特点五、继承后:方法重写六、继承后:子类构造器的特点七、继承后:子类构造器访问父类有参构造器八、this、super 总结 一、继承概述 Jav…

TiDB实战篇-TiDB集群常用的监控指标

TiDB Server相关指标 Duration(延迟) 总体延迟 SQL不同的类型延迟 不同实例延迟 QPS(每秒钟查询次数) 总览 CPS(一次请求多个sql,上面的QPS每一次就是一个记录) 事务相关 延迟 影响性能的大事务 CPU 内存(下图…

面试官:谈谈你对死锁的理解

1. 什么是死锁 比如上一次讲到 synchronized 的时候,一个线程,对同一个对象连续加锁两次,如果出现阻塞等待,代表这个锁是不可重入锁,这样的线程,也就称为死锁! 一旦程序进入死锁了就会导致线程僵…

PromQL,让你轻松实现监控可视化!快来了解一下吧!

Prometheus 中的一些关键设计,比如注重标准和生态、监控目标动态发现机制、PromQL等。 PromQL 是 Prometheus 的查询语言,使用灵活方便,但很多人不知道如何更好利用它,发挥不出优势。 PromQL主要用于时序数据的查询和二次计算场…

【Docker】4、Docker 数据卷

目录 一、数据卷介绍二、数据卷相关命令三、创建一个数据卷,并查看数据卷在宿主机的目录位置四、数据卷挂载到容器五、数据卷挂载练习(MySQL)(1) 加载 MySQL 镜像(2) 根据镜像创建容器 一、数据卷介绍 🎄 数据卷(volum…

Lychee图床 - 本地配置属于自己的相册管理系统并远程访问

文章目录 1.前言2. Lychee网站搭建2.1. Lychee下载和安装2.2 Lychee网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 图床作为图片集中存放的服务网站,可以看做是云存储的一部分,既可…

HCIA-RS实验-路由配置-配置RIPv1 和RIPv2

书接上回。。。这篇主要以实验为主,实验的主要目标也是理解RIP路由协议的防环机制 ,掌握RIPv1和v2的配置方法;大致拓扑图如下: 拓扑图: 配置对应的IP: R1.2.3 测试R1与R2间的连通性。 配置IP后测试连通性…

设计模式——设计模式简介和七大原则

导航: 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线设计模式牛客面试题 目录 一、通过经典面试题掌握重点 二、设计模式的目的和核心原则 三、设计模式七大原则 3.1 单一职责原则(Single Respo…

Linux 安装 NFS 实现文件目录共享

一、背景介绍 项目中,之前是单节点部署服务,关于文件的上传和下载,只要配置好路径即可。 而当集群化部署后,就会有问题。比如:文件上传的时候,访问的是主机1,而想要现在文件的时候&#xff0c…

【MST】ABC235 E - MST + 1

一开始想的是分类讨论,看那条边加了之后成不成环,如果不成环且权值在前n-1,则一定在MST里,不在前n-1则不在MST里;如果成环了,如果权值不在前n-1,则不在MST里,如果权值在前n-1&#x…

spark 数据的加载和保存(Parquet、JSON、CSV、MySql)

spark数据的加载和保存 SparkSQL 默认读取和保存的文件格式为 parquet 1.加载数据 spark.read.load 是加载数据的通用方法 scala> spark.read. csv format jdbc json load option options orc parquet schema table text textFile 如果读取不同格式的数据,可以…

docker安装fastdfs

1 拉取镜像 docker pull morunchang/fastdfs如果网速下载慢,可以参考资料文件夹中给大家导出的镜像包上传到 Linux服务器上,通过docker load -i my_fdfs.tar 加载镜像。 使用 docker images查看是否成功 2 运行tracker docker run -d --name tracker -…