当前位置: 首页 > news >正文

数据分享|R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病...

全文链接:http://tecdat.cn/?p=23061

这个数据集(查看文末了解数据免费获取方式)可以追溯到1988年,由四个数据库组成。克利夫兰、匈牙利、瑞士和长滩。"目标 "字段是指病人是否有心脏病。它的数值为整数,0=无病,1=有病点击文末“阅读原文”获取完整代码数据

数据集信息:

目标:

主要目的是预测给定的人是否有心脏病,借助于几个因素,如年龄、胆固醇水平、胸痛类型等。

我们在这个问题上使用的算法是:

  • 二元逻辑回归

  • Naive Bayes算法

  • 决策树

  • 随机森林

相关视频

数据集的描述:

该数据有303个观察值和14个变量。每个观察值都包含关于个人的以下信息。

  • 年龄:- 个人的年龄,以年为单位

  • sex:- 性别(1=男性;0=女性)

  • cp - 胸痛类型(1=典型心绞痛;2=非典型心绞痛;3=非心绞痛;4=无症状)。

  • trestbps--静息血压

  • chol - 血清胆固醇,单位:mg/dl

  • fbs - 空腹血糖水平>120 mg/dl(1=真;0=假)

  • restecg - 静息心电图结果(0=正常;1=有ST-T;2=肥大)

  • thalach - 达到的最大心率

  • exang - 运动诱发的心绞痛(1=是;0=否)

  • oldpeak - 相对于静止状态,运动诱发的ST压低

  • slope - 运动时ST段峰值的斜率(1=上斜;2=平坦;3=下斜)

  • ca - 主要血管的数量(0-4),由Flourosopy着色

  • 地中海贫血症--地中海贫血症是一种遗传性血液疾病,会影响身体产生血红蛋白和红细胞的能力。1=正常;2=固定缺陷;3=可逆转缺陷

  • 目标--预测属性--心脏疾病的诊断(血管造影疾病状态)(值0=<50%直径狭窄;值1=>50%直径狭窄)

在Rstudio中加载数据

heart<-read.csv("heart.csv",header = T)

header = T意味着给定的数据有自己的标题,或者换句话说,第一个观测值也被考虑用于预测。

head(heart)

outside_default.png

当我们想查看和检查数据的前六个观察点时,我们使用head函数。

tail(heart)

outside_default.png

显示的是我们数据中最后面的六个观察点

colSums(is.na(heart))

outside_default.png

这个函数是用来检查我们的数据是否包含任何NA值。
如果没有发现NA,我们就可以继续前进,否则我们就必须在之前删除NA。

检查我们的数据结构

str(heart)

outside_default.png

查看我们的数据摘要

summary(heart)

outside_default.png

通过观察以上的总结,我们可以说以下几点

  • 性别不是连续变量,因为根据我们的描述,它可以是男性或女性。因此,我们必须将性别这个变量名称从整数转换为因子。

  • cp不能成为连续变量,因为它是胸痛的类型。由于它是胸痛的类型,我们必须将变量cp转换为因子。

  • fbs不能是连续变量或整数,因为它显示血糖水平是否低于120mg/dl。

  • restecg是因子,因为它是心电图结果的类型。它不能是整数。所以,我们要把它转换为因子和标签。

  • 根据数据集的描述,exang应该是因子。心绞痛发生或不发生。因此,将该变量转换为因子。

  • 斜率不能是整数,因为它是在心电图中观察到的斜率类型。因此,我们将变量转换为因子。

  • 根据数据集的描述,ca不是整数。因此,我们要将该变量转换为因子。

  • thal不是整数,因为它是地中海贫血的类型。因此,我们将变量转换为因子。

  • 目标是预测变量,告诉我们这个人是否有心脏病。因此,我们将该变量转换为因子,并为其贴上标签。

根据上述考虑,我们对变量做了一些变化

#例如
sex<-as.factor(sex)
levels(sex)<-c("Female","Male")

检查上述变化是否执行成功

str(heart)

outside_default.png

summary(heart)

bc3cfaa1c09265b015898de294b25fb1.png

EDA

EDA是探索性数据分析(Exploratory Data Analysis)的缩写,它是一种数据分析的方法/哲学,采用各种技术(主要是图形技术)来深入了解数据集。

对于图形表示,我们需要库 "ggplot2"

library(ggplot2)
ggplot(heart,aes(x=age,fill=target,color=target)) + geom_histogram(binwidth = 1,color="black") + labs(x = "Age",y = "Frequency", title = "Heart Disease w.r.t. Age")

72556361f2545f7355578e535a109c60.png

我们可以得出结论,与60岁以上的人相比,40至60岁的人患心脏病的概率最高。

table <- table(cp)pie(table)

1accfa6610c110aa67b5f3c46fc2aac4.png

我们可以得出结论,在所有类型的胸痛中,在个人身上观察到的大多数是典型的胸痛类型,然后是非心绞痛。


点击标题查阅往期内容

7a047a55f465ee1f919b1103c9ade342.jpeg

R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测

outside_default.png

左右滑动查看更多

outside_default.png

01

4242e41c3a8d42f636b5aa744a1a054b.png

02

4e8dc976f4741c7b6250909e4273ab10.png

03

6ee71d50f348834d9372d2c94ad01914.png

04

909dc75e996b7a0f04dd8cbf61e7c2c7.png

执行机器学习算法

Logistic回归

首先,我们将数据集分为训练数据(75%)和测试数据(25%)。

set.seed(100) 
#100用于控制抽样的permutation为100. 
index<-sample(nrow(heart),0.75*nrow(heart))

在训练数据上生成模型,然后用测试数据验证模型。

glm(family = "binomial")
# family = " 二项式 "意味着只包含两个结果。

为了检查我们的模型是如何生成的,我们需要计算预测分数和建立混淆矩阵来了解模型的准确性。

pred<-fitted(blr)
# 拟合只能用于获得生成模型的数据的预测分数。

339643331ef78d456df089ed7ecd6a85.png

我们可以看到,预测的分数是患心脏病的概率。但我们必须找到一个适当的分界点,从这个分界点可以很容易地区分是否患有心脏病。

为此,我们需要ROC曲线,这是一个显示分类模型在所有分类阈值下的性能的图形。它将使我们能够采取适当的临界值。

pred<-prediction(train$pred,train$target)
perf<-performance(pred,"tpr","fpr")
plot(perf,colorize = T,print.cutoffs.at = seq(0.1,by = 0.1))

c03272a22141a6f3c81e5005c982d9da.png

通过使用ROC曲线,我们可以观察到0.6具有更好的敏感性和特异性,因此我们选择0.6作为区分的分界点。

pred1<-ifelse(pred<0.6,"No","Yes")

936e1107326648f91c718918563cad20.png

# 训练数据的准确性
acc_tr

9be09304e512b11f25364af53ecb3a1c.png

从训练数据的混淆矩阵中,我们知道模型有88.55%的准确性。

现在在测试数据上验证该模型

predict(type = "response")
## type = "response "是用来获得患有心脏病的概率的结果。
head(test)

2cb8fcb0647de39afd1fac6a02cb8a82.png

我们知道,对于训练数据来说,临界点是0.6。同样地,测试数据也会有相同的临界点。

confusionMatrix((pred1),target)

b6dc005e6f90eb902de0b1016f86feea.png

#测试数据的准确性.

1d85e6ba177ebb7cd739b5e83bded90d.png

检查我们的预测值有多少位于曲线内

auc@y.values

27c2cb4f298b102f2b494d533f99d194.png

我们可以得出结论,我们的准确率为81.58%,90.26%的预测值位于曲线之下。同时,我们的错误分类率为18.42%。

Naive Bayes算法

在执行Naive Bayes算法之前,需要删除我们在执行BLR时添加的额外预测列。

#naivebayes模型
nB(target~.)

用训练数据检查模型,并创建其混淆矩阵,来了解模型的准确程度。

predict(train)
confMat(pred,target)

b511b0beac24866ad89c7abbab25b8a0.png

808daa9f31a1bfc7fa0da26ab732c758.png

我们可以说,贝叶斯算法对训练数据的准确率为85.46%。

现在,通过预测和创建混淆矩阵来验证测试数据的模型。

Matrix(pred,target)

0abfb75b4abecfa9af6f6d1c8d9aa01d.png

3191daa1114c60744789802a5ba260e5.png

我们可以得出结论,在Naive Bayes算法的帮助下生成的模型准确率为78.95%,或者我们也可以说Naive Bayes算法的错误分类率为21.05%。

决策树

在实施决策树之前,我们需要删除我们在执行Naive Bayes算法时添加的额外列。

train$pred<-NULL

rpart代表递归分区和回归树

当自变量和因变量都是连续的或分类的时候,就会用到rpart。

rpart会自动检测是否要根据因变量进行回归或分类。

实施决策树

plot(tree)

189a343a5ce8153e7e20af723e0c7bb9.png

在决策树的帮助下,我们可以说所有变量中最重要的是CP、CA、THAL、Oldpeak。

让我们用测试数据来验证这个模型,并找出模型的准确性。

conMat(pred,targ)

3de6424e4ec3fea5dc66e5c3701583e4.png

a11ba1ffedc7bb01fa469599da61637d.png

我们可以说,决策树的准确率为76.32%,或者说它的错误分类率为23.68%。

随机森林

在执行随机森林之前,我们需要删除我们在执行决策树时添加的额外预测列。

test$pred<-NULL

在随机森林中,我们不需要将数据分成训练数据和测试数据,我们直接在整个数据上生成模型。为了生成模型,我们需要使用随机森林库

# Set.seed通过限制permutation来控制随机性。set.seed(100)
model_rf<-randomForest(target~.,data = heart)
model_rf

36de9dfe1acf432dcbf9bea61cb18c5c.png

在图上绘制出随机森林与误差的关系。

plot(model_rf)

98e2962a383df820cc272d661396b128.png

红线代表没有心脏病的MCR,绿线代表有心脏病的MCR,黑线代表总体MCR或OOB误差。总体误差率是我们感兴趣的,结果不错。

结论

在进行了各种分类技术并考虑到它们的准确性后,我们可以得出结论,所有模型的准确性都在76%到84%之间。其中,随机森林的准确率略高,为83.5%。

数据获取

在下面公众号后台回复“心脏病数”,可免费获取完整数据。

5f3e929207c7b37299829e931a700de2.jpeg

本文摘选R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病,点击“阅读原文”获取全文完整资料。

8771c781ed99ddc06a6a8618471c73da.jpeg

本文中的心脏病数据分享到会员群,扫描下面二维码即可加群!

a0591b9e4365d181ecbc10bf46a102c4.png

e1312f8f95538d8028a2e2fb4106dfa1.jpeg

0393d8c9cfdd67fed382fcd2f2b09df1.png

点击标题查阅往期内容

R语言逻辑回归logistic模型分析泰坦尼克titanic数据集预测生还情况

R语言是否对二分连续变量执行逻辑回归

R语言用lme4多层次(混合效应)广义线性模型(GLM),逻辑回归分析教育留级调查数据

R语言随机森林RandomForest、逻辑回归Logisitc预测心脏病数据和可视化分析

R语言基于Bagging分类的逻辑回归(Logistic Regression)、决策树、森林分析心脏病患者

R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险

R语言用局部加权回归(Lowess)对logistic逻辑回归诊断和残差分析

R语言用主成分PCA、 逻辑回归、决策树、随机森林分析心脏病数据并高维可视化

R语言用线性模型进行臭氧预测:加权泊松回归,普通最小二乘,加权负二项式模型,多重插补缺失值

R语言Bootstrap的岭回归和自适应LASSO回归可视化

R语言中回归和分类模型选择的性能指标

R语言多元时间序列滚动预测:ARIMA、回归、ARIMAX模型分析

R语言用lme4多层次(混合效应)广义线性模型(GLM),逻辑回归分析教育留级调查数据

R语言计量经济学:虚拟变量(哑变量)在线性回归模型中的应用

R语言 线性混合效应模型实战案例

R语言混合效应逻辑回归(mixed effects logistic)模型分析肺癌数据

R语言如何用潜类别混合效应模型(LCMM)分析抑郁症状

R语言基于copula的贝叶斯分层混合模型的诊断准确性研究

R语言建立和可视化混合效应模型mixed effect model

R语言LME4混合效应模型研究教师的受欢迎程度

R语言 线性混合效应模型实战案例

R语言用Rshiny探索lme4广义线性混合模型(GLMM)和线性混合模型(LMM)

R语言基于copula的贝叶斯分层混合模型的诊断准确性研究

R语言如何解决线性混合模型中畸形拟合(Singular fit)的问题

基于R语言的lmer混合线性回归模型

R语言用WinBUGS 软件对学术能力测验建立层次(分层)贝叶斯模型

R语言分层线性模型案例

R语言用WinBUGS 软件对学术能力测验(SAT)建立分层模型

使用SAS,Stata,HLM,R,SPSS和Mplus的分层线性模型HLM

R语言用WinBUGS 软件对学术能力测验建立层次(分层)贝叶斯模型

SPSS中的多层(等级)线性模型Multilevel linear models研究整容手术数据

用SPSS估计HLM多层(层次)线性模型模型

9e958115d6a856bcedb23b4f4c3684aa.png

a3be88b0ffc3df64185d132769d437fd.jpeg

bf752fb08841c2ae0911cf9c99981ade.png

相关文章:

数据分享|R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病...

全文链接&#xff1a;http://tecdat.cn/?p23061 这个数据集&#xff08;查看文末了解数据免费获取方式&#xff09;可以追溯到1988年&#xff0c;由四个数据库组成。克利夫兰、匈牙利、瑞士和长滩。"目标 "字段是指病人是否有心脏病。它的数值为整数&#xff0c;0无…...

【深度学习】 Python 和 NumPy 系列教程(十五):Matplotlib详解:2、3d绘图类型(1):线框图(Wireframe Plot)

目录 一、前言 二、实验环境 三、Matplotlib详解 1、2d绘图类型 2、3d绘图类型 0. 设置中文字体 1. 线框图&#xff08;Wireframe Plot&#xff09; 一、前言 Python是一种高级编程语言&#xff0c;由Guido van Rossum于1991年创建。它以简洁、易读的语法而闻名&#xff0…...

阿里云CDN缓存配置及优化-oss绑定CDN缓存自动刷新功能

参考阿里云官网文档&#xff1a;https://help.aliyun.com/practice_detail/603170 1.缓存时间配置 在缓存管理中&#xff0c;可以方便地指定目录和文件后缀名在CDN节点上的缓存时间&#xff0c;缓存时长配置的长短&#xff0c;取决于源站对该文件的变更频率。我们需要分析下业务…...

气象站有什么用?有哪些类型

气象站是一种用于收集、分析和处理气象数据的设备&#xff0c;能够为人们提供及时、准确的气象数据和决策支持。 一、气象站的作用 预测天气变化 气象站最重要的作用之一是进行预测天气变化。通过气象站的连续监测和数据分析&#xff0c;可以预测未来的天气情况&#xff0c;…...

【深度学习】卷积神经网络(LeNet)

卷积神经网络 LeNet 前言LeNet 模型代码实现MINST代码分块解析1 构建 LeNet 网络结构2 加载数据集3 初始化模型和优化器4 训练模型5 训练完成 完整代码 Fashion-MINST代码分块解析1 构建 LeNet 网络结构2 初始化模型参数3 加载数据集4 定义损失函数和优化器5 训练模型 完整代码…...

什么是数据仓库,解释数据仓库的结构和ETL过程

1、什么是数据仓库&#xff0c;解释数据仓库的结构和ETL过程。 数据仓库是一种用于存储和管理数据的系统&#xff0c;它提供了一种统一的方式&#xff0c;将不同来源、不同格式和不同时间的数据集成在一起。数据仓库的结构如下&#xff1a; 主题域&#xff08;Domain&#xf…...

无线通信网络

一、无线局域网 WLAN概念 WLAN(Wireless Local Area Network)无线局域网,目前大部分无线产品都是根据IEEE802.11标准开发。 IEEE802.11标准 名称发布时间工作频段调制技术数据速率802.111997年2.4GHz ISM频段DB/SK、DQPSK1Mbps、2Mbps802.11b1998年2.4GHz ISM频段CCK5.5Mbps…...

使用ElementPlus实现内嵌表格和内嵌分页

前言 有时遇到这样的需求&#xff0c;就是在表格里面嵌入一个表格&#xff0c;以及要求带有分页&#xff0c;这样在ElementPlus中很好实现。以下使用Vue2语法实现一个简单例子&#xff0c;毕竟Vue3兼容Vue2语法&#xff0c;若想要Vue3版本例子&#xff0c;简单改改就OK了。 一…...

flex弹性盒模型与阿里图标的使用

华子目录 flex布局flex布局原理flex使用三要素 阿里图标&#xff08;字体&#xff09; flex布局 相关学习网站&#xff1a;http://c.biancheng.net/css3/flex.html 1.flex是当前最主流的布局方式&#xff1a;用它布局起来更方便&#xff0c;取代了浮动的作用。 2.浮动布局有缺…...

linux 应用中offsetof ()是个啥?

#include <stdio.h> #include <stddef.h> // 需要包含 <stddef.h> 否则会有以下错误, 是因为找不到offsetof()而引起 // printf("age offset:%d\n",offsetof(Persion,age)); //main.cpp|11 col 43| error: expected primary-expression before …...

ununtu中vim的使用

插入命令 i&#xff1a;表示输入 退出命令 :w - 保存文件&#xff0c;不退出 vim :w file -将修改另外保存到 file 中&#xff0c;不退出 vim :w! -强制保存&#xff0c;不退出 vim :wq -保存文件&#xff0c;退出 vim :wq! -强制保存文件&#xff0c;退出 vim …...

SqlServer在尝试加载程序集 ID 65917 时 Microsoft .NET Framework 出错。服务器可能资源不足,或者不信任该程序集

问题&#xff1a;在尝试加载程序集 ID 65917 时 Microsoft .NET Framework 出错。服务器可能资源不足&#xff0c;或者不信任该程序集&#xff0c;因为它的 PERMISSION_SET 设置为 EXTERNAL_ACCESS 或 UNSAFE。 检查数据库属性&#xff1a;检查服务器是否信任该程序集 解决方法…...

Discourse 如何下载备份并恢复本地数据库

进入网站的备份界面&#xff0c;会看到当前所有的备份情况。 单击下载按钮。 需要注意的是&#xff0c;当你下载后&#xff0c;系统将会发送一个链接到你的邮箱地址中。 你可以使用邮箱地址中收到的链接进行数据下载。 下载链接 单击邮件中收到的下载链接地址进行下载。 下载…...

激光焊接汽车PP塑料配件透光率测试仪

随着汽车主机厂对车辆轻量化的需求越来越强烈&#xff0c;汽车零部件轻量化设计、制造也成为汽车零部件生产厂商的重要技术指标。零部件企业要实现产品的轻量化&#xff0c;在材料指定的情况下&#xff0c;要通过产品设计优化、产品壁厚减小和装配方式的优化来解决。使用PP材料…...

Android面试题汇总(二)

一、Java集合 1、谈谈 Java 中 List、Set 以及 Map 的区别&#xff1f; List&#xff1a;有序的&#xff0c;数据可以重复。。 Set&#xff1a;无序的&#xff0c;数据不能重复。 Map&#xff1a;键值对存储。键是唯一的&#xff0c;值不是唯一的。 2、谈谈 ArrayList 和 Link…...

最新模块化设计小程序系统源码完整版:开源可二开,支持DIY

随着互联网的快速发展&#xff0c;小程序已成为各行各业开展业务的重要工具。而模块化设计小程序系统源码完整版则是一种高效、灵活、易维护的解决方案。 分享一个最新的模块化设计小程序系统源码完整版&#xff0c;源码开源可二开&#xff0c;支持自由DIY设计&#xff0c;含完…...

edge扩展下载出现Download interrupted

一、Edge扩展下载失败无法下载网络问题完美解决方案 1.首先我们找到我的电脑双击我的电脑&#xff0c;找到C盘并打开C盘&#xff0c;并找到windows选项 双击打开windows并找到system32 2.双击打开system32并找到drivers 4.双击打开drivers找到etc选项 5.双击打开etc选项找到hos…...

Dokcer搭建Apache Guacamole堡垒机

一、什么是堡垒机 “堡垒机” 这个词通常指的是 “堡垒机器”&#xff08;Bastion Host&#xff09;的简称。堡垒机是一种计算机系统或网络设备&#xff0c;用于增强计算机网络的安全性。它在网络中充当一个重要的安全关口&#xff0c;通过限制对内部网络的访问&#xff0c;帮…...

【Spring Boot自动装配】

Spring Boot启动的时候会通过EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的所有自动配置类&#xff0c;并对其进行加载&#xff0c;而这些自动配置类都是以AutoConfiguration结尾来命名的&#xff0c;它实际上就是一个JavaConfig形式的Spring容器配置…...

windows彻底卸载unity

1.控制面板卸载 双击打开桌面的控制面板&#xff0c;选择卸载程序&#xff0c;选中Unity和UnityHub右击卸载。 2.清除unity的注册表 在运行中输入“regedit”双击打开注册表界面 删除 HKEY_CURRENT_USER\Software\Unity 下所有项 删除 HKEY_CURRENT_USER\Software\Unity Tec…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...