一文全解经典机器学习算法之支持向量机SVM(关键词:SVM,对偶、间隔、支持向量、核函数、特征空间、分类)

news2024/11/25 23:58:29

文章目录

  • 一:概述
  • 二:间隔与支持向量
  • 三:对偶问题
    • (1)什么是对偶问题
    • (2)SVM对偶问题
    • (3)SMO算法
  • 四:核函数
    • (1)核函数的概述和作用
    • (2)求解

之前所介绍的逻辑回归是基于似然度的分类方法,通过对数据概率进行建模来得到软输出。但这种分类方法其实稍加“繁琐”,因为要估计数据的概率分布作为中间步骤。这就像当一个人学习英语时,他只要直接报个班或者自己看书就行了,而不需要先学习诘屈聱牙的拉丁语作为基础。既然解决分类问题只需要一个简单的判别式,那就没有必要费尽心思计算似然概率或者后验概率。而本节所要介绍的支持向量机(SVM)就是这样一种方法。支持向量机并不关系数据的概率,而是要基于判别式找到最优的超平面作为二分类问题的决策边界,也正是正是这化繁为简的原则给支持向量机带来了超乎寻常的优良效果

一:概述

如下图是一个二维平面上的线性可分数据集,那它的决策边界就是一条简单的直线。可这条能将所有训练数据正确区分的直线是不是唯一的呢?显然,答案是否定的,事实上,像这样的能正确 区分数据的直线有无数条

但问题来了:这无数条直线中应该选择哪一条作为最优决策边界呢?我想作为一个具有机器学习算法常识的人来说,虽然对SVM还不了解,但凭直觉一定会选择 H 3 H_{3} H3。之所以不选择 H 2 H_{2} H2是因为,边界 H 2 H_{2} H2过于靠近一些训练数据,那么这些靠近边界的数据受噪声或干扰影响时,得到的真实数据就更容易从一个类别跳到另一个类别,导致分类错误和泛化性能下降。相比之下,边界 H 3 H_{3} H3对训练数据局部扰动的“容忍性”最好,换言之,边界 H 3 H_{3} H3所产生的分类结果是最鲁棒的,对未见示例的泛化能力最强

在这里插入图片描述

我们换个角度看。假设存在能够将数据完全区分开来的两条平行线,所有正类数据点都在这两条平行 线的一侧,所有负类数据点则在平行线的另一侧。更重要的是,我们要让这两条平行线中的 一条经过一个正类点,另一条则经过一个负类点。不难发现,这两个点就是欧氏距离最近的 两个异类点了。接下来,让这两条平行线以它们各自经过的异类点为不动点进行旋转,同时保证平行关系和 分类特性不变。在旋转的过程中,两个不动点之间的欧氏距离是不变的,但两条线的斜率一 直在改变,因此它们之间的距离也会不断变化。当其中一条直线经过第二个数据点时,两条 直线之间的距离就会达到最大值。这时,这两条平行线中间的直线就是最优决策边界。后面我们会说到,落在两条平行线上的几个异类点就是支持向量 (support vector)。如果将最优决策边界看成一扇双向的推拉门,把这扇门向两个方向 推开就相当于两条平行线的距离逐渐增加。当这两扇门各自接触到支持向量时停止移动,留 下来的门缝就是两个类别之间的间隔

在这里插入图片描述

二:间隔与支持向量

在样本空间中,划分超平面可通过如下线性方程来描述

ω T x + b = 0 \omega^{T}x+b=0 ωTx+b=0

其中 ω = ( ω 1 ; ω 2 ; . . . ; ω d ) \omega=(\omega_{1};\omega_{2};...;\omega_{d}) ω=(ω1;ω2;...;ωd)法向量,决定了超平面的方向, b b b位移项,决定了超平面与原点之间的距离。显然,划分超平面可由法向量 ω \omega ω和位移 b b b确定。将其记为 ( ω , b ) (\omega,b) (ω,b),样本空间中任意点 x x x到超平面 ( ω , b ) (\omega,b) (ω,b)的距离可以写为

r = ∣ ∣ w T x + b ∣ ∣ ∣ ∣ ω ∣ ∣ r=\frac{||w^{T}x+b||}{||\omega||} r=∣∣ω∣∣∣∣wTx+b∣∣

