闭着眼学机器学习——决策树分类

引言:
在正文开始之前,首先给大家介绍一个不错的人工智能学习教程:https://www.captainbed.cn/bbs。其中包含了机器学习、深度学习、强化学习等系列教程,感兴趣的读者可以自行查阅。


1. 算法介绍

决策树是一种常用的机器学习算法,用于分类和回归任务。它通过构建一个树状结构来进行决策,每个内部节点代表一个特征或属性,每个叶节点代表一个类别或预测值。决策树的优点是直观易懂,可解释性强,适用于处理各种类型的数据。

2. 算法原理

决策树的构建过程主要基于以下几个步骤:

  1. 特征选择:选择最佳的特征作为当前节点的分裂标准。
  2. 生成子节点:根据选定的特征将数据集分割为子集。
  3. 递归构建:对每个子节点重复步骤1和2,直到满足停止条件。

特征选择通常使用信息增益或基尼不纯度等指标。以信息增益为例,其计算公式如下:

Information Gain = H ( S ) − ∑ i = 1 n ∣ S i ∣ ∣ S ∣ H ( S i ) \text{Information Gain} = H(S) - \sum_{i=1}^n \frac{|S_i|}{|S|} H(S_i) Information Gain=H(S)i=1nSSiH(Si)

其中:

  • H ( S ) H(S) H(S) 是数据集 S S S 的熵
  • S i S_i Si 是按特征分割后的子集
  • H ( S i ) H(S_i) H(Si) 是子集 S i S_i Si 的熵

熵的计算公式为:

H ( S ) = − ∑ i = 1 c p i log ⁡ 2 ( p i ) H(S) = -\sum_{i=1}^c p_i \log_2(p_i) H(S)=i=1cpilog2(pi)

其中 c c c 是类别数量, p i p_i pi 是第 i i i 个类别的概率。

3. 案例分析

我们使用著名的鸢尾花(Iris)数据集来演示决策树分类算法。我们首先加载数据,然后将其分为训练集和测试集。接着,我们创建并训练决策树模型,并使用测试集进行预测。最后,我们评估模型性能并可视化决策树结构。

import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report
import matplotlib.pyplot as plt
from sklearn.tree import plot_tree# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建并训练决策树模型
clf = DecisionTreeClassifier(random_state=42)
clf.fit(X_train, y_train)# 预测
y_pred = clf.predict(X_test)# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"准确率: {accuracy:.2f}")
print("\n分类报告:")
print(classification_report(y_test, y_pred, target_names=iris.target_names))# 可视化决策树
plt.figure(figsize=(20,10))
plot_tree(clf, feature_names=iris.feature_names, class_names=iris.target_names, filled=True)
plt.show()

分类结果:


决策树可视化:

4. 总结

决策树是一种强大而直观的机器学习算法,适用于多种分类任务。在实际应用中,可能还需要考虑决策树的剪枝、随机森林等进阶技术,以进一步提高模型的性能和泛化能力。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解Java之lambda

目录 lambda 引入 语法 函数式接口 lambda表达式的使用 语法精简: 代码示例: 变量捕获 局部变量捕获 成员变量捕获 lambda在集合中的使用 lambda的优缺点 lambda 引入 Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表…

基于SSM的日常饮食健康推荐系统开发

文未可获取一份本项目的java源码和数据库参考。 课题的研究目的和意义 随着互联网的普及与通信技术的发展,现今人们可以通过各种方式在任何时间与地点访问网络,生活之中很多事情可以通过网络足不出户便可实现,例如通过网络购物、缴纳水电费…

短链接在线工具免费的哪个好?

目前市面上的很多短链接都不能用了,这类工具虽然技术含量不算高,但是需要长时间的持续维护,很多个人开发者的平台就坚持不下去了,愿意继续的,基本都是收费了。 所以,今天向大家推荐几款目前市面上很好用的…

五、UI弹窗提示

一、制作弹窗UI 二、创建脚本 1、继承WindowRoot(UI基类) 获取UI上面的组件 2、初始化 将这个文本失活 3、写一个提示出现的方法 这个派生类中,继承了基类的两个方法,设置显示和设置文本 对应基类的这两个方法 将动画赋值给动…

基于django的代理商订单管理系统

基于Django的代理商订单管理系统——高效助力代理商管理 在如今企业业务日益复杂的环境下,如何高效地管理代理商订单成为不可或缺的环节。我们推出了一款基于Django框架的代理商订单管理系统,专为企业的订单管理及返利控制设计,为企业与代理…

Jenkins pipeline语法笔记

Jenkins pipeline 简介Jenkins Pipeline 优势DSL 是什么 pipeline支持两种语法:声明式pipeline语法:Pipelineagent Pipeline 声明式语法DeclarativeenvironmentoptionsparameterstriggerstoolsinputwhenParallel Pipeline Scripted语法创建一个简单的 Pi…

