机器学习算法——常规算法,在同的业务场景也需要使用不同的算法(一)

在这里插入图片描述


👨‍💻个人主页:@开发者-曼亿点

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 曼亿点 原创

👨‍💻 收录于专栏:机器学习

🅰

请添加图片描述


文章目录

    • 🅰
    • 前言
    • 🎶<font color=green > 算法分类/font>
      • (1)K近邻
        • 1.基本概要
        • 2.算法推导
        • 3.工程实现
      • (2)朴素贝叶斯
        • 1.基本概要
        • 2.算法推导
        • 3.工程实现
        • 结束语🥇


前言

  机器学习可以处理的业务场景非常丰富,从基础的回归、聚类和分类等场景到图片识别、语音识别和文本分析等。不同的业务场景也需要使用不同的算法,所以如果想对机器学习在业务的解决方案上有一定认识,则需要掌握多种场景的不同种类的算法,了解不同算法的属性、优势和缺陷,对之后的算法应用会有很大的帮助。


🎶 算法分类/font>


  分类算法是用来解决分类问题的算法,关于场景的抽象方法在前面章节中已经介绍了,分类算法是场景最丰富的一类算法,广告的投放和疾病预测等都可以抽象成分类问题。分类算法一般都是监督学习算法,因为需要通过已有的打标数据来生成分类模型。在这一部分选取了几种比较典型的分类算法进行介绍,分别是K近邻(KNN)、朴素贝叶斯(NBM)、逻辑回归(LR)(注:这里LR作为二分类算法,LR也是回归算法的一种)、随机森林(RF)和线性支持向量机(SVM)。

(1)K近邻

  很多人在刚接触机器学习算法的时候,都会觉得这些算法很难理解,有很多公式需要记、需要推导,为了防止大家对学习机器学习算法的学习产生抗拒心理,我们先从最简单的算法(K近邻)入手学习。K近邻算法主要解决的是分类问题,而且原理非常好理解,只要有一点数学基础,差不多用20分钟就可以进行推导,稍微有一些代码能力的话,半个小时就可以实现一版简单的K近邻程序。下面具体来看一下K近邻。

1.基本概要

  K 近邻(K-Nearest Neighbor,KNN)是一种非常简单的机器学习算法,主要用来解决分类问题,KNN 是监督学习分类算法,在分类前需要有打标数据。从字面意思来理解,KNN 是一种 LazyLearning(也可称为“惰性学习”,可理解为考虑问题的最简化情况)模式的算法,因为它的分类只考虑距离目标点最临近的K个点的类别,具体是怎么实现的呢?我们通过引用 KNN 在维基百科中的一张图(见图 1)来讲解。
在这里插入图片描述

  图 1表示在二维空间中的一个分类场景,三角形和正方形的图形代表已经打标过的两种数据的分布,打问号的圆形数据是我们需要进行分类的预测对象。首先在算法推导前需要先设置K值。
  1)当 K=3 时,我们找出距离预测集,也就是圆形数据最近的3个数据,这3个数据中有2个三角形、1个正方形。所以圆形数据会被分到跟三角形数据一类,因为在 K=3 的半径区间中三角形的数量占优。
  2)当 K=5 时,找出距离圆形数据最近的5个数据点,分别是3个正方形和2个三角形,那么预测点会被分到属于正方形的这一类。
  通过上面的这个例子我们可以了解到,K值对预测对象的最终预测结果的影响是很大的。K值取得太小可能会造成参与评估的样本集太小,结果没有说服力;K值取得过大,会把距离目标队列距离过远的一些噪音数据也考虑进去,造成结果的不准确性。所以在实际的算法使用过程中,需要对K这个参数进行反复的调试,才可以达到一个比较理想的效果。
  下面来了解 KNN 算法的一些特性。首先,KNN 不同于其他一些算法的地方是 KNN不光可以解决Z分类场景的问题,同时也可以解决多分类的问题,因为无论需要分类的目标列有几种可能,KNN 只考虑与目标的距离最近的下个点的集合中哪个类别的点数量最占优势。另外,因为 KNN 的原理和实现都较为简单,所以后期调优过程中的工作量相对来讲比较小。KINN 比较大的问题就是对样本分布比例不均衡的情况可能会造成结果的不准确性,如图 2所示。
  在上面的这个二维空间中,正方形和六边形表示已经打标好的数据集,我们需要对五角星进行分类。通过上图的数据分布,从距离的角度直观来看,五角星应该属于正方形这一类,因为五角星的周围都是正方形。但是由于整个数据集的分布不平衡,六边形的数量远多于正方形的数量,所以当 K=9 或者更大的时候,预测集会被错误分类。所以 KNN 在目标数据集数量比例分布不平衡的情况下,可能会造成预测结果的不准确。KNN 的另外一个问题就是计算成本很高,因为每个预测点都需要对全量数据集进行一次距离的计算和排序,这样就会造成非常大的计算资源开销。上面我们介绍了 KNN的一些基本概念和特性,下面来看一下具体的算法推导过程。