假设超平面 ( ω , b ) (\omega,b) (ω,b)能将训练样本正确分类,即对于 ( x i , y i ) ∈ D (x_{i},y_{i})\in D (xi,yi)D,则有

  • 记为(1)式

{ w T x i + b ⩾ + 1 , y i = + 1 w T x i + b ⩽ − 1 , y i = − 1 \left\{\begin{array}{ll}\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b \geqslant+1, & y_{i}=+1 \\\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b \leqslant-1, & y_{i}=-1\end{array}\right. {wTxi+b+1,wTxi+b1,yi=+1yi=1

如下图所示,距离超平面最近的这几个训练样本点使上式等号成立,它们被称为支持向量,两个异类支持向量到超平面的距离之和为 g a m m a = 2 ∣ ∣ ω ∣ ∣ gamma=\frac{2}{||\omega||} gamma=∣∣ω∣∣2,称其为间隔

  • 间隔(margin)是支持向量机的核心概念之一,它是对支持向量到分离超平面的距离度量,可以进一步表示分类的正确性和可信程度
    • 几何间隔:是指一个样本点到分类超平面的距离
    • 函数间隔:是指一个样本点到分类超平面的距离再乘以该样本点的真实标签

在这里插入图片描述

支持向量机的基本思想就是找出能够正确划分数据集并且具有最大几何间隔的分离超平面。欲找到具有最大间隔的划分超平面,也就是要找到能满足(1)式中约束的参数 ω \omega ω b b b,使得 γ \gamma γ最大,也即

  • 记为(2)式

max ⁡ w , b 2 ∥ w ∥  s.t.  y i ( w T x i + b ) ⩾ 1 , i = 1 , 2 , … , m . \begin{aligned}\max _{\boldsymbol{w}, b} & \frac{2}{\|\boldsymbol{w}\|} \\\text { s.t. } & y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right) \geqslant 1, \quad i=1,2, \ldots, m .\end{aligned} w,bmax s.t. w2yi(wTxi+b)1,i=1,2,,m.

显然,为了最大化间隔,仅需要最大化 ∣ ∣ ω ∣ ∣ − 1 ||\omega||^{-1} ∣∣ω1,这等价于最小化 ∣ ∣ ω ∣ ∣ 2 ||\omega||^{2} ∣∣ω2,于是(2)式可改写为

  • 记为(3)式

min ⁡ w , b 1 2 ∥ w ∥ 2  s.t.  y i ( w T x i + b ) ⩾ 1 , i = 1 , 2 , … , m . \begin{array}{ll}\min _{\boldsymbol{w}, b} & \frac{1}{2}\|\boldsymbol{w}\|^{2} \\\text { s.t. } & y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right) \geqslant 1, \quad i=1,2, \ldots, m .\end{array} minw,b s.t. 21w2yi(wTxi+b)1,i=1,2,,m.

三:对偶问题

(1)什么是对偶问题

对偶问题:是一种优化问题的转换方式。在对偶问题中,我们将原问题转换为另一个与之等价的问题,这个问题通常更易于求解或分析。对偶问题在数学和工程领域中都有广泛的应用。以线性规划问题为例,我们希望最小化或最大化一个线性函数,满足一组线性不等式或等式限制条件。这个问题可以通过线性规划算法来求解。与此同时,我们可以将这个线性规划问题转化为一个对偶问题,这个对偶问题同样可以用线性规划算法求解。对偶问题的关键是构建一个与原问题等价的问题,使得对偶问题的解能够提供原问题的下界或上界。对于线性规划问题,对偶问题的解提供了原问题的最优解的下界或上界,这可以通过所谓的弱对偶定理和强对偶定理来证明

当我们提到对偶问题时,一个经典的例子是线性规划问题。假设我们有一个最小化的线性规划问题,如下所示

m i n . f ( x ) = c T x min.f(x)=c^{T}x min.f(x)=cTx

  • 约束条件为 A x ≥ b , x ≥ 0 Ax \geq b,x\geq 0 Axb,x0

其中 c , b c, b c,b A A A 是已知的向量和矩阵, x x x 是变量向量。现在,我们可以将其转换为一个对偶问题,如下所示

m a x . g ( y ) = b T y max.g(y)=b^{T}y max.g(y)=bTy

  • 在约束条件下 A T y ≤ c , y ≥ 0 A^{T}y\leq c,y\geq 0 ATyc,y0

这里的关键点在于构建一个与原问题等价的对偶问题。对偶问题可以从原问题中的约束条件中产生,每个约束条件都对应着对偶问题中的一个变量。在上述线性规划问题中,我们有两组约束条件,所以我们需要两个对偶变量 y 1 y_1 y1 y 2 y_2 y2。在对偶问题中,约束条件的符号与原问题中的符号相反。对于不等式约束,它在对偶问题中变为等式约束;对于等式约束,它在对偶问题中变为不等式约束。在这个例子中,我们可以通过求解对偶问题来确定原问题的最优解,同时我们也可以通过求解原问题来确定对偶问题的最优解

(2)SVM对偶问题

  • 间隔的作用体现在原理上,而对偶性的作用体现在实现上,虽然我们前面已经说明了最优决策边界,但是却无法求解最优边界,因此我们可以通过引入拉格朗日乘子将原始问题转化为对偶问题来找到最优解

(3)式本身是个凸二次规划问题,求解起来比较轻松,但是借助拉格朗日乘子,此问题就可以改写为所谓的广义拉格朗日函数。具体来说,对(3)式的每条约束添加拉格朗日乘子 α i ≥ 0 \alpha_{i}\geq 0 αi0,则该问题的拉格朗日函数可写为

  • 这个式子从另一个角度说明了为什么最优决策边界只取决于几个支持向量:对于不是支持向量的数据点来说,等式右边的 1 − y i ( ω T x i + b ) 1-y_{i}(\omega^{T}x_{i}+b) 1yi(ωTxi+b)是大于0的,因此在让 L ( ω , b , α ) L(\omega,b,\alpha) L(ω,b,α)最小化时,就必须把这些点的贡献给去除掉,去除的方式就是让系数 α i = 0 \alpha_{i}=0 αi=0
  • 记为(4)式
  • α = ( α 1 ) ; α 2 ; . . . ; α m \alpha=(\alpha_{1});\alpha_{2};...;\alpha_{m} α=(α1);α2;...;αm

L ( w , b , α ) = 1 2 ∥ w ∥ 2 + ∑ i = 1 m α i ( 1 − y i ( w T x i + b ) ) L(\boldsymbol{w}, b, \boldsymbol{\alpha})=\frac{1}{2}\|\boldsymbol{w}\|^{2}+\sum_{i=1}^{m} \alpha_{i}\left(1-y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right)\right) L(w,b,α)=21w2+i=1mαi(1yi(wTxi+b))