ArrayList和顺序表(上)

1. ArrayList的介绍 在介绍ArrayList之前,我们需要认识一下线性表和顺序表 线性表: 是n个具有相同特性的数据元素的有限序列.常见的线性表:顺序表,链表,栈,队列... 线性表在逻辑上是线性结构,也就是一条连续的直线.但是在物理结构上不一定是连续的,线性表在物理上存储的时候,常…

降噪效果好的头戴式耳机有哪些?四大值得入手的百元降噪耳机盘点

在嘈杂的现代生活中,寻找一片属于自己的宁静空间已成为许多人的追求,头戴式降噪耳机凭借其出色的隔音效果和舒适的佩戴体验,成为了众多消费者的首选, 在通勤路上的喧嚣,还是办公室内的嘈杂,降噪效果好的头…

jmeter在beanshell中使用props.put()方法的注意事项

在jmeter中,通常使用beanshell去处理一些属性的设置和获取的操作,而这些操作也是有一定的规则的。 1. 设置属性时,在属性名上要加双引号,这代表它不是一个需要用var去声明的变量 这种设置属性的方式才是有效可行的,在…

使用HTML、CSS和JavaScript创建图像缩放功能

使用HTML、CSS和JavaScript创建图像缩放功能 在这篇博客文章中,我们将介绍如何使用HTML、CSS和JavaScript创建一个简单的图像缩放功能。这个功能可以增强用户体验,让访问者在点击图像时查看更大的版本。 效果 步骤1:设置HTML结构 首先&…

Pytest基于fixture的参数化及解决乱码问题

我们知道,Pytest是Python技术栈下进行自动化测试的主流测试框架。支持灵活的测试发现、执行策略,强大的Fixture夹具和丰富的插件支持。 除了通过pytest的parametrize标签进行参数化外,我们通过fixture的param参数也可以比较方便地实现参数化…

java对接GPT 快速入门

统一对接GPT服务的Java说明 当前,OpenAI等GPT服务厂商主要提供HTTP接口,这使得大部分Java开发者在接入GPT时缺乏标准化的方法。 为解决这一问题,Spring团队推出了Spring AI ,它提供了统一且标准化的接口来对接不同的AI服务提供商…

记一次有趣的发现-绕过堡垒机访问限制

前言 在某一次对设备运维管理的时候,发现的某安全大厂堡垒机设备存在绕过访问限制的问题,可以直接以低权限用户访问多个受控系统,此次发现是纯粹好奇心驱使下做的一个小测试压根没用任何工具。因为涉及到了很多设备和个人信息,所以…

rom定制系列------小米6x_MIUI14_安卓13刷机包修改写入以及功能定制 界面预览

在接待一些定制化系统中。有很多工作室或者一些特殊行业的友友需要在已有固件基础上简略修改其中的功能。方便使用。例如usb调试默认开启。usb安装设置以及usb安装与内置删减一些app的定制服务。今天给友友预览其中小米6X此款机型定制相关的一些界面与功能演示。 定制机型以及…

Web自动化Demo-Go+Selenium

1.新建工程 使用GoLand新建工程如下: 打开终端输入如下命令安装Selenium go get -u github.com/tebeka/selenium 2.编写代码 package mainimport ("fmt""github.com/tebeka/selenium""log""time" )const (chromeDriver…

【AUTOSAR 基础软件】ComM模块详解(通信管理)

文章包含了AUTOSAR基础软件(BSW)中ComM模块相关的内容详解。本文从AUTOSAR规范解析,ISOLAR-AB配置以及模块相关代码分析三个维度来帮读者清晰的认识和了解ComM这一基础软件模块。文中涉及的ISOLAR-AB配置以及模块相关代码都是依托于ETAS提供的…

2025选题推荐|基于微信小程序的高校就业招聘系统

作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,…

MFC框架制作的exe,当界面增加或者删除组件后,需要如何修改Dlg.cpp?

使用Microsoft Foundation Classes(MFC)框架制作的应用程序中,当界面中增加或删除组件后,需要对Dlg.cpp文件进行相应的修改,以确保程序能够正确地初始化和管理这些组件。 1. 更新资源文件 (.rc) 首先,确保你…

Elasticsearch学习笔记(六)使用集群令牌将新加点加入集群

随着业务的增长,陆续会有新的节点需要加入集群。当我们在集群中的某个节点上使用命令生成令牌时会出现报错信息。 # 生成令牌 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node出现报错信息: Unable to create enrollment…

【React】使用脚手架或Vite包两种方式创建react项目

1.使用脚手架搭建React项目: 在终端窗口运行如下命令即可: npx create-react-app react-basic(创建的文件目录) npx:Node.js工具命令,用于查找并执行后续的包命令。 2.使用Vite包创建React项目: 在终端窗口运行如…