生信机器学习入门4 - 构建决策树(Decision Tree)和随机森林(Random Forest)分类器

机器学习文章回顾

生信机器学习入门1 - 数据预处理与线性回归(Linear regression)预测

生信机器学习入门2 - 机器学习基本概念

生信机器学习入门3 - Scikit-Learn训练机器学习分类感知器

生信机器学习入门4 - scikit-learn训练逻辑回归(LR)模型和支持向量机(SVM)模型

1. 决策树(Decision Tree)

决策树,是一种以树形数据结构来展示决策规则和分类结果的模型,属于归纳学习算法,其重点是将看似无序、杂乱的已知数据转化成可以预测未知数据的树状模型,每一条从根结点(对最终分类结果贡献最大的属性)到叶子结点(最终分类结果)的路径都代表一条决策的规则。

决策树工作流:
决策树工作流

1.1 概率与熵之间的关系图

# 定义了一个函数 entropy 来计算给定概率 p 的熵,并使用这个函数来绘制概率与熵之间的关系图
def entropy(p):# 熵的计算公式为 −plog⁡2(p)−(1−p)log⁡2(1−p)return - p * np.log2(p) - (1 - p) * np.log2((1 - p))# 生成步长为0.1的数组
x = np.arange(0.0, 1.0, 0.01)# 使用列表推导式计算每个概率值 p 的熵
# 如果 p 为 0,则熵值为 None,因为 log⁡2(0)log2​(0) 是未定义的,会导致数学错误
ent = [entropy(p) if p != 0 else None for p in x]plt.ylabel('Entropy')
plt.xlabel('Class-membership probability p(i=1)')
plt.plot(x, ent)
plt.show()

概率与熵之间的关系图

1.2 构建决策树(Decision Tree)分类器

使用 scikit-learn 库中的 DecisionTreeClassifier 来训练一个决策树模型。

from sklearn.tree import DecisionTreeClassifier
from matplotlib.colors import ListedColormap
import matplotlib.pyplot as plt
from distutils.version import LooseVersion# 参数说明
# criterion='gini':设置决策树在每个节点上进行分割时使用基尼不纯度(Gini impurity)作为衡量标准,
# 基尼不纯度是一种衡量一个节点内样本类别分布不均匀性的指标。# max_depth=4:设置决策树的最大深度为 4。限制树的深度可以防止过拟合,
# 即模型在训练数据上表现很好,但在未见过的数据上表现不佳。# random_state=1:设置随机数生成器的种子,确保结果的可复现性。tree_model = DecisionTreeClassifier(criterion='gini', max_depth=4, random_state=1)
tree_model.fit(X_train, y_train)# 使用 np.vstack 函数将训练数据集 X_train 和测试数据集 X_test 垂直堆叠起来,形成一个更大的特征矩阵 X_combined
X_combined = np.vstack((X_train, X_test))
y_combined = np.hstack((y_train, y_test))def plot_decision_regions(X, y, classifier, test_idx=None, resolution=0.02):# 绘图图形和颜色生成markers = ('o', 's', '^', '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() + 1x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution),np.arange(x2_min, x2_max, resolution))lab = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)lab = lab.reshape(xx1.shape)plt.contourf(xx1, xx2, lab, 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=f'Class {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='none',edgecolor='black',alpha=1.0,linewidth=1,marker='o',s=100, label='Test set')        plot_decision_regions(X_combined, y_combined, classifier=tree_model,test_idx=range(105, 150))plt.xlabel('Petal length [cm]')
plt.ylabel('Petal width [cm]')
plt.legend(loc='upper left')
plt.tight_layout()
plt.show()

分类结果

1.3 决策树模型可视化

from sklearn import treefeature_names = ['Sepal length', 'Sepal width','Petal length', 'Petal width']# 使用 scikit-learn 库中的 tree 模块来绘制训练好的决策树模型 tree_model 的可视化图形
tree.plot_tree(tree_model,feature_names=feature_names,filled=True)plt.savefig('tree_model.png')
plt.show()

决策树模型 tree_model 的可视化

2.2 构建随机森林(Random Forest)分类器

随机森林由众多独立的决策树组成(数量从几十至几百不等), 它通过汇总所有决策树的预测结果来形成最终预测,即通过对所有树的预测进行投票或加权平均计算而获得。

使用 scikit-learn 库中的 RandomForestClassifier 类来训练一个随机森林模型。

from sklearn.ensemble import RandomForestClassifier"""
参数:
n_estimators=25:设置随机森林中决策树的数量为 25,
n_estimators 参数控制随机森林的“森林”中有多少棵树;更多的树通常会提高模型的性能,但同时也会增加计算成本。random_state=1:设置随机数生成器的种子,确保结果的可复现性。n_jobs=2:设置并行运行的作业数,这个参数控制可以并行运行多少棵树的构建过程。
"""forest = RandomForestClassifier(n_estimators=25, random_state=1,n_jobs=2)
forest.fit(X_train, y_train)plot_decision_regions(X_combined, y_combined, classifier=forest, test_idx=range(105, 150))plt.xlabel('Petal length [cm]')
plt.ylabel('Petal width [cm]')
plt.legend(loc='upper left')
plt.tight_layout()
plt.show()

分类结果

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

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

相关文章

第五周做题总结_数据结构_队列与应用

id:43 A. DS队列之银行排队 题目描述 银行营业大厅共服务3种客户&#xff0c;类型为A\B\C&#xff0c;大厅分别设置了3个窗口分别服务三种客户&#xff0c;即每个窗口只服务一种客户。现有一批客户来银行办理业务&#xff0c;每个客户都有类型和办理业务时间。每个窗口按照客…

Servlet详细讲解(一篇就够)

目录 一、Servlet 1.1 Servlet介绍 1.2 HTTP 1.2.1 在http请求中有请求报文 1.2.2 在http响应中有响应报文 1.3 GET和POST 1.3.1 GET 1.3.2 POST 二、第一个Servlet程序[重点] 2.1 创建web项目 2.2 pom依赖 2.3 编写Servlet 2.4 配置Servlet 2.5 部署项目 2.6 启…

C++进阶知识2 多态

多态 1. 多态的概念2. 多态的定义及实现2.1 多态的构成条件2.1.2 虚函数2.1.3 虚函数的重写/覆盖2.1.5 虚函数重写的⼀些其他问题2.1.6 override和final关键字2.1.7 重载/重写/隐藏的对⽐ 3. 多态的原理3.2 多态的原理3.2.1 多态是如何实现的3.2.2 动态绑定与静态绑定3.2.3 虚函…

PL/SOL 连接提示 Initialization error 解决方法

问题 测试连接数据库报错&#xff0c;提示如下 解决方法 1、OCI 库输入的时候&#xff0c;路径两遍有" " 2、Instant Client 和 PL/SOL Developer 位数版本不一致 要么都是x64位&#xff0c;要么都是x86位&#xff08;32位&#xff09;&#xff0c;以下为下载链接…

算力运力解决方案:构建未来智算新生态

中国联通国际有限公司产品之算力运力解决方案&#xff1a;构建未来智算新生态 在当今这个数据爆炸、技术日新月异的时代&#xff0c;算力已成为推动社会进步和产业升级的关键力量。中国联通国际有限公司紧跟时代步伐&#xff0c;依托其强大的网络资源和深厚的技术积累&#xf…

63.5 注意力提示_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录注意力提示生物学中的注意力提示查询、键和值注意力的可视化使用 show_heatmaps 显示注意力权重代码示例 代码解析结果 小结练习 注意力提示 &#x1f3f7;sec_attention-cues 感谢读者对本书的关注&#xff0c;因为读者的注意力是一种稀缺…

此连接非私人连接

当你手机浏览器输入网站打开提示“此连接非私人连接&#xff0c;此网站可能在冒充来窃取你的个人或财务信息。你应回到之前的页面”这是因为该网站的SSL数字证书到期导致&#xff0c;需要此网站的管理员重新申请数字证书替换之前的文件才可以实现。 注意&#xff1a;如果你不是…

java 洛谷题单【数据结构1-1】线性表

P3156 【深基15.例1】询问学号 解题思路 很简单的一道题&#xff0c;但是由于n、m的数据很大&#xff0c;要用Java的I/O流读入和输出。 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.StreamTokenizer; impo…

二维数组的存放

今天我水的文章是二维数组的存放 二维数组的存放方式其实和一维数组没有区别&#xff0c;但如果想要更直观的了解&#xff0c;我们可以把它们的地址打印出来。 代码如下&#xff1a; #include <stdio.h> int main() {int arr[3][3];//二维数组&#xff0c;int数组类型…

企业级移动门户的多样化选择:为数字化转型赋能

在当今数字化转型的浪潮中&#xff0c;企业级移动门户&#xff08;Enterprise Mobile Portal&#xff09;被广泛应用于企业的日常运营中。它们为企业提供了一个集中、统一的移动应用与数据访问平台&#xff0c;帮助提升工作效率、增强实时沟通并改善员工体验。随着企业对灵活性…

Datawhale Leecode基础算法篇 task05:位运算

官方学习文档&#xff1a;datawhalechina 往期task01&#xff1a;枚举算法链接&#xff1a;Datawhale Leecode基础算法篇 task01&#xff1a;枚举算法 往期task02&#xff1a;递归算法and分治算法&#xff1a;Datawhale Leecode基础算法篇 task02&#xff1a;递归算法and分治…

STM32编码器接口笔记

1. 引言 在现代控制系统中&#xff0c;编码器扮演着非常重要的角色。它就像一个精密的测量工具&#xff0c;可以告诉我们机械部件的位置和运动状态。在STM32微控制器中&#xff0c;编码器接口可以轻松地与各种编码器连接&#xff0c;实现精确的控制。我将在这里探讨STM32编码器…

【FaceFusion3.0.0】全新升级,重磅发布!

FaceFusion 3.0.0 版本引入了许多新特性和改进&#xff0c;其中包括&#xff1a; 重新设计架构&#xff0c;使所有操作都作为“任务”进行处理。在面部交换功能中引入像素增强(pixel boost)。向面部检测器添加多角度处理功能。引入年龄修正处理器(age modifier processor)。引…

Kafak入门技术详解

抱歉&#xff0c;没有太多的时间进行详细校对 目录 一、Kafka简介 1.消息队列 1.1为什么需要消息队列 1.2消息队列 1.3消息队列的分类 1.4P2P和发布订阅MQ的比较 1.5消息系统的使用场景 1.6常见的消息系统 2.Kafka简介 2.1简介 2.2设计目标 2.3 kafka核心的概念 二…

Grafana指标汉化

1、Grafana解压 目录 conf 2、找到&#xff1a;defaults.ini 3、打开defaults.ini &#xff0c;搜索&#xff1a;en-US 4.重新运行 &#xff1a;grafana-server.exe

js中的深拷贝与浅拷贝 手写深拷贝代码

1 什么是深拷贝和浅拷贝&#xff1f; 深拷贝和浅拷贝都是复制对象时常用的两种方式&#xff0c;区别在于对于嵌套对象的处理&#xff0c;浅拷贝只复制属性的第一层属性&#xff0c;双方修改嵌套对象将会互相影响。深拷贝会递归复制每一层的属性&#xff0c;修改任意一方互不影响…

谷歌地图 | 3D 地图新功能:开发更简单,体验更丰富

今年早些时候在 Google I/O 大会上推出了地图 JavaScript API 中的逼真 3D 地图。从那时起&#xff0c;谷歌地图一直受到大家对 3D 地图的热烈反响&#xff0c;并从中汲取了大量灵感。9月25日&#xff0c;谷歌地图宣布实验性 3D 地图迎来了重大更新&#xff0c;这将使开发者更轻…

深度学习模型可视化工具 Netron 使用教程

Netron 介绍 Netron 是一个用于可视化机器学习模型、深度学习模型、神经网络、图模型&#xff08;例如用于计算机视觉的 ONNX、Caffe、TensorFlow Lite、TensorFlow.js、Keras、Darknet、TVM、PyTorch、TorchScript、Core ML、ML.NET、NNEF、PaddlePaddle、OpenVINO、Arm NN等…

2024年9月25日--- Spring-IOC 1

一 Spring的概要 1.1 简介 Spring&#xff0c;春天的意思&#xff0c;意指给软件行业带来春天。2002年&#xff0c;Rod Jahnson首次推出了Spring框架雏形interface21框架。2004年3月24日&#xff0c;Spring框架以interface21框架为基础&#xff0c;经过重新设计&#xff0c;发…

广州数字孪生工业互联网可视化技术,赋能新型工业化智能制造工厂

在广州&#xff0c;特别是在工业互联网领域&#xff0c;数字孪生技术正逐步成为赋能新型工业化智能制造工厂的重要驱动力。数字孪生工业互联网技术的引入&#xff0c;不仅为传统制造业带来前所未有的变革&#xff0c;更为广州的工业发展注入新的活力与可能。 在智能制造工厂的…