然后令 L ( ω , b , α ) L(\omega,b,\alpha) L(ω,b,α) ω \omega ω b b b的偏导为零可得

  • 分别记为(5)式和(6)式

ω = ∑ i = 1 m α i y i x i , 0 = ∑ i = 1 m α i y i \omega=\sum_{i=1}^{m}\alpha_{i}y_{i}x_{i},0=\sum_{i=1}^{m}\alpha_{i}y_{i} ω=i=1mαiyixi,0=i=1mαiyi

将(5)式代入(4)式,可将 ω \omega ω b b b消去,再考虑(6)式的约束,就可以得到(3)式的对偶问题如下

  • 记为(7)式

max ⁡ α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j  s.t.  ∑ i = 1 m α i y i = 0 , α i ⩾ 0 , i = 1 , 2 , … , m . \begin{aligned}\max _{\boldsymbol{\alpha}} & \sum_{i=1}^{m} \alpha_{i}-\frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_{i} \alpha_{j} y_{i} y_{j} \boldsymbol{x}_{i}^{\mathrm{T}} \boldsymbol{x}_{j} \\\text { s.t. } & \sum_{i=1}^{m} \alpha_{i} y_{i}=0, \\& \alpha_{i} \geqslant 0, \quad i=1,2, \ldots, m .\end{aligned} αmax s.t. i=1mαi21i=1mj=1mαiαjyiyjxiTxji=1mαiyi=0,αi0,i=1,2,,m.

虽然现在我们将原问题转变为了其对偶问题,但是这两者之间是否能够完全划等号还是一个未知数。仔细看,原函数求出的是 L ( ω , b , α ) L(\omega,b,\alpha) L(ω,b,α)最大值的下界,对偶函数求出的是 L ( ω , b , α ) L(\omega,b,\alpha) L(ω,b,α)最小值的下界,因此后者肯定不会大于前者,但也不是无条件相等。好在数学上可以证明,当上述过程满足KKT条件(Karush-Kuhn-Tucker)时,原问题和对偶问题才能殊途同归。如下,KKT条件要求

  • 记为(8)式

{ α i ⩾ 0 ; y i f ( x i ) − 1 ⩾ 0 ; α i ( y i f ( x i ) − 1 ) = 0 \left\{\begin{array}{l}\alpha_{i} \geqslant 0 ; \\y_{i} f\left(\boldsymbol{x}_{i}\right)-1 \geqslant 0 ; \\\alpha_{i}\left(y_{i} f\left(\boldsymbol{x}_{i}\right)-1\right)=0\end{array}\right. αi0;yif(xi)10;αi(yif(xi)1)=0

于是,对于任意训练样本 ( x i , y i ) (x_{i},y_{i}) (xi,yi),总有 α i = 0 \alpha_{i}=0 αi=0 y i f ( x i ) = 1 y_{i}f(x_{i})=1 yif(xi)=1

  • α i = 0 \alpha_{i}=0 αi=0,则该样本不会对 f ( x ) f(x) f(x)有任何影响(前面已经说明)
  • α i > 0 \alpha_{i}>0 αi>0,则必有 y i f ( x i ) = 1 y_{i}f(x_{i})=1 yif(xi)=1,所对应的样本点位于最大间隔边界上,是一个支持向量。和前面叙述一致,这显示输出了支持向量机的一个重要性质:训练完成后,大部分训练样本都不需要保留,最终模型仅与支持向量有关

(3)SMO算法

  • (7)式是一个二次规划问题,可以使用通用的二次规划算法来求解,然而该问题的规模正比于训练样本数,所以会在实际任务中造成很大开销。为了避开这个障碍,人们利用问题本身的特征,提出了很多高效的算法,SMO算法就是其中的代表

SMO(Sequential Minimal Optimization):基本思想是将大规模的二次规划问题分解为多个较小的二次规划子问题,并通过求解这些子问题来优化原始问题。具体来说,SMO算法在每次迭代中选择两个变量进行优化,并固定其他变量不变。这样,在每次迭代中,SMO算法都可以将原始问题转化为一个只有两个变量的二次规划子问题。接着,SMO算法使用解析公式来求解这个子问题的最优解,使得目标函数值有最大的增长。如果这个子问题的解满足一定的约束条件,则保留这个解并优化下一个子问题。否则,SMO算法会调整其中一个变量的值,并继续优化当前的子问题,直到收敛为止

下面内容借助周志强机器学习

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

四:核函数

(1)核函数的概述和作用

本文前面讨论中,假设训练样本是线性可分而定,也即存在一个划分超平面将训练样本正确分类。然后在现实任务中,原始样本空间也许并不存在一个能正确划分两类样本的超平面。例如经典的“异或”问题

在这里插入图片描述

对于这样的问题,可以将样本从原始空间映射到一个根高纬的特征空间,使得样本在这个特征空间内线性可分,如上图中的 ϕ \phi ϕ

对高纬空间上新生成的特征向量进行内积运算,便得到了核函数,其数学表达式如下

k ( x , x ′ ) = ϕ ( x ) T ϕ ( x ′ ) k(x,x\prime)=\phi(x)^{T}\phi(x\prime) k(x,x)=ϕ(x)Tϕ(x)

核函数的这个公式给出了生成条件而非判定条件。当给定特征的映射方式后,可以用它来计算核函数;但是当给出一个确定的函数时,如何判定它能不能作为核函数呢?梅塞尔定理(Mercer’s theorem)解决了这个判定问题,其内容为:是任何满足对称性和半正定性的函数都是某个高维希尔伯特空间的内积,只要一个函数满足这两个条件,它就可以用做核函数。但梅塞尔定理只是判定核函数的充分而非必要条件,不满足梅塞尔定理的函数也可能是核函数

之所以要将特征映射表示成核函数,是因为内积的引入简化了高维空间中的复杂运算。映射到高维空间后,待优化的对偶问题(7)式子就变成了

max ⁡ α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j ϕ ( x i ) T ϕ ( x j ) \max _{\boldsymbol{\alpha}} \sum_{i=1}^{m} \alpha_{i}-\frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_{i} \alpha_{j} y_{i} y_{j} \phi\left(\boldsymbol{x}_{i}\right)^{\mathrm{T}} \phi\left(\boldsymbol{x}_{j}\right) αmaxi=1mαi21i=1mj=1mαiαjyiyjϕ(xi)Tϕ(xj)

按照一般的思路,要直接计算上面的表达式就先得写出 ϕ ( ⋅ ) \phi(·) ϕ()的形式,再在新的高维特征空间上计算内积,但这在实际运算中存在很大困难。尤其是当 ϕ ( ⋅ ) \phi(·) ϕ()的表达式未知时,那这内积就没法计算了。可即使 ϕ ( ⋅ ) \phi(·) ϕ() 的形式已知,如果特征空间的维数较高,甚至达到无穷维的话,内积的运算也会非常困难

这时就需要核函数来发挥威力了,既然优化的对象是内积的结果,那么直接定义内积的表达式就可以了,何苦还要引入特征映射和特征空间这些个中间步骤呢?更重要的是,梅塞尔定理为这种捷径提供了理论依据,只要核函数满足对称性和半正定的条件,对应的映射空间就铁定存在。所以核函数的引入相当于隐式定义了特征映射和特征空间,无需关心这些中间结果的形式就能直接计算待优化的内积,从而大大简化计算

下表列出了一些常用的核函数
在这里插入图片描述

(2)求解

  • 以下借助周志强机器学习
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

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

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

相关文章

车载应用生态:小程序容器技术成为保障安全的有力措施

随着智能交通和车联网技术的快速发展,越来越多的车载应用程序(APP)进入人们的视野,从而推动了车载业务生态的不断发展。然而,车载应用程序的安全问题也引起了人们的广泛关注。为此,小程序容器技术作为一种有…

4.24每日一练

题目 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 来源:力扣(LeetCode) 链接:https://leetcod…

毕业设计 医学图像阅读器 DICOM CT MRI 阅读器 三维重建 可视化编程技术及应用

一、 概述 此系统实现了常见 VTK 四视图,实现了很好的 DICOM 图像显示,可用于 DICOM 超声 X线 CT MR 三维重建 拾取像素值 窗宽 窗位 像素,距离测量,角度测量,提供源码; 并且通过三维重建实现可视化。使用…

客快物流大数据项目(一百一十七):网关 Spring Cloud Gateway

文章目录 网关 Spring Cloud Gateway 一、简介 1、功能特性

OSCP-Exfiltrated(Subrion、exiftool提权)

目录 扫描 WEB 提权 其他方法 扫描 WEB 添加 host信息 访问了该网站,并立即注意到该网站上制作的CMS(Subrion CMS)。

机器学习笔记之密度聚类——DBSCAN方法

机器学习笔记之密度聚类——DBSCAN方法 引言基本思想概念介绍算法过程完整算法描述 DBSCAN \text{DBSCAN} DBSCAN的优点和缺陷 引言 本节将介绍密度聚类—— DBSCAN \text{DBSCAN} DBSCAN方法。 对于其他聚类任务的笔记: K-Means \text{K-Means} K-Means聚类算法&…

PXE高效批量网络装机

PXE 定义 PXE(预启动执行环境,在操作系统之前运行)是由Intel公司开发的网络引导技术,工作在client /server模式,允许客户机通过网络从远程服务器下载引导镜像,并加载安装文件或者整个操作系统。 具备以下三个优点 1 规模化: 同时…

高通 Android 12 framework添加自定义按键上报应用层

Android下添加新的自定义键值和按键处理流程 首先分析下Android下怎么添加新的自定义键值。在Android的原生系统中键值默认情况下是92个,从0-91;一般情况下,这些键值是够用的,但是如果想扩充的话,还是需要添加新的键值…

Linux系统应用编程(五)Linux网络编程(上篇)

本篇主要内容: Linux系统应用编程(五)Linux网络编程(上篇)一、网络基础1.两个网络模型和常见协议(1)OSI七层模型(物数网传会表应)(2)TCP/IP四层模…

详解C语言string.h中常用的14个库函数(一)

我计划讲解C语言string.h这个头文件中,最常用的14个库函数。为了让大家更加深入的理解这些函数,部分函数我会模拟实现。篇幅所限,如果文章太长了,可能会较难坚持读完,所以我会分几篇博客来讲述。本篇博客主要讲解的函数…

FPGA时序约束(三)时序约束基本路径的深入分析

系列文章目录 FPGA时序约束(一)基本概念入门及简单语法 FPGA时序约束(二)利用Quartus18对Altera进行时序约束 文章目录 系列文章目录前言基本时序路径时钟偏差寄存器到寄存器(reg2reg)建立时间余量保持时…

PHP实现以数组var_dump,array_combine等函数的方法功能举例

目录 前言 一、什么是数组 二、把两个数组合并成一个数组 1.1运行流程(思想) 1.2代码段 1.3运行截图 三、自动创建数组的一个案例 1.1运行流程(思想) 1.2代码段 1.3运行截图 前言 1.若有选择,可实现在目录里…

小朋友排队

[蓝桥杯 2014 省 B] 小朋友排队 题目描述 n n n 个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。 每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是 0 0 0。 如果某个小朋友…

Python 学习曲线 从 Python 新手到 Pro

Python 学习曲线 从 Python新手到 Pro 使用代码片段介绍: Python 是世界上最通用和使用最广泛的编程语言之一,以其简单性、可读性和多功能性而闻名。 在本文中,我们将探讨一系列示例场景,其中代码由具有三个不同专业知识水平的程序…

文件系统和动静态库

目录 再识文件属性 查看文件属性的原理 初识inode 了解磁盘 什么是磁盘 磁盘的结构 磁盘的存储结构 CHS寻址 磁盘的逻辑结构 使用LBA地址的意义 理解文件系统 页框和页帧 分治思想管理 Linux ext2文件系统 软硬链接 软链接 硬链接 文件的三个时间 动静态库 …

java运行python脚本,待完善版

参考资料: windows下调用CMD运行方式 兼容linux/windows,同步异步方式 指定特殊运行环境的运行(如:anaconda运行环境) 整合以上三种方式终极版源码 相关内容: 调用python脚本传参说明 如果不传参数,python脚本可以随意写,比如:

【课程介绍篇】C/C++后台开发岗位技能知识树

1 C/C后台开发岗位技能知识树 2 Linux C/C后台架构开发 成长体系课程 3 C技术历史更新 https://www.0voice.com/uiwebsite/html/courses/

《UVM实战》学习笔记——第七章 UVM中的寄存器模型2——期望值/镜像值、自动/显示预测、操作方式

文章目录 前言一、寄存器模型对DUT的模拟1.1 期望值和镜像值1.2 常见操作对期望值和镜像值的影响 二、prediction分类2.1 自动预测2.2 显式预测 三、访问寄存器方式四、mem和reg的联系和差别五、内建built_in sequence5.1 寄存器模型内建序列5.2 存储器模型内建序列5.3 禁止域名…

安装APP时弹窗未知风险未知开发者,还能下载吗?

随着移动互联网的不断普及,人们的日常生活已与手机密不可分。根据相关研究,在使用手机时,人们90%以上的时间都花在某些应用程序上,巨大的需求使得各种各样的APP被开发出来。然而人们在使用APP时必须更加注意其是否来源可信企业&am…

数据结构与算法基础-学习-21-查找之平衡二叉树(AVL树)

目录 一、个人理解 二、最小失衡子树 三、平衡调整的四种类型 1、LL型 2、RR型 3、LR型 4、RL型 四、如何平衡调整 1、LL型调整 2、LR型调整 五、宏定义 六、结构体类型定义 1、AVL树结点类型 2、AVL树类型 3、AVL树结点搜索路径类型 七、函数定义 1、初始化AV…