在这里插入图片描述

2.算法推导

  通过上面的介绍,我们可以了解到 KNN 的算法原理,下面来看具体的推导过程。
  1)因为 KNN 是监督学习,所以首先要加载打标好的数据集(多分类或者二分类数据),然后需要设定一个K值。
  2)在预测的过程中,需要针对每一个预测对象计算它与所有数据集的距离,这个距离的计算一般通过求欧式距离来实现,欧式距离可以描述两点在n维空间的真实距离(物理距离 )。求解方法比较简单,已知两个n维向量 x=(x,x,x,…,x„)和 y=(yyy…,y),那
么这两个向量的欧式距离公式可以表示为
在这里插入图片描述
将结果进行排序,选取跟预测数据距离最近的K个点组成决策集合
  在决策集中,比较各个类别数据点的个数,选取个数最多的类别作为预测数据点的最终类别。
  整个 KNN的推导过程比较简单,主要涉及距离计算和排序两个功能点。这里只是针对最简单的 KNN 情况进行介绍,具体的实现可以有很多的优化方式,如可以在计算前先排除掉与预测集数据距离较大的一些噪音点,从而提高计算效率。

3.工程实现

上面介绍了整个算法的推导,现在看一下如何通过工程来实现KNN。

import math
import operator
def euclideanDistance(inst1,inst2,length):distance =0for x in range(length):distance +=pow((instl[x]-inst2[x]),2)return math.sqrt(distance)def getNeighbors(trainingSet,testInstance,k):distances =[]length=len(testInstance)-1for x in range(len(trainingSet)):dist=euclideanDistance(testInstance, trainingSet[x], length)distances.append((trainingSet[x],dist))
distances.sort(key=operator.itemgetter(1))neighbors =[]for xin range(k):neighbors.append(distances[x][0])return neighborsdef getResponse(neighbors):classVotes ={}for x in range(len(neighbors)):response = neighbors[x][-1]if response in classVotes:classVotes[response]+=1else:classVotes[response]=1sortedVotes=sorted(classVotes.iteritems(),key= operator.itemgetter (1).reverse=True)return sortedVotes[0][0]

  使用的 Python 版本为 Python 2.7,这里引入了Python的numpy和operator 两个库.
下面看一下代码中几个函数的输入和输出。

  • euclideanDistance:这个函数主要是求两个向量的欧式距离,输入的3个参数分别是向量 1、向量2和向量的维度。
  • getNeighbors:在数据集中找到所需要预测数据的 K个最临近点并返回,输入的3
    个参数分别是数据集、预测集以及K值。
  • getResponse:返回对目标值的预测结果,输入的是 getNeighbors 函数的返回值。
    下面通过一个实例,来看看上面代码的运行结果。输入打标好的数据集:

trainset =〔[1,1,1,‘a’],[2,2,2,‘a’],[1,1,3,‘a’],[4,4,4,‘b’], [0,0.0,"a”,[4,4.5,4,‘b’]]

  trainSet 是一个4维数据集,最后一个字段是目标列,一共有6个点,分为a和b两种类别。预测集是 testInstance=[5,5,5]。
  把这两组数据带入上面的函数中可得

def main():trainset =[[1,1,1,'a'],[2,2,2,'a',[1,1,3,'a'],[4,4,4,'b'],[0,0,0,'a’],[4,4.5,4,'b']]
testInstance =[5,5,5]
k=5neighbors =getNeighbors(trainSet, testInstance,k)response =getResponse(neighbors)print "\nNeighbors Are:",print (neighbors)print "\nResponse is:",print repr(response)

以上介绍了 KNN 的算法原理以及推导,并且通过 Python 代码进行了实现。KNN 作为最简单的机器学习算法比较适合新手入门了解。KNIN 算法在文本分类和图像分类等场景有许多的应用,常常作为业务场景下的重要分类模块来使用。如果想对 KNN 有更深刻的了解,请查看相关资料并且通过大数据集进行实验。

(2)朴素贝叶斯

  如果你是一个计算机相关专业毕业的学生,那么一定听说过贝叶斯这个人。贝叶斯(Bayes)定理是由英国数学家贝叶斯发明的,用来描述两个条件概率的关系。朴素贝叶斯是贝叶斯定理的简单实现,是常见的一种利用先验概率进行分类的分类器。朴素贝叶斯的基础建立在一个假设条件之上,即所有特征的条件之间相互独立。下面来详细介绍下朴素贝叶斯分类算法。

1.基本概要

  朴素贝叶斯模型(Naive Bayesian Mode,NBM)作为以条件概率为基础的分类器,是一种监督学习算法,常被用于文本分类和垃圾邮件过滤等场景中。为了更好地帮助大家理解员叶斯理论,下面摘选一段维基百科上的介绍。贝叶斯理论解决的是逆向概率问题。设一个袋子里有N个白球,M个黑球,计算从这个袋子摸出黑球的概率是很容易的,这是~个正向概率求解的问题。但是如果我们把问题反过来,如果我们事先不知道袋子里有多少个黑球、多少个白球,我们摸一个球出来,通过所摸出球的颜色对袋子里的黑白球比例进行推测,这就是逆向概率问题。贝叶斯定理主要是通过已知的正向概率求解逆向概率
  下面来了解贝叶斯理论是如何应用到实际的分类场景中去的。朴素贝叶斯分类是一种机器学习的监督学习算法,监督学习意味着我们已经有了一份打标好的数据作为训练样本,可以把训练样本的数据分为两类,特征列和目标列。特征列表示的是那些特征字段的数据,目标列是打标字段。贝叶斯理论在分类场景中解决的问题就是:当我们已知目标列和特征列各自分布的概率情况下,特征列概率已知,求解目标列每个值的概率。
 &emsp这里涉及几个概率论中的知识点,首先是朴素贝叶斯中“朴素”两个字的概念,朴素”表示的是一种比较理想的环境,就是特征数据之间彼此独立。例如有两个特征分别是m和n,P(m)表示 m发生的概率,那么 P(mn)表示 m 和n同时发生的概率、当m和"独立的情况下:P(mn)=P(m)xP(n)。下面再看下“条件概率”的含义,P(A|B)(见图5)是指当事件 B发生的情况下,事件A发生的概率。
在这里插入图片描述
根据概率论的概念可得:
在这里插入图片描述
其实根据图 5 可以得出如下公式也是成立的。
在这里插入图片描述
也就是说通过 P(A∩B)这个两个概率图交叉的媒介,可得到
在这里插入图片描述
贝叶斯定理的最终公式为
在这里插入图片描述
  其中、P(A)是A的先验概率,因为在计算 P(A)的时候不考虑 B的影响。P(A|B)称为A的后验概率,因为这个概率中 A的概率计算是在 B已经发生了的基础上。实际上在做分类的时候,场景可以抽象为已知一条数据的特征,预测这条数据的目标结果概率,P(目标结果概率|特征 )。下面通过一个案例对朴素贝叶斯进行推导。

2.算法推导

前面介绍了贝叶斯公式是如何推导的,得到

在这里插入图片描述
  看一下如何通过这个公式进行分类,用一个生活中的例子来描述贝叶斯算法分类的过程,我们的场景是判断一个女生是否接受男生约会的邀请,前提是女生知道男生的身高以及男生是否拥有房产。这个场景下的数据集见表

身高/cm是否有房是否约会
180约会
160没房不约会
160不约会
170约会
180没房约会

  在这个数据集中,“身高”和“是否有房”是两个特征项,“是否约会”是目标列。我们希望通过贝叶斯算法,当已知一个男士的“身高”和“是否有房”这两个特征数据之后判断他约会成功的概率。假设有一个男士M的身高是180,没有房产,现在来预测M约会成功的概率。根据贝叶斯公式,最终要计算的是男士M的后验概率,这个后验概率是通过他的“身高”和“是否有房”两个前提条件得到的。公式为

在这里插入图片描述

把A看作“约会”,B看作“身高 180”和“没有房”。通过公式表示为
在这里插入图片描述
鑫朴素贝叶斯定理中、前提条件是特征彼此独立。根据上面一个小节所介绍的特征独立的公式 P(mn)=P(m)xP(n),可以将公式变形为

在这里插入图片描述
这时可以发现,上面的式子中的右侧所有乘机因子都是可以通过历史数据求解得到的。下面来逐个求解这些因子。

  • P(身高180|约会):表示的是在成功约会的人中,身高180cm 的人占的比例。我们从总的数据集中提取成功约会人员的数据(见表)。
身高/cm是否有房是否约会
180约会
170约会
180没房约会

从上面的表格里看到,约会成功的人中身高180cm的比例是 2/3。

  • P(没有房|约会):跟上面同样的道理,约会成功的人中没有房的概率是 113。
  • P(约会):一共5个人,3个人约会成功,所以P(约会)=315。
  • P(身高180):身高是180cm的概率为2/5。
  • P(没有房):没有房的概率为 2/5。

把上面这些求解的概率因子带入可得

在这里插入图片描述

  通过上面的结果,我们就可以推断出身高180cm 的男士即使没有房产,约会成功的概率也是非常高的,这就解决了一个“约会成功”或“约会不成功”这样的二分类问题。通过这个例子的推导,我们就了解了如何通过朴素贝叶斯定理来进行分类。

3.工程实现

  前面介绍了朴素贝叶斯分类器的实现原理以及推导过程,这一小节将介绍如何在工程上实现朴素贝叶斯分类器。朴素贝叶斯常被用作对文本类的数据进行分类,常见的有新闻分类或是垃圾邮件过滤。在处理文本数据的时候,其主要原理是通过发现每一个类别的文本可能出现的关键词的概率,然后通过这种概率计算后验概率。
  在这里采用开源的一款朴素贝叶斯分类器来实现,具体的源码可以参考https://github.com/muatik/naive-bayes-classifer,代码可读性非常好,建议充分阅读一遍,可以加深对贝叶斯算法的认识。
  1)安装贝叶斯分类器。本实验的实验环境是 MacOS 系统,Python 2.7的环境下,首先安装贝叶斯分类器的代码包:

sudo pip install naiveBayesClassifier

  2)文本数据集。这里有一组数据集,为了文本分词方便起见,使用的是英文语料(中文分词原理可以参考下文马尔科夫的实现)。数据集有两类文本,分别是“health”和“politics”两种。数据源包含两个字段,特征列是“text”,目标列是“category”。

newsSet =[
i'text': 'not to eat too much is not enough to lose weight','category' : 'health' }
i'text':'Russia try to invade Ukraine','category': 'politics'},
{'text': 'do not neglect exercise','category': "health'},
('text':'Syria is the main issue, Obama says', 'category': 'politics'),
{'text': 'eat to lose weight','category': "health'},
{'text':'you should not eat much','category': "health'}
]

  3)利用贝叶斯算法分类。

from naiveBayesClassifier import tokenizer
from naiveBayesClassifier.trainer import Trainer
from naiveBayesclassifier,classifier import Classifier
newsTrainer = Trainer(tokenizer)
newsSet =[
{'text': 'not to eat too much is not enough to lose weight', 'category': 'health'},
('text':'Russia try to invade Ukraine', 'category': 'politics'},
{'text':'do not neglect exercise','category': 'health'),
('text':'Syria is the main issue, Obama says', 'category': 'politics'),
('text':'eat to lose weight','category': 'health'},{'text':'you should not eat much','category': 'health'}
]
for news in newsSet:newsTrainer.train(news['text'],news['category'])
newsClassifier=Classifier(newsTrainer.data, tokenizer)
classification =newsClassifier.classify("eat more, you will become fatter")
print(classification)

  因为贝叶斯分类算法是监督学习,所以首先通过 train 函数输入特征列和目标列,训练生成分类模型 newsClassifer,接着就可以通过这个分类模型对预测样本“eat more,youwil become fatter”进行预测,最终得到的预测结果是这句话归于“health”或是“politics”
  贝叶斯分类理论是基于概率的一种分类算法。最终结果返回了预测集属于“health"或是“politics”两种类别各自的概率。结果已经表明了“eat more,you wil become fatter”这句话属于“health”类别的概率较大。具体的算法流程是通过比对预测集每个词在不同种类的训练样本中出现的频率大小来综合判断的。正是基于这种条件概率的算法推导方式,使得贝叶斯分类在文本分类场景下得到了广泛的应用,在处理垃圾软件过滤和黄色文本过滤方面都有着不错的效果。
以上主要是对朴素贝叶斯分类的算法理论进行了介绍。通过上文的介绍,我们可以了解朴素贝叶斯的分类原理是基于概率论的条件概率公式,比较容易理解,而且在很多场景下具有比较好的性能。同时,因为输出结果是概率值,朴素贝叶斯可以很容易地从二分类场景扩展到多分类场景中去,这个特性也是贝叶斯分类算法比较好的特性。如果想更深入地了解贝叶斯算法的更多场景和其他扩展算法,可以多浏览相关的论文文献,建议阅读一些比较成熟的开源项目源码。


结束语🥇

以上就是机器学习
持续更新机器学习教程,欢迎大家订阅系列专栏🔥机器学习
你们的支持就是曼亿点创作的动力💖💖💖
请添加图片描述

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

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

相关文章

【Vulnhub系列】Vulnhub_SecureCode1靶场渗透(原创)

【Vulnhub系列靶场】Vulnhub_SecureCode1靶场渗透 原文转载已经过授权 原文链接&#xff1a;Lusen的小窝 - 学无止尽&#xff0c;不进则退 (lusensec.github.io) 一、环境配置 1、从百度网盘下载对应靶机的.ova镜像 2、在VM中选择【打开】该.ova 3、选择存储路径&#xff0…

“数说”巴黎奥运会上的“中国智造”成果

引言&#xff1a;随着“中国智造”在欧洲杯上方兴未艾&#xff0c;在巴黎奥运会上&#xff0c;中国智造继续以多种形式和领域展现了其强大的实力和创新能力。以格力公开表示将为巴黎奥运村提供345台格力空调&#xff0c;为中国制造的清凉送至巴黎事件拉开中国制造闪亮巴黎奥运会…

浅谈取样器之调试取样器

浅谈取样器之调试取样器 JMeter的调试取样器(Debug Sampler)是一个非常实用的工具&#xff0c;它帮助用户在测试计划执行过程中获取详细的内部状态信息&#xff0c;这对于诊断脚本错误、理解变量作用域、以及确认配置是否按预期工作至关重要。调试取样器可以显示JMeter变量、属…

将gitee 上的nvim 配置 从gitee 上下载下来,并配置虚拟机

首先是下载 gitee 上的配置。 然后是 配置 tmux 然后是配置nvim . 1 在init.lua 文件中注释掉所有的与第三方插件有关的内容。 2 在packer 的文件中 &#xff0c; 注释掉所有的与 第三方插件有关的代码。 3 首先要保证 packer 能够正确的安装。 4 然后开始 安装 所有的插件…

【SOC 芯片设计 DFT 学习专栏 -- DFT DRC规则检查】

请阅读【嵌入式及芯片开发学必备专栏】 请阅读【芯片设计 DFT 学习系列 】 如有侵权&#xff0c;请联系删除 转自&#xff1a; 芯爵ChipLord 2024年07月10日 12:00 浙江 文章目录 概述DRC的概念Tessent DRC检查的概述时钟相关检查扫描相关检查BIST规则检查预DFT时钟规则检查 …

Git(分布式版本控制系统)(fourteen day)

一、分布式版本控制系统 1、Git概述 Git是一种分布式版本控制系统&#xff0c;用于跟踪和管理代码的变更&#xff0c;它由Linux、torvalds创建的&#xff0c;最初被设计用于Linux内核的开发。Git允许开发人员跟踪和管理代码的版本&#xff0c;并且可以在不同的开发人员之间进行…

链表篇-02.从尾到头打印链表(反转链表)

解题思路&#xff1a; 链表从尾到头打印链表, 我的思路是 用三个指针,第一个指针(pre)指向指向头节点的前一个位置&#xff0c;第二个指针(cur)指向头节点&#xff0c; 然后依次往后执行&#xff0c;第三个指针用于临时记录第二个指针的下一个位置。 代码详情: import java.…

【Code】Street-Gaussian代码复现笔记

文章目录 1. EnvironmentBug 1 2. TrainingBug 2Bug 3 1. Environment Follow the original instructions, conda create --name street-gaussians-ns -y python3.8 conda activate street-gaussians-ns pip install --upgrade pippip install torch2.1.2cu118 torchvision0.…

差分法求解 Burgers 方程(附完整MATLAB 及 Python代码)

Burgers 方程的数值解及误差分析 引言 Burgers 方程是一个非线性偏微分方程&#xff0c;在流体力学、非线性声学和交通流理论中有广泛应用。本文将通过数值方法求解带粘性的 Burgers 方程&#xff0c;并分析其误差。 方程模型 Burgers 方程的形式为&#xff1a; u t u u …

如何快速获取全网精准客流?揭秘不为人知的5大运营策略!

有同行所在的地方&#xff0c;就一定拥有咱们需要的客户。客户看的是结果&#xff0c;搜索的是问题&#xff0c;寻找的是答案。 如果没有付费流量&#xff0c;单纯靠搞免费流量&#xff0c;很多大厂的运营也会变得一文不值。一个牛逼的运营&#xff0c;不仅是会做付费流量&…

Sentinel隔离、降级、授权规则详解

文章目录 Feign整合Sentinel线程隔离熔断降级授权规则自定义异常结果 上一期教程讲解了 Sentinel 的限流规则&#xff1a; Sentinel限流规则&#xff0c;这一期主要讲述 Sentinel 的 隔离、降级和授权规则 虽然限流可以尽量避免因高并发而引起的服务故障&#xff0c;但服务还…

我们的前端开发逆天了!1 小时搞定了新网站,还跟我说 “不要钱”

大家好&#xff0c;我是程序员鱼皮。前段时间我们上线了一个新软件 剪切助手 &#xff0c;并且针对该项目做了一个官网&#xff1a; 很多同学表示官网很好看&#xff0c;还好奇是怎么做的&#xff0c;其实这个网站的背后还有个有趣的小故事。。。 鱼皮&#xff1a;我们要做个官…

Mastercam2020中文版安装教程许可证激活码教程附安装包【亲测成功】

软件简介 Mastercam是美国CNC Software Inc.公司开发的基于PC平台的CAD/CAM软件。它集二维绘图、三维实体造型、曲面设计、体素拼合、数控编程、刀具路径模拟及真实感模拟等多种功能于一身。它具有方便直观的几何造型。Mastercam提供了设计零件外形所需的理想环境&#xff0c;其…

Sonatype Nexus Repository搭建与使用(详细教程3.70.1)

目录 一. 环境准备 二. 安装jdk 三. 搭建Nexus存储库 四. 使用介绍 一. 环境准备 主机名IP系统软件版本配置信息nexus192.168.226.26Rocky_linux9.4 Nexus Repository 3.70.1 MySQL8.0 jdk-11.0.23 2核2G&#xff0c;磁盘20G 进行时间同步&#xff0c;关闭防火墙和selinux…

1.Redis介绍

redis是一个键值型数据库。 是一种nosql数据库&#xff0c;非关系型数据库。 sql数据库 1.字段类型是固定的。 2.表的结构是固定的。表数据量特别大的时候&#xff0c;去修改表结构会出现问题。也会导致业务逻辑的修改。 3.每个字段有一定的约束&#xff0c;比如唯一约束&…

C/C++进阶 (8)哈希表(STL)

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a;C 本文着重于模拟实现哈希表&#xff0c;并非是哈希表的使用。 实现的哈希表的底层用的是线性探测法&#xff0c;并非是哈希桶。 目录 一、标准库中的哈希表 1、unordered_map 2、unordered_set 二、模…

Spring -- 使用XML开发MyBatis

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 文章目录 MyBatis XML配置文件开发配置连接字符串和MyBatis写Mapper层代码添加mapper接口添加UserInfoXmLMapper.xml 操作数据库INSERTDELETE & UPDATE MyBatis XML配置文件开发 实际上,除…

【全面讲解下Docker in Docker的原理与实践】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 👉目录 👉前言👉原理👉实践👉安全和最佳实践👉前言 🦛…

C语言 之 理解指针(4)

文章目录 1. 字符指针变量2. 数组指针变量2.1 对数组指针变量的理解2.2 数组指针变量的初始化 3. 二维数组传参的本质4. 函数指针变量4.1 函数指针变量的创建4.2 函数指针变量的使用 5. 函数指针数组 1. 字符指针变量 我们在前面使用的主要是整形指针变量&#xff0c;现在要学…

阿里云主机 安装RabbitMQ

一、操作系统 用的是Alibaba Cloud Linux release 3 (Soaring Falcon)系统&#xff0c;可以通过命令&#xff1a;lsb_release -a 查看系统信息。 二、安装RabbitMQ RabbitMQ 是基于 Erlang 语言构建的&#xff0c;要安装RabbitMQ&#xff0c;需先安装Erlang环境。通过Erlang V…