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

【机器学习基础】初探机器学习

在这里插入图片描述

【作者主页】Francek Chen
【专栏介绍】⌈Python机器学习⌋ 机器学习是一门人工智能的分支学科,通过算法和模型让计算机从数据中学习,进行模型训练和优化,做出预测、分类和决策支持。Python成为机器学习的首选语言,依赖于强大的开源库如Scikit-learn、TensorFlow和PyTorch。本专栏介绍机器学习的相关算法以及基于Python的算法实现。

文章目录

    • 一、人工智能的“两只手和四条腿”
    • 二、机器学习是什么
    • 三、时代造就机器学习的盛行
    • 四、泛化能力:机器学习奏效的本质
    • 五、归纳偏置:机器学习模型的“天赋”
    • 六、机器学习的限制


  我们生活在一个人工智能的时代!生活中现在已随处可见人工智能技术的影子。在大学的食堂,学生把打好菜的托盘放到摄像头下面,机器就可以自动识别每个餐盘的形状来自动计算这顿饭的价格;而在校园的大部分电梯里,学生可以说例如“我要去3楼”,电梯则可以自动带学生去3楼,这在疫情期间更加方便卫生。或许对于“20后”的孩子们而言,智能就像能源一样从他们记事起就随处可见、随手可得,就像移动互联网之于“10后”一样。

一、人工智能的“两只手和四条腿”

  人工智能大概长什么样呢?做一个有画面感的描述,人工智能有“两只手和四条腿”。“两只手”代表的是人工智能可以做的两大类任务,即预测与决策。预测包括对给定输入目标的模式识别、标签分类和回归或者预测未来的数据,以及对数据做聚类或生成,例如语音识别与合成。而决策则需要机器产生相关的动作,下达到环境中并改变环境,例如下围棋和自动驾驶控制。“四条腿”则代表支撑人工智能的四大类科学技术,包括搜索、推理、学习和博弈。搜索是在给定的数学环境中以既定的算法去探索选择分支的好坏并最终做出决策的方法,可以使用在下围棋、路径规划等任务中。推理是基于给定的规则或知识,使用逻辑归纳的方式,得到进一步的规则或知识,进而完成给定问题的作答,例如数学定理的自动证明、知识问答等。学习,即机器学习(machine learning),则是机器通过经验数据,对任务目标做出优化的自动化过程,例如人脸识别、语音识别等。博弈则关注多个人工智能智能体之间的交互,例如桥牌对战、足球团队配合等。
  通过上面的简述,我们可以大概知道一个人工智能的全貌。过去十年间,人工智能的主要进展在机器学习技术方面,以至于甚至分不清人工智能和机器学习之间的关系。在这里,重点讨论人工智能中服务预测任务的机器学习技术。而支撑决策任务的机器学习技术被称为强化学习(reinforcement learning)。

二、机器学习是什么

  那就究竟什么是学习呢?诺贝尔经济学奖和图灵奖双料得主、卡耐基梅隆大学的赫尔伯特·西蒙教授是这样定义学习的:“学习是系统通过经验提升性能的过程”。可以看到,学习是一个过程,并且这里有三个关键词,即经验、性能、提升。首先,学习的目标是提升某个具体性能,例如我们学习开车时,希望能提升自己的车技,这个可以通过一些驾驶的测试来获得具体的指标分数。其次,学习是基于经验的,也就是我们经历过的事情,例如我们在驾驶过程中遇到的情况以及当时的具体动作和结果,这其实就是数据。因此,如果用比较计算机的语言来描述,学习就是系统基于数据来提升既定指标分数的过程。
  有了上述对于学习是怎样一个过程的理解,现在我们就比较好定义机器学习了。根据机器学习泰斗、卡耐基梅隆大学的汤姆·米歇尔教授的定义,机器学习是一门研究算法的学科,这些算法能够通过非显式编程(non-explicit programming)的形式在某个任务上,通过经验数据,来提升性能指标。一组学习任务可以由三元组在〈任务, 指标, 数据〉来明确定义。
  用较为数学的语言来描述机器学习,则可以使用一个优化问题来刻画。针对某一预测任务,其数据集为 D \mathcal{D} D,对于一个机器学习预测模型 f f f,预测任务的性能指标可以通过一个函数 T ( D , f ) T(\mathcal{D},f) T(D,f) 来表示,那么机器学习的过程则是在一个给定的模型空间 F \mathcal{F} F中,寻找可以最大化性能指标的预测模型 f ∗ f^* f
f ∗ = arg ⁡ max ⁡ f ∈ F T ( D , f ) = M L ( D ) f^* =\arg\max_{f\in \mathcal{F}} T(\mathcal{D}, f)= \mathrm{ML}(\mathcal{D}) f=argfFmaxT(D,f)=ML(D) 这里的 M L ( D ) \mathrm{ML}(\mathcal{D}) ML(D)则表示机器学习可以被看成是一个输入数据集、输出解决任务算法的算法。

  这里说的非显式编程是什么特性呢?一般人工智能技术的实现,都是需要人首先充分了解任务和解决方法,并根据具体的解决思路,编写程序来完成该任务。例如地图的导航任务,系统需要首先将城市的路网建模成一个图结构,然后针对具体起点到终点的任务,寻找最短路径,例如使用 A* 搜索算法。因此,显式编程需要开发者首先自己可以完成该智能任务,才能通过实现对应的逻辑来使机器完成它,相当于要事先知道了 f ∗ f^* f,然后直接实现它。这其实大大抬高了人工智能技术的门槛,它需要有人能解决任务并通过代码来实现解决方法。而有的智能任务是很难通过这样的方式来解决的,例如人脸识别、语音识别这样的感知模式识别任务,其实我们自己也不清楚是如何来精准识别平时碰到的每个人的脸的,也就更加无法编写程序来直接实现这个逻辑;亦或是例如深海无人艇航行、无人机飞行等人类自己无法完成的任务,自然也无法通过直接编程来实现。
  具体地,在上述优化范式中,我们在一个模型空间 F \mathcal{F} F中寻找最优模型 f ∗ f^* f的过程,可以是一个持续迭代的形式,即
f 0 → f 1 → f 2 → ⋯ → f ∗ f_0 \rightarrow f_1 \rightarrow f_2 \rightarrow \cdots \rightarrow f^* f0f1f2f 而这个寻找最优模型 f ∗ f^* f的过程,就是机器学习。机器学习的算法可以对应从 f i f_i fi迭代到 f i + 1 f_{i+1} fi+1的程序。

  华盛顿大学的佩德罗·多明戈斯(Pedro Domingos)教授将机器学习比喻成“终极算法”,因为有了机器学习技术,只需要拥有任务的数据,就可以得到解决任务的算法。这样,程序员就可以“往后站一步”,从直接编写各类任务具体的算法代码,转为编写机器学习算法代码,然后在不同任务中,基于任务自身的数据,学习出一个解决该任务的算法(即机器学习模型)出来,如图1所示。

在这里插入图片描述

图1 传统的显式编程与机器学习的非显式编程

三、时代造就机器学习的盛行

  那么机器学习技术为什么现在如此盛行呢?主要原因之一来自于时代造就!2006年,美国亚马逊公司推出云计算服务,云计算技术开始普及,不少公司开始将大量业务数据存储到云平台。2011年,大数据概念开始深入人心,大量的公司基于云计算平台积累下来的大数据开始挖掘价值,而基于大数据的机器学习技术则开始越来越被重点关注。2012年,深度学习率先在计算机视觉领域取得大的突破,随后2013年的自然语言处理、语音识别和深度强化学习等人工智能分支和应用场景开始大爆发。我们可以看到,在云计算和大数据的基础下,机器学习作为一种在数据和算力给足的情况下可以变得更强大的人工智能技术,获得了充分成长的条件。而到了2020年代的今天,我们已经看到机器学习技术开始从数据量最多的互联网场景在大量外溢到传统工业、农业场景,例如工厂的能效优化和排产规划,农田收成预测与种植规划等,各个行业在经历一个数字化转型和智能化升级的阶段。我们有理由相信,未来10年,机器学习技术会持续渗透到各行各业,在各类预测和决策任务场景中服务人类。

  按照任务来分类,机器学习可以分为有监督学习、无监督学习和强化学习三大类。

  • 监督学习(supervised learning):训练集 D \mathcal{D} D中的每一个数据实例 ( x , y ) (\boldsymbol{x},y) (x,y) 由特征和标签组成。模型的任务是根据数据的特征来预测其标签。模型的性能指标可以由一个损失函数 L ( y , f ( x ) ) L(y, f(\boldsymbol{x})) L(y,f(x)) 来定义。该损失函数衡量具体的数据实例 ( x , y ) (\boldsymbol{x},y) (x,y) 上的预测偏差,性能指标可以定义为损失函数的负数。由此,有监督学习的一般形式可以写为 f ∗ = arg ⁡ min ⁡ f 1 ∣ D ∣ ∑ ( x , y ) ∈ D L ( y , f ( x ) ) f^*=\arg\min_f \frac{1}{|\mathcal{D}|}\sum_{(\boldsymbol{x},y)\in \mathcal{D}} L(y,f(\boldsymbol{x})) f=argfminD1(x,y)DL(y,f(x))

  • 无监督学习(unsupervised learning):无监督学习的任务目标多种多样,但大多需要我们学习数据的分布 p ( x ) p(x) p(x)。与有监督学习不同,无监督学习任务中的数据没有标签的概念,或者说,所有数据维度都是同等重要的,也即是训练集 D \mathcal{D} D的每一个数据实例仅由数据特征 x \boldsymbol{x} x来表示。这时我们往往使用概率分布模型 p ( x ) p(\boldsymbol{x}) p(x)来建模数据的分布。在数据实例满足独立同分布的普遍假设下,整个数据集的对数似然(log-likelihood)则作为无监督学习需要最大化的目标,即 p ∗ = arg ⁡ max ⁡ p 1 ∣ D ∣ ∑ x ∈ D log ⁡ p ( x ) p^*=\arg\max_p \frac{1}{|\mathcal{D}|}\sum_{\boldsymbol{x}\in \mathcal{D}} \log p(\boldsymbol{x}) p=argpmaxD1xDlogp(x)

  对比有监督学习和无监督学习,有监督学习的只关心基于数据特征对标签的预测是否精准,而并不关心数据特征之间的相关性等模式。例如人脸识别就是一个典型的有监督学习任务,模型只关心输入人脸图像后是否能准备预测对应的身份,而不关注输入图像本身是否是包含一个人脸。而无监督学习则关注数据的分布与其中包含的模式,如关注人脸图像的概率分布,并可以判断一张给定的图像是否包含一个人脸,甚至可以生成一张新的人脸图像。

  • 强化学习(reinforcement learning):与有监督学习和无监督学习关于人工智能中的预测问题不同,强化学习关注人工智能中的决策问题。强化学习是寻找更好的决策策略的过程,而优化的目标则是策略决策带来的累积回报的期望。由于强化学习的数学建模方式与有监督学习和无监督学习有较大差距,因此这里不具体给出数学公式。

  按照建模方式来分类,机器学习模型可以分为参数化模型和非参数化模型两大类。

  • 参数化模型(parametric model):在一套具体的模型族(model family)内,每一个具体的模型都可以用一个具体的参数向量来唯一确定,因此确定了参数向量也就确定了模型。例如,在上述有监督学习中,可以将参数向量 θ \boldsymbol{\theta} θ预测模型的下标,即 f θ f_{\boldsymbol{\theta}} fθ,来表示参数化模型。因此,参数化模型的监督学习也可以写成是寻找最优参数 θ ∗ \boldsymbol{\theta}^* θ的过程,即 θ ∗ = arg ⁡ min ⁡ θ 1 ∣ D ∣ ∑ ( x , y ) ∈ D L ( y , f θ ( x ) ) \boldsymbol{\theta}^*=\arg\min_{\boldsymbol{\theta}} \frac{1}{|\mathcal{D}|}\sum_{(\boldsymbol{x},y)\in \mathcal{D}} L(y,f_{\boldsymbol{\theta}}(\boldsymbol{x})) θ=argθminD1(x,y)DL(y,fθ(x)) 参数化模型的一大性质是,模型的参数量不随着训练数据量而改变。因此,在计算过程中,模型占用计算机的资源(如内存或者显存)是固定的。
    线性回归、逻辑回归、双线性模型、神经网络模型都是典型的参数化模型。求解上述最优参数可以借助损失函数针对模型参数的梯度来完成,方法具有普适性,因此参数化模型整体上比非参数化模型更加普遍,有很多机器学习代码库的支持,包括深度学习框架PyTorch、TensorFlow等。

  • 非参数化模型(nonparametric model):与参数化模型相反,非参数化模型并非由一个具体的参数向量来确定,其训练的算法也不是更新模型的参数,而是由具体的计算规则直接在模型空间中寻找模型实例。由于模型和参数并非一一对应,因此数据量的不同(或者数据的不同)会导致模型中具体使用到的参数量也不同。对于有的非参数化模型,例如KNN、高斯过程,其参数量和训练数据量成正比,即每个数据实例就是一个参数。KNN、树模型、支持向量机都是极其重要的机器学习模型,并且在实践中具有不可替代的功能。可以理解为,参数化模型将从数据中学到的知识注入到参数中,而非参数化模型则保留数据本身作为知识。

四、泛化能力:机器学习奏效的本质

  那么为什么机器学习模型通过在有限的数据上训练后,就可以在其他没见过的数据上做出一定精度的预测呢?在机器学习里,泛化能力(generalization ability)被用来描述一个智能模型在没见过的数据上的预测性能。一般使用泛化误差来量化一个模型的泛化能力,具体定义为模型在给定数据分布下的损失函数值的期望: R ( f ) = ∫ ( x , y ) p ( x , y ) L ( y , f ( x ) ) d ( x , y ) R(f)=\int_{(\boldsymbol{x},y)}p(\boldsymbol{x},y)L(y,f(\boldsymbol{x})) \text{d}(\boldsymbol{x},y) R(f)=(x,y)p(x,y)L(y,f(x))d(x,y)

  机器学习的底层是数理统计,其基本原理是,相似的数据拥有相似的标签。机器学习模型对于新数据的标签预测的“底气”在于见过类似的数据,这样的泛化能力可以被称为统计泛化。定性来讲,如果预测任务越简单,训练数据量越大,那么学到的机器学习模型的泛化能力就越强。另一方面,选择的机器学习模型的复杂性和其泛化能力并没有直接的对应关系。具体来说,模型空间越复杂,其建模能力越强,但也越需要足够的训练数据来支撑,否则模型可能由于“过拟合”数据而导致其泛化能力低下。

五、归纳偏置:机器学习模型的“天赋”

  在给定的任务和训练数据集下,不同的机器学习模型训练出来的性能总是不同的,或者反过来说,让不同的机器学习模型的给定任务下达到相同的泛化能力,需要的训练数据量往往也是不同的。这背后的原因是,不同的机器学习模型对特定数据模式的归纳偏置(inductive bias)不同。所谓归纳偏置,就是指模型对问题的先验假设,比如假设空间上相邻的样本有相似的特征。归纳偏置可以让模型在缺乏对样本的知识时也能给出预测,对某类数据的归纳偏置更强的模型能够更快地学到其中的模式。例如神经网络模型对同分布域的感知数据的归纳偏置就很强,处理图像和语音的模式识别任务效果非常好;而树模型对混合离散连续的结构化数据的归纳偏置很强,对于银行表单数据和医疗风险的预测效果很好。可以说,归纳偏置就是机器学习模型的天赋。图2展示了线性分类模型和圆形分类模型的分类决策边界。可以看出当数据分布在直线两侧时,线性分类模型可以很轻松地将两类数据分开,而当数据呈里外两类分布时,圆形分类模型则能更容易地将两类数据分开,这体现出两个模型归纳偏置的不同。

bias

图2 不同模型有不同的天然决策边界

  因此,对于不同的任务、不同的数据,选择怎样的模型是机器学习算法工程师需要重点考虑的。在企业里,一个好的机器学习算法工程师能根据自己的经验,为公司不同的业务选择适合的模型,这样能提升模型预测的精度,提升业务效率,或者减少模型选型的更迭次数,节约开发成本。

六、机器学习的限制

  至少在目前阶段,机器学习并不是万能的,它在以下几个方面存在限制:

  • 数据限制:在某些场景,即使使用了所有的数据,也可能不足以训练出一个令人满意的预测模型。在算力允许的情况下,人们倾向于设计越来越复杂的模型,例如千亿参数级别的线性模型或者深度神经网络模型,但与之匹配的训练数据量却比较难以跟上。以互联网企业用户行为预测任务为例,为了训练复杂度更高的模型,需要匹配更多的训练数据,因而不得不用比较早期的数据来支撑,但用户在互联网平台的行为模式有一定时效性,所以使用较为过时的数据可能并不能帮助模型进一步提升预测精度。

  • 泛化能力限制:机器学习的统计泛化能力并非使它无所不能。人工智能场景中有不少任务是缺乏数据或是要求举一反三的,这需要逻辑推理技术的组合泛化能力。因此,我们认为,在通往强人工智能(或称为通用人工智能)的道路上,机器学习是重要但并非唯一需要的技术。现在也有一些新兴的国际研讨会或者学术会议聚焦研究机器学习和符号逻辑的融合方法,旨在让机器同时拥有统计泛化和组合泛化能力,以解决更加复杂的智能任务。

  • 使用形态限制:就像上文描述的公式 f ∗ = M L ( D ) f^*=\mathrm{ML}(\mathcal{D}) f=ML(D) 所表达的,目前机器学习主要使用的形态是一个针对特定任务,输入数据集,输出训练好的模型的工具。这距离通用人工智能(或者强人工智能)还有较远的距离。未来的机器学习在具备了更好的性能条件下,可以在不断收集的数据上做持续学习,能自动判别和选择新的需要学习的任务,能从过去多种任务的学习过程中总结更高效的学习方法,在新任务中做到小样本学习,融入人类的知识库并做到“举一反三”的组合泛化。

相关文章:

【机器学习基础】初探机器学习

【作者主页】Francek Chen 【专栏介绍】⌈Python机器学习⌋ 机器学习是一门人工智能的分支学科,通过算法和模型让计算机从数据中学习,进行模型训练和优化,做出预测、分类和决策支持。Python成为机器学习的首选语言,依赖于强大的开…...

SpringBoot轻松实现多数据源切换

一.需求背景 项目需要实现在多个数据源之间读写数据,例如在 A 数据源和 B 数据源读取数据,然后在 C 数据源写入数据 或者 部分业务数据从 A 数据源中读取、部分从B数据源中读取诸如此类需求。本文将简单模拟在SpringBoot项目中实现不同数据源之间读取数…...

Qt 5 当类的信号函数和成员函数,函数名相同时,连接信号和槽的写法。

前言:因为项目需要,软件要在windows7上运行,然后项目目前是qt6写的,然后搜索资料,需要qt5.15.2或之前的版本才能在win7上运行,于是下载了qt5.15.2,将qt6的代码在qt5编译时,很多错误&…...

Vuex 介绍及示例

Vuex 是 Vue.js 的一个状态管理模式和库,用于管理 Vue 应用中的全局状态。它是专门为 Vue.js 应用设计的,充分利用了 Vue 的细粒度响应系统来高效地更新状态。以下是对 Vuex 的一些介绍和它的基本使用方法: 主要概念 State(状态&…...

【elementui】记录如何重命名elementui组件名称

在main.js中,就是引入elementui的文件中 import ElementUI from element-ui import { Tree } from element-uiVue.use(ElementUI) Vue.component(el-tree-rename, Tree)...

MySQL面试篇章—MySQL锁机制

文章目录 MySQL的锁机制表级锁 & 行级锁排它锁和共享锁InnoDB行级锁行级锁间隙锁意向共享锁和意向排它锁 InnoDB表级锁死锁锁的优化建议MVCC多版本并发控制MyISAM表级锁表级锁并发插入优化锁调度优化 MySQL的锁机制 表级锁 & 行级锁 表级锁:对整张表加锁&…...

OAK相机支持的图像传感器有哪些?

相机支持的传感器 在 RVC2 上,固件必须具有传感器配置才能支持给定的相机传感器。目前,我们支持下面列出的相机传感器的开箱即用(固件中)传感器配置。 名称 分辨率 传感器类型 尺寸 最大 帧率 IMX378 40563040 彩色 1/2.…...

网络安全威胁情报是什么,它对代工生产(OEM)意味着什么?

随着汽车数字环境的不断变化,网络安全基础设施及其面临的威胁也日趋复杂。 为了更好地识别、理解并最终预防这些风险,网络安全威胁情报(CTI)的管理应是一个综合多方面的过程。 以下是CTI对OEM的意义,以及如何利用网络…...

【基础篇】Docker 架构与组件 TWO

嗨,小伙伴们!我是小竹笋,一名热爱创作的工程师。上一篇我们聊了聊 Docker 的历史与发展、与虚拟机的对比以及它在行业中的应用。今天,让我们更进一步,深入探讨 Docker 的架构与关键组件。 欢迎订阅公众号:…...

03。正式拿捏ArkTS语言第一天

1, 打印日志命令 : console.log() 2, 三种基本数据类型: number 数字类型 (数字) string 字符串类型(例如:“我是字符串”) boolean 布尔类型 (true 或者 false) ***…...

【PyTorch][chapter 27][李宏毅深度学习][attention-3]

前言: 前面重点讲了self-attention, mulitHead self-attention. 目录: self-attention positional Encoding 语音处理例子 跟CNN区别 跟 RNN 区别 一 self-attention 回顾 优点 1 解决了长序列依赖问题 2 并行计算 缺点 1 开销变大 增加了 Q…...

java-数据结构与算法-02-数据结构-05-栈

文章目录 1. 栈1. 概述2. 链表实现3. 数组实现4. 应用 2. 习题E01. 有效的括号-Leetcode 20E02. 后缀表达式求值-Leetcode 120E03. 中缀表达式转后缀E04. 双栈模拟队列-Leetcode 232E05. 单队列模拟栈-Leetcode 225 1. 栈 1. 概述 计算机科学中,stack 是一种线性的…...

Python 管理依赖包(pip, virtualenv)

在Python编程中,管理依赖包是开发工作的重要组成部分。正确管理依赖包可以确保代码在不同环境中的一致性和可移植性,避免版本冲突和依赖地狱等问题。Python中常用的依赖包管理工具包括pip和virtualenv。 一、pip pip是Python官方推荐的包管理工具&…...

Bigdecimal 导出为excel时显示未0E-10,不是0,怎么解决

在使用 ​​BigDecimal​​​ 导出到 Excel 时,如果遇到显示为 ​​0E-10​​​ 而不是 ​​0​​​ 的问题,这通常是因为 ​​BigDecimal​​​ 对象的精度问题。​​0E-10​​​ 表示的是 ​​0​​​ 乘以 10 的 -10 次方,这在数学上等同于…...

springboot项目从jdk8升级为jdk17过程记录

背景:公司有升级项目jdk的规划,计划从jdk8升级到jdk11 开始 首先配置本地的java_home 参考文档:Mac环境下切换JDK版本及不同的maven-CSDN博客 将pom.xml中jdk1.8相关的版本全部改为jdk17,主要是maven编译插件之类的&#xff0c…...

list、tuple、set和dict传参机制

1、list、tuple、set和dict传参机制 # -------------list------------- def f1(my_list):print(f"②f1()my_list:{my_list} 地址是:{id(my_list)}") # ["tom","mary","hsp"] 0x1122my_list[0]"jack"print(f&quo…...

Redis快速入门基础

Redis入门 Redis是一个基于内存的 key-value 结构数据库。mysql是二维表的接口数据库 优点: 基于内存存储,读写性能高 适合存储热点数据(热点商品、资讯、新闻) 企业应用广泛 官网:https://redis.io 中文网:https://www.redis.net.cn/ Redis下载与…...

python基础介绍

这次的专题是关于python的知识点,加油! 文章目录 1 什么是计算机(1.1 哪些可以称为计算机?(以下)(1.2 计算机可以完成的工作有哪些?(1.3 一台计算机由什么构成? 2. 什么是编程(2.1 编…...

SSRF中伪协议学习

SSRF常用的伪协议 file:// 从文件系统中获取文件内容,如file:///etc/passwd dict:// 字典服务协议,访问字典资源,如 dict:///ip:6739/info: ftp:// 可用于网络端口扫描 sftp:// SSH文件传输协议或安全文件传输协议 ldap://轻量级目录访问协议 tftp:// 简单文件传输协议 gopher…...

Java | Leetcode Java题解之第284题窥视迭代器

题目&#xff1a; 题解&#xff1a; class PeekingIterator<E> implements Iterator<E> {private Iterator<E> iterator;private E nextElement;public PeekingIterator(Iterator<E> iterator) {this.iterator iterator;nextElement iterator.next(…...

哈尔滨等保定级的常见问题

一、哈尔滨等保测评定级标准理解问题 哈尔滨等保测评如何确定信息系统的安全保护等级&#xff1f; 信息系统的安全保护等级应根据其在国家安全、经济建设、社会生活中的重要程度&#xff0c;以及一旦遭到破坏后对国家安全、社会秩序、公共利益以及公民、法人和其他组织的合法权…...

springAOP理解及事务

AOP&#xff1a; springAOP是什么&#xff1a; AOP&#xff1a;Aspect Oriented Programming&#xff08;面向切面编程、面向方面编程&#xff09;&#xff0c;其实就是面向特定方法编程。 使用场景&#xff1a; 比如你想统计业务中每个方法的执行耗时&#xff0c;那我们最…...

Optional类的使用 java8(附代码)

&#x1f370; 个人主页:_小白不加班__ &#x1f35e;文章有不合理的地方请各位大佬指正。 &#x1f349;文章不定期持续更新&#xff0c;如果我的文章对你有帮助➡️ 关注&#x1f64f;&#x1f3fb; 点赞&#x1f44d; 收藏⭐️ 文章目录 一、什么是Optional&#xff1f;二、…...

企业利用AI智能名片S2B2C商城小程序参与社区团购的风险与机遇分析

摘要 在新零售浪潮的推动下&#xff0c;社区团购以其独特的商业模式迅速崛起&#xff0c;成为连接消费者与供应商的重要桥梁。企业纷纷探索如何有效利用这一新兴渠道&#xff0c;以扩大市场份额、提升品牌影响力。AI智能名片S2B2C商城小程序的引入&#xff0c;为企业参与社区团…...

全链路追踪 性能监控,GO 应用可观测全面升级

作者&#xff1a;古琦 01 介绍 随着 Kubernetes 和容器化技术的普及&#xff0c;Go 语言不仅在云原生基础组件领域广泛应用&#xff0c;也在各类业务场景中占据了重要地位。如今&#xff0c;越来越多的新兴业务选择 Golang 作为首选编程语言。得益于丰富的 RPC 框架&#xff…...

深入探索CSS3的Media Query:打造响应式网页设计的利器

在今天的互联网世界中&#xff0c;随着设备种类和屏幕尺寸的多样化&#xff0c;响应式网页设计&#xff08;Responsive Web Design, RWD&#xff09;已成为不可或缺的一部分。CSS3中的Media Query正是这一设计理念的实现利器&#xff0c;它允许开发者根据用户的设备特性和屏幕尺…...

DDD(Domain-Driven Design)领域驱动设计

在软件开发中&#xff0c;DDD&#xff08;Domain-Driven Design&#xff0c;领域驱动设计&#xff09;是一种方法论&#xff0c;它强调在开发过程中将业务领域的知识和规则作为核心。DDD的目标是通过理解和建模业务领域来创建更好的软件系统。本文将详细讲解DDD的基本概念、原则…...

基于k8s快速搭建docker镜像服务的demo

基于k8s快速搭建docker镜像服务的demo 一、环境准备 如标题&#xff0c;你需要环境中有和2个平台&#xff0c;并且服务器上也已经安装好docker服务 接下来我来构建一个docker镜像&#xff0c;然后使用harbork8s来快速部署服务demo 二、部署概述 使用docker构建镜像&#x…...

“论大数据处理架构及其应用”写作框架,软考高级论文,系统架构设计师论文

论文真题 大数据处理架构是专门用于处理和分析巨量复杂数据集的软件架构。它通常包括数据收集、存储、处理、分析和可视化等多个层面&#xff0c;旨在从海量、多样化的数据中提取有价值的信息。Lambda架构是大数据平台里最成熟、最稳定的架构&#xff0c;它是一种将批处理和流…...

tarojs项目启动篇

TaroJS 是一个开放式跨端开发解决方案&#xff0c;使用 React 语法规范来开发多端应用&#xff08;包括小程序、H5、React Native 等&#xff09;。它可以帮助开发者高效地构建出在不同端上运行一致的应用。以下是启动 TaroJS 项目&#xff08;本来就有的旧项目&#xff09;的步…...

Maven打包时将本地 jar 加入 classpath

在使用 maven 编译项目时&#xff0c;我们有时候会需要引入本地的 jar 包作为依赖&#xff08;不部署到本地仓库&#xff09;&#xff0c;一般会使用 scope 为 system 的标签来引入&#xff0c;如下所示&#xff1a; <dependency><groupId>com.example</groupI…...

Spring Boot打出的jar包为什么可以独立运行

闲来无事&#xff0c;浏览网页看到有人说jar包为什么可以独立运行&#xff0c;想起前端时间写的jar打包后无法正常运行处理。jar解压缩后有多个文件夹&#xff0c;内部存放运行所需jar包和一些配置文件&#xff0c;本文做一个简单介绍。 JAR包和WAR包区别 在Java开发中&#…...

“微软蓝屏”事件:网络安全与稳定性的深刻反思

&#x1f308;所属专栏&#xff1a;【其它】✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的点…...

【技术升级】Docker环境下Nacos平滑升级攻略,安全配置一步到位

目前项目当中使用的Nacos版本为2.0.2&#xff0c;该版本可能存在一定的安全风险。软件的安全性是一个持续关注的问题&#xff0c;尤其是对于像Nacos这样的服务发现与配置管理平台&#xff0c;它在微服务架构中扮演着核心角色。随着新版本的发布&#xff0c;开发团队会修复已知的…...

[题解]CF1401E.Divide Square(codeforces 05)

题目描述 There is a square of size 106106106106 on the coordinate plane with four points (0,0)(0,0) , (0,106)(0,106) , (106,0)(106,0) , and (106,106)(106,106) as its vertices. You are going to draw segments on the plane. All segments are either horizonta…...

软考高级第四版备考--第32天(新一代信息技术及应用)

1、物联网 1.1技术基础 1.1.1感知层&#xff1a;由各种传感器构成&#xff0c;包括温度传感器&#xff0c;二维码标签、RFID标签和读写器&#xff0c;摄像头&#xff0c;GPS等感知终端。感知层是物联网识别物体、采集信息的来源。 1.1.2网络层&#xff1a;由各种网络&#x…...

【RabbitMQ】MQ相关概念

一、MQ的基本概念 定义&#xff1a;MQ全称为Message Queue&#xff0c;是一种提供消息队列服务的中间件&#xff0c;也称为消息中间件。它允许应用程序通过读写队列中的消息来进行通信&#xff0c;而无需建立直接的连接。作用&#xff1a;主要用于分布式系统之间的通信&#x…...

【MySQL是怎样运行的 | 第二篇】MySQL三大日志文件

文章目录 2.MySQL三大日志文件2.1日志文件列表2.1.1 redo log2.1.2 bin log2.1.3 undo log 2.2redo log日志详讲2.3 binglog和redo log有什么区别&#xff1f;2.4一条更新语句的执行过程 2.MySQL三大日志文件 2.1日志文件列表 redo log&#xff1a;重做日志&#xff0c;记录了…...

视图、存储过程、触发器

一、视图 视图是从一个或者几个基本表&#xff08;或视图&#xff09;导出的表。它与基 本表不同&#xff0c;是一个虚表&#xff0c;视图只能用来从查询&#xff0c;不能做增删改(虚拟的表) 1.创建视图 创建视图的语法&#xff1a; create view 视图名【view_xxx / v_xxx】 a…...

【学习笔记】解决Serial Communication Library编译问题

【学习笔记】解决编译 Serial Communication Library 时的 Catkin 依赖问题 Serial Communication Library 是一个用 C 编写的用于连接类似 rs-232 串口的跨平台库。它提供了一个现代的 C 接口&#xff0c;它的工作流程设计在外观和感觉上与 PySerial 相似&#xff0c;但串口速…...

在 Windows 环境下实现负载均衡:提升系统性能与可靠性的关键技术

Windows 环境下的负载均衡&#xff1a;提升系统性能与可靠性的关键技术 负载均衡&#xff08;Load Balancing&#xff09;是现代网络架构中不可或缺的一部分&#xff0c;通过将请求分配到多台服务器上来提高系统的性能和可靠性。本文将介绍在 Windows 环境下使用负载均衡的基本…...

【Linux】-----工具篇(自动化构建工具make/makefile)

目录 前言 一、是什么&#xff1f; 二、怎么样的&#xff1f; 三、原理及细节 图解代码 细节1&#xff1a;make工作规则 ①依赖文件存在 ②依赖文件不存在 ③依赖文件列表为空(特殊) .PHONY关键字 细节2&#xff1a;makefile识别程序需要重新编译&#xff1f; 四、…...

图的遍历:深度优先搜索(DFS)

引言 图遍历是指按照一定的顺序访问图中的每个顶点。遍历图的两种主要方法是深度优先搜索&#xff08;Depth-First Search, DFS&#xff09;和广度优先搜索&#xff08;Breadth-First Search, BFS&#xff09;。本文将详细介绍深度优先搜索的定义、算法及其实现。 深度优先搜…...

普元EOS学习笔记-某些版本的EOS提供的maven获取依赖失败的问题解决

前言 普元EOS的开发包中&#xff0c;提供了maven&#xff0c;因为EOS项目的某些依赖只能从普元官方仓库获取&#xff0c;因此&#xff0c;编译EOS项目必须使用EOS提供的maven。 maven拉取依赖失败 某些版本的EOS提供的maven在编译EOS项目的时候会出现拉取失败的现象。 [FATA…...

Pycharm + Pyside6

1. 使用 Qt designer 创建 UI 文件 2. 使用 UIC 工具生成 ui_.py 文件 3. 自定义类导入ui.py 文件的窗口类 4.自定义窗口继承UI窗体类 5. self.setupUi(self) from PySide6.QtWidgets import QApplication, QWidget, QComboBox, QVBoxLayout from ui_test import Ui_Formc…...

强化学习之价值迭代算法动态规划求解悬崖漫步环境(CliffWalking)最优策略及最优状态价值函数

class CliffWalkingEnv:def __init__(self,ncol12,nrow4):self.ncolncol#定义网格世界的列self.nrownrow#定义网格世界的行self.Pself.createP()#转移矩阵P[state][action][(p,next_state,reward,done)]包含下一个状态和奖励def createP(self):P[[[]for i in range(4)]for j in…...

javascript deriveKey和deriveBits()由主密钥派生出新的密钥进行加密

deriveKey 方法的完整示例&#xff0c;演示如何使用 HMAC 作为密钥派生函数&#xff08;KDF&#xff09;来从一个给定的秘密&#xff08;如密码&#xff09;派生出一个新的 AES 加密密钥。 //创建一个函数来生成随机盐function getRandomSalt(length){let arraynew Uint8Array…...

基于微信小程序的自习室选座系统/基于Java的自习室选座系统/自习室管理系统的设计与实现

获取源码联系方式请查看文章结尾&#x1f345; 摘要 自习室选座是学校针对用户必不可少的一个部分。在学校的整个过程中&#xff0c;学生担负着最重要的角色。为满足如今日益复杂的管理需求&#xff0c;各类微信小程序自习室选座也在不断改进。本课题所设计的小程序自习室选座系…...

echarts所遇到的问题,个人记录

TreeMap 矩形树图&#xff0c;label设置富文本之后&#xff0c;无法垂直居中 font-size 支持rem&#xff0c;其余不支持 font-size 支持 rem&#xff0c;但是其余的属性如height&#xff0c;width等不支持 echarts-for-react 绑定事件&#xff0c;会覆盖实例上绑定的 当给cha…...

Skyeye云智能制造企业版源代码全部开放

智能制造一体化管理系统 [SpringBoot2 - 快速开发平台]&#xff0c;适用于制造业、建筑业、汽车行业、互联网、教育、政府机关等机构的管理。包含文件在线操作、工作日志、多班次考勤、CRM、ERP 进销存、项目管理、EHR、拖拽式生成问卷、日程、笔记、工作计划、行政办公、薪资模…...