吴恩达机器学习笔记:第 7 周-12支持向量机(Support Vector Machines)12.1-12.3

news2024/11/26 4:27:47

目录

  • 第 7 周 12、 支持向量机(Support Vector Machines)
    • 12.1 优化目标
    • 12.2 大边界的直观理解

第 7 周 12、 支持向量机(Support Vector Machines)

12.1 优化目标

到目前为止,你已经见过一系列不同的学习算法。在监督学习中,许多学习算法的性能都非常类似,因此,重要的不是你该选择使用学习算法 A 还是学习算法 B,而更重要的是,应用这些算法时,所创建的大量数据在应用这些算法时,表现情况通常依赖于你的水平。比如:你为学习算法所设计的特征量的选择,以及如何选择正则化参数,诸如此类的事。还有一个更加强大的算法广泛的应用于工业界和学术界,它被称为支持向量机(Support Vector Machine)。与逻辑回归和神经网络相比,支持向量机,或者简称 SVM,在学习复杂的非线性方程时提供了一种更为清晰,更加强大的方式。因此,在接下来的视频中,我会探讨这一算法。在稍后的课程中,我也会对监督学习算法进行简要的总结。当然,仅仅是作简要描述。但对于支持向量机,鉴于该算法的强大和受欢迎度,在本课中,我会花许多时间来讲解它。它也是我们所介绍的最后一个监督学习算法。

正如我们之前开发的学习算法,我们从优化目标开始。那么,我们开始学习这个算法。为了描述支持向量机,事实上,我将会从逻辑回归开始展示我们如何一点一点修改来得到本质上的支持向量机。

在这里插入图片描述
那么,在逻辑回归中我们已经熟悉了这里的假设函数形式,和右边的 S 型激励函数。然而,为了解释一些数学知识.我将用z表示 θ T x θ^Tx θTx

现在考虑下我们想要逻辑回归做什么:如果有一个 𝑦 = 1的样本,我的意思是不管是在训练集中或是在测试集中,又或者在交叉验证集中,总之是 𝑦 = 1,现在我们希望ℎ𝜃(𝑥) 趋近 1。因为我们想要正确地将此样本分类,这就意味着当 ℎ𝜃(𝑥)趋近于 1 时, θ T x θ^Tx θTx 应当远大于 0,这里的>>意思是远远大于 0。这是因为由于 𝑧 表示 θ T x θ^Tx θTx,当 𝑧远大于 0 时,即到了该图的右边,你不难发现此时逻辑回归的输出将趋近于 1。相反地,如果我们有另一个样本,即𝑦 = 0。我们希望假设函数的输出值将趋近于 0,这对应于 θ T x θ^Tx θTx,或者就是 𝑧 会远小于 0,因为对应的假设函数的输出值趋近 0。
在这里插入图片描述
如果你进一步观察逻辑回归的代价函数,你会发现每个样本 (𝑥, 𝑦)都会为总代价函数,增加这里的一项,因此,对于总代价函数通常会有对所有的训练样本求和,并且这里还有一个 1 m \frac{1}{m} m1项,但是,在逻辑回归中,这里的这一项就是表示一个训练样本所对应的表达式。现在,如果我将完整定义的假设函数代入这里。那么,我们就会得到每一个训练样本都影响这一项。

现在,先忽略 1 m \frac{1}{m} m1 这一项,但是这一项是影响整个总代价函数中的这一项的。
现在,一起来考虑两种情况:
一种是𝑦等于 1 的情况;另一种是 𝑦 等于 0 的情况。在第一种情况中,假设 𝑦 = 1 ,此时在目标函数中只需有第一项起作用,因为𝑦 = 1时,
(1 − 𝑦)项将等于 0。因此,当在 𝑦 = 1 的样本中时,即在 (𝑥, 𝑦)中 ,我们得到 𝑦 = − l o g ( 1 1 + e − z ) −log(\frac{1}{1+e^{−z}}) log(1+ez1)这样一项,这里同上一张幻灯片一致。

我用 𝑧 表示 θ T x θ^Tx θTx,即: 𝑧 = θ T x θ^Tx θTx。当然,在代价函数中,𝑦 前面有负号。我们只是这样表示,如果 𝑦 = 1 代价函数中,这一项也等于 1。这样做是为了简化此处的表达式。如果画出关于𝑧 的函数,你会看到左下角的这条曲线,我们同样可以看到,当𝑧 增大时,也就是相
当于 θ T x θ^Tx θTx增大时,𝑧 对应的值会变的非常小。对整个代价函数而言,影响也非常小。这也就解释了,为什么逻辑回归在观察到正样本𝑦 = 1时,试图将 θ T x θ^Tx θTx设置得非常大。因为,在代价函数中的这一项会变的非常小。

现在开始建立支持向量机,我们从这里开始:我们会从这个代价函数开始,也就是 − l o g ( 1 1 + e − z ) −log(\frac{1}{1+e^{−z}}) log(1+ez1)一点一点修改,让我取这里的𝑧 = 1点,我先画出将要用的代价函数。
在这里插入图片描述

新的代价函数将会水平的从这里到右边(图外),然后我再画一条同逻辑回归非常相似的直线,但是,在这里是一条直线,也就是我用紫红色画的曲线,就是这条紫红色的曲线。那么,到了这里已经非常接近逻辑回归中使用的代价函数了。只是这里是由两条线段组成,即位于右边的水平部分和位于左边的直线部分,先别过多的考虑左边直线部分的斜率,这并不是很重要。但是,这里我们将使用的新的代价函数,是在𝑦 = 1的前提下的。你也许能想到,这应该能做同逻辑回归中类似的事情,但事实上,在之后的优化问题中,这会变得更坚定,并且为支持向量机,带来计算上的优势。例如,更容易计算股票交易的问题等等。

目前,我们只是讨论了𝑦 = 1的情况,另外一种情况是当𝑦 = 0时,此时如果你仔细观察代价函数只留下了第二项,因为第一项被消除了。如果当𝑦 = 0时,那么这一项也就是 0 了。所以上述表达式只留下了第二项。因此,这个样本的代价或是代价函数的贡献。将会由这一项表示。并且,如果你将这一项作为𝑧的函数,那么,这里就会得到横轴𝑧。现在,你完成了支持向量机中的部分内容,同样地,我们要替代这一条蓝色的线,用相似的方法。

在这里插入图片描述
如果我们用一个新的代价函数来代替,即这条从 0 点开始的水平直线,然后是一条斜线,像上图。那么,现在让我给这两个方程命名,左边的函数,我称之为cos𝑡1(𝑧),同时,右边函数我称它为cos𝑡0(𝑧)。这里的下标是指在代价函数中,对应的 𝑦 = 1 和 𝑦 = 0 的情况,拥有了这些定义后,现在,我们就开始构建支持向量机。

在这里插入图片描述
这是我们在逻辑回归中使用代价函数𝐽(𝜃)。也许这个方程看起来不是非常熟悉。这是因为之前有个负号在方程外面,但是,这里我所做的是,将负号移到了表达式的里面,这样做使得方程看起来有些不同。对于支持向量机而言,实质上我们要将这替换为cos𝑡1(𝑧),也就是cos𝑡1( θ T x θ^Tx θTx),同样地,我也将这一项替换为cos𝑡0(𝑧),也就是代价cos𝑡0( θ T x θ^Tx θTx)。这里的代价函数cos𝑡1,就是之前所提到的那条线。此外,代价函数cos𝑡0,也是上面所介绍过的那条线。因此,对于支持向量机,我们得到了这里的最小化问题,即:
在这里插入图片描述
然后,再加上正则化参数。现在,按照支持向量机的惯例,事实上,我们的书写会稍微有些不同,代价函数的参数表示也会稍微有些不同。

首先,我们要除去1/𝑚这一项,当然,这仅仅是由于人们使用支持向量机时,对比于逻辑回归而言,不同的习惯所致,但这里我所说的意思是:你知道,我将要做的是仅仅除去1/𝑚这一项,但是,这也会得出同样的 𝜃 最优值,好的,因为1/𝑚 仅是个常量,因此,你知道在这个最小化问题中,无论前面是否有1/𝑚 这一项,最终我所得到的最优值𝜃都是一样的。

第二点概念上的变化,我们只是指在使用支持向量机时,一些如下的标准惯例,而不是逻辑回归。因此,对于逻辑回归,在目标函数中,我们有两项:第一个是训练样本的代价,第二个是我们的正则化项,我们不得不去用这一项来平衡。这就相当于我们想要最小化𝐴加上正则化参数𝜆,然后乘以其他项𝐵对吧?这里的𝐴表示这里的第一项,同时我用 B 表示第二项,但不包括𝜆,我们不是优化这里的𝐴 + 𝜆 × 𝐵。我们所做的是通过设置不同正则参数𝜆达到优化目的。这样,我们就能够权衡对应的项,是使得训练样本拟合的更好。即最小化𝐴。还是保证正则参数足够小,也即是对于 B 项而言,但对于支持向量机,按照惯例,我们将使用一个不同的参数替换这里使用的𝜆来权衡这两项。你知道,就是第一项和第二项我们依照惯例使用一个不同的参数称为𝐶,同时改为优化目标,𝐶 × 𝐴 + 𝐵因此,在逻辑回归中,如果给定𝜆,一个非常大的值,意味着给予 B 更大的权重。而这里,就对应于将𝐶 设定为非常小的值,那么,相应的将会给𝐵比给𝐴更大的权重。因此,这只是一种不同的方式来控制这种权衡或者一种不同的方法,即用参数来决定是更关心第一项的优化,还是更关心第二项的优化。当然你也可以把这里的参数𝐶 考虑成1/𝜆,同 1/𝜆所扮演的角色相同,并且这两个方程或这两个表达式并不相同,因为𝐶 = 1/𝜆,但是也并不全是这样,如果当𝐶 = 1/𝜆时,这两个优化目标应当得到相同的值,相同的最优值 𝜃。因此,就用它们来代替。那么,我现在删掉这里的𝜆,并且用常数𝐶来代替。因此,这就得到了在支持向量机中我们的整个优化目标函数。然后最小化这个目标函数,得到 SVM 学习到的参数𝐶。
在这里插入图片描述
最后有别于逻辑回归输出的概率。在这里,我们的代价函数,当最小化代价函数,获得参数𝜃时,支持向量机所做的是它来直接预测𝑦的值等于 1,还是等于 0。因此,这个假设函数会预测 1。当 θ T x θ^Tx θTx大于或者等于 0 时,或者等于 0 时,所以学习参数𝜃就是支持向量机假设函数的形式。那么,这就是支持向量机数学上的定义。

在接下来的视频中,让我们再回去从直观的角度看看优化目标,实际上是在做什么,以及 SVM 的假设函数将会学习什么,同时也会谈谈如何做些许修改,学习更加复杂、非线性的函数。

12.2 大边界的直观理解

人们有时将支持向量机看作是大间距分类器。在这一部分,我将介绍其中的含义,这有助于我们直观理解 SVM 模型的假设是什么样的。

在这里插入图片描述
这是我的支持向量机模型的代价函数,在左边这里我画出了关于𝑧的代价函数cos𝑡1(𝑧),此函数用于正样本,而在右边这里我画出了关于𝑧的代价函数cos𝑡0(𝑧),横轴表示𝑧,现在让我们考虑一下,最小化这些代价函数的必要条件是什么。如果你有一个正样本,𝑦 = 1,则只有在𝑧 >= 1时,代价函数cos𝑡1(𝑧)才等于 0。

换句话说,如果你有一个正样本,我们会希望 θ T x θ^Tx θTx>=1,反之,如果𝑦 = 0,我们观察一下,函数cos𝑡0(𝑧),它只有在𝑧 <= −1的区间里函数值为 0。这是支持向量机的一个有趣性质。事实上,如果你有一个正样本𝑦 = 1,则其实我们仅仅要求 θ T x θ^Tx θTx大于等于 0,就能将该样本恰当分出,这是因为如果 θ T x θ^Tx θTx>0 大的话,我们的模型代价函数值为 0,类似地,如果你有一个负样本,则仅需要 θ T x θ^Tx θTx<=0 就会将负例正确分离,但是,支持向量机的要求更高,不仅仅要能正确分开输入的样本,即不仅仅要求 θ T x θ^Tx θTx>0,我们需要的是比 0 值大很多,比如大于等于 1,我也想这个比 0 小很多,比如我希望它小于等于-1,这就相当于在支持向量机中嵌入了一个额外的安全因子,或者说安全的间距因子。

当然,逻辑回归做了类似的事情。但是让我们看一下,在支持向量机中,这个因子会导致什么结果。具体而言,我接下来会考虑一个特例。我们将这个常数𝐶设置成一个非常大的值。比如我们假设𝐶的值为 100000 或者其它非常大的数,然后来观察支持向量机会给出什么结果?

如果 𝐶非常大,则最小化代价函数的时候,我们将会很希望找到一个使第一项为 0 的最优解。因此,让我们尝试在代价项的第一项为 0 的情形下理解该优化问题。比如我们可以把𝐶设置成了非常大的常数,这将给我们一些关于支持向量机模型的直观感受。
在这里插入图片描述
我们已经看到输入一个训练样本标签为𝑦 = 1,你想令第一项为 0,你需要做的是找到一个𝜃,使得 θ T x θ^Tx θTx >= 1,类似地,对于一个训练样本,标签为𝑦 = 0,为了使cos𝑡0(𝑧) 函数的值为 0,我们需要 θ T x θ^Tx θTx <= −1。因此,现在考虑我们的优化问题。选择参数,使得第一项等于 0,就会导致下面的优化问题,因为我们将选择参数使第一项为 0,因此这个函数的第一项为 0,因此是𝐶乘以 0 加上二分之一乘以第二项。这里第一项是𝐶乘以 0,因此可以将其删去,因为我知道它是 0。

这将遵从以下的约束: θ T x ( i ) θ^Tx^{(i)} θTx(i) >= 1,如果 𝑦(𝑖)是等于 1 的, θ T x ( i ) θ^Tx^{(i)} θTx(i) <= −1,如果样本𝑖是一个负样本,这样当你求解这个优化问题的时候,当你最小化这个关于变量𝜃的函数的时候,你会得到一个非常有趣的决策边界。
在这里插入图片描述
具体而言,如果你考察这样一个数据集,其中有正样本,也有负样本,可以看到这个数据集是线性可分的。我的意思是,存在一条直线把正负样本分开。当然有多条不同的直线,可以把正样本和负样本完全分开。

在这里插入图片描述

比如,这就是一个决策边界可以把正样本和负样本分开。但是多多少少这个看起来并不是非常自然是么?

或者我们可以画一条更差的决策界,这是另一条决策边界,可以将正样本和负样本分开,但仅仅是勉强分开,这些决策边界看起来都不是特别好的选择,支持向量机将会选择这个黑色的决策边界,相较于之前我用粉色或者绿色画的决策界。这条黑色的看起来好得多,黑线看起来是更稳健的决策界。在分离正样本和负样本上它显得的更好。数学上来讲,这是什么意思呢?这条黑线有更大的距离,这个距离叫做间距(margin)。

在这里插入图片描述
当画出这两条额外的蓝线,我们看到黑色的决策界和训练样本之间有更大的最短距离。然而粉线和蓝线离训练样本就非常近,在分离样本的时候就会比黑线表现差。因此,这个距离叫做支持向量机的间距,而这是支持向量机具有鲁棒性的原因,因为它努力用一个最大间距来分离样本。因此支持向量机有时被称为大间距分类器,而这其实是求解上一页幻灯片上优化问题的结果。

我知道你也许想知道求解上一页幻灯片中的优化问题为什么会产生这个结果?它是如何产生这个大间距分类器的呢?我知道我还没有解释这一点。我将会从直观上略述为什么这个优化问题会产生大间距分类器。总之这个图示有助于你理解支持向量机模型的做法,即努力将正样本和负样本用最大的间距分开。

在这里插入图片描述
在本节课中关于大间距分类器,我想讲最后一点:我们将这个大间距分类器中的正则化因子常数𝐶设置的非常大,我记得我将其设置为了 100000,因此对这样的一个数据集,也许我们将选择这样的决策界,从而最大间距地分离开正样本和负样本。那么在让代价函数最小化的过程中,我们希望找出在𝑦 = 1和𝑦 = 0两种情况下都使得代价函数中左边的这一项尽量为零的参数。如果我们找到了这样的参数,则我们的最小化问题便转变成:
在这里插入图片描述

事实上,支持向量机现在要比这个大间距分类器所体现得更成熟,尤其是当你使用大间距分类器的时候,你的学习算法会受异常点(outlier) 的影响。比如我们加入一个额外的正样本。

在这里插入图片描述
在这里,如果你加了这个样本,为了将样本用最大间距分开,也许我最终会得到一条类似这样的决策界,对么?就是这条粉色的线,仅仅基于一个异常值,仅仅基于一个样本,就将我的决策界从这条黑线变到这条粉线,这实在是不明智的。而如果正则化参数𝐶,设置的非常大,这事实上正是支持向量机将会做的。它将决策界,从黑线变到了粉线,但是如果C设置的小一点,如果你将 C 设置的不要太大,则你最终会得到这条黑线,当然数据如果不是线性可分的,如果你在这里有一些正样本或者你在这里有一些负样本,则支持向量机也会将它们恰当分开。因此,大间距分类器的描述,仅仅是从直观上给出了正则化参数𝐶非常大的情形,同时,要提醒你𝐶的作用类似于1/𝜆,𝜆是我们之前使用过的正则化参数。这只是𝐶非常大的情形,或者等价地 𝜆 非常小的情形。你最终会得到类似粉线这样的决策界,但是实际上应用支持向量机的时候,当𝐶不是非常非常大的时候,它可以忽略掉一些异常点的影响,得到更好的决策界。甚至当你的数据不是线性可分的时候,支持向量机也可以给出好的结果。

回顾 𝐶 = 1/𝜆,因此:
𝐶 较大时,相当于 𝜆 较小,可能会导致过拟合,高方差。
𝐶 较小时,相当于 𝜆 较大,可能会导致低拟合,高偏差。

我们稍后会介绍支持向量机的偏差和方差,希望在那时候关于如何处理参数的这种平衡会变得更加清晰。我希望,这节课给出了一些关于为什么支持向量机被看做大间距分类器的直观理解。它用最大间距将样本区分开,尽管从技术上讲,这只有当参数𝐶是非常大的时候是真的,但是它对于理解支持向量机是有益的。

本节课中我们略去了一步,那就是我们在幻灯片中给出的优化问题。为什么会是这样的?它是如何得出大间距分类器的?我在本节中没有讲解,在下一节课中,我将略述这些问题背后的数学原理,来解释这个优化问题是如何得到一个大间距分类器的。

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

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

相关文章

【Python】python学生体能考核成绩管理系统(数据库) (源码+报告)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

新版chrome 解决在http协议下无法调用摄像头和麦克风的问题(不安全)

解决办法&#xff1a;亲测可行 chrome浏览器地址栏中输入chrome://flags/#unsafely-treat-insecure-origin-as-secure&#xff0c;回车&#xff0c;如下图&#xff0c;将该选项置为Enabled&#xff0c; edge浏览器打开&#xff1a;edge://flags/#unsafely-treat-insecure-orig…

linux文件访问权限理解

目录 一&#xff0c;涉及指令: 二&#xff0c;权限的表示 三&#xff0c;权限命令使用 一&#xff0c;涉及指令: umask chmod chown/chgrp 二&#xff0c;权限的表示 rwx rwx r-x含义: 访问方式: r-可读;w-可写&#xff1b;x-可执行&#xff1b; 访问用户:u-所有者;…

最新Android Studio导入aar包的方法

以前的方式&#xff0c;目前看网上也大多数都是这种方式&#xff0c;导致我本地加的时候一直有问题 但是这样都无法sync以及编译通过&#xff0c;因为方式已经变了 1&#xff1a;将aar文件复制到MyApplication\app\libs下 2&#xff1a;在MyApplication\app\build.gradle下添加…

LLM大语言模型助力DataEase小助手,新增气泡地图,DataEase开源数据可视化分析平台v2.5.0发布

2024年4月8日&#xff0c;DataEase开源数据可视化分析平台正式发布v2.5.0版本。 这一版本的功能升级包括&#xff1a;新增DataEase小助手支持&#xff0c;通过结合智能算法和LLM&#xff08;即Large Language Model&#xff0c;大语言模型&#xff09;能力&#xff0c;DataEas…

Python(9):一文学懂进程,线程和协程

文章目录 一、进程1.创建多进程2.查看进程id3.进程池4.进程间的互相通信 二、线程1.threading线程模块2.创建多线程3.互斥锁4.死锁5.线程间的互相通信 三、协程1.认识协程2.gevent模块在爬虫中的应用 四、多线程、多进程、协程的区别 分类定义程序一个应用可以当做一个程序&…

广佛站点导航助手小程序产品使用说明书

一、产品简介 广佛站点导航助手小程序是一款专为广佛地区用户设计的地铁导航工具。通过获取用户的实时位置信息&#xff0c;小程序能够迅速定位并展示离用户最近的三个地铁站点。用户可以通过本小程序轻松查找地铁站点&#xff0c;规划出行路线&#xff0c;提高出行效率。 二、…

STM32 串口接收定长,不定长数据

本文为大家介绍如何使用 串口 接收定长 和 不定长 的数据。 文章目录 前言一、串口接收定长数据1. 函数介绍2.代码实现 二、串口接收不定长数据1.函数介绍2. 代码实现 三&#xff0c;两者回调函数的区别比较四&#xff0c;空闲中断的介绍总结 前言 一、串口接收定长数据 1. 函…

计算机网络——网络地址转换(NAT)技术

目录 前言 前篇 引言 SNAT&#xff08;Source Network Address Translation&#xff09;源网络地址转换 SNAT流程 确定性标记 DNAT&#xff08;Destination Network Address Translation&#xff0c;目标网络地址转换&#xff09; NAT技术重要性 前言 本博客是博主用于…

Docker学习笔记(二):在Linux中部署Docker(Centos7下安装docker、环境配置,以及镜像简单使用)

一、前言 记录时间 [2024-4-6] 前置文章&#xff1a;Docker学习笔记&#xff08;一&#xff09;&#xff1a;入门篇&#xff0c;Docker概述、基本组成等&#xff0c;对Docker有一个初步的认识 在上文中&#xff0c;笔者进行了Docker概述&#xff0c;介绍其历史、优势、作用&am…

Linux:软件包管理器 - yum

Linux&#xff1a;软件包管理器 - yum Linux的软件安装方式源代码安装rpm包安装yum安装 yum三板斧yum listyum installyum remove yum生态yum源 Linux的软件安装方式 源代码安装 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序 源代码安…

python+Flask+django企业仓库进销存管理信息系统35wiz

Flask提供了更大的灵活性和简单性&#xff0c;适合小型项目和微服务。Django则提供了更多的内置功能&#xff0c;适合大型项目。Flask让开发者更多的控制其组件&#xff0c;而Django则遵循开箱即用的原则 本课题使用Python语言进行开发。代码层面的操作主要在PyCharm中进行&am…

五大背景图光线手法,附大量案例,可下载原图。

2023-10-01 23:05贝格前端工场 在背景图设计中&#xff0c;使用光线效果可以帮助营造科技感。以下是一些使用光线来表现科技感的设计技巧&#xff1a; 线性光源&#xff1a;使用线性光源可以在背景图中创建出明亮的光线效果。可以在设计中添加一条或多条线性光源&#xff0c;然…

Docker Nginx 部署Vue项目

先弄个ngix镜像&#xff0c;还原到linux里面 发布包放的位置 nginx配置文件 server {listen 8049;server_name localhost;#charset koi8-r;access_log /var/log/nginx/host.access.log main;error_log /var/log/nginx/error.log error;location / {# root 根目录&a…

全速前进:2024年MAD(机器学习,人工智能和数据)前景(20000字长文)

THE 2024 MAD (MACHINE LEARNING, ARTIFICIAL INTELLIGENCE & DATA) LANDSCAPE 是FirstMark对数据、分析、机器学习和人工智能生态系统的第十次年度展望和「现状」描述 。 在这个领域的10多年里&#xff0c;事情从来没有像今天这样令人兴奋和充满希望。我们多年来描述的所…

[STM32+HAL]DengFOC移植之闭环位置控制

一、源码来源 DengFOC官方文档 二、HAL库配置 1、开启硬件IIC低速模式 低速更稳定 2、PWM波开启 三、keil填写代码 1、AS5600读取编码器数值 #include "AS5600.h" #include "math.h"float angle_prev0; int full_rotations0; // full rotation trac…

Day37|贪心算法part06:738.单调递增的数字、968. 监控二叉树、贪心总结

738. 单调递增的数字 总体思想就是从后往前遍历&#xff0c;比较第i位和第i1位的大小&#xff0c;不符合顺序char[i]减1&#xff0c;i1位填9&#xff0c;找到需要填9的最先位置&#xff0c;然后填9。 class Solution {public int monotoneIncreasingDigits(int n) {String s …

负荷预测 | Matlab基于TCN-BiGRU-Attention单输入单输出时间序列多步预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于TCN-BiGRU-Attention单输入单输出时间序列多步预测&#xff1b; 2.单变量时间序列数据集&#xff0c;采用前12个时刻预测未来96个时刻的数据&#xff1b; 3.excel数据方便替换&#xff0c;运行环境matlab…

领域驱动设计(DDD)学习心得

领域驱动设计&#xff08;DDD&#xff09; 领域驱动设计是一种用于复杂软件系统的软件开发方法论。它强调与软件所服务的业务领域的专家紧密合作&#xff0c;通过深入理解业务领域的复杂性&#xff0c;来构建能够反映业务逻辑的领域模型。DDD的核心思想包括以下几点&#xff1…

你会写SAP技术规格说明书(Specification)吗

有些小伙伴可能还在发愁技术规则说明书应该写什么&#xff0c;做了张思维导图&#xff0c;包含了所有RICEFW。 R - Report - 报表 I - Interface - 接口 C - Conversion - 数据转换 E - Enhancement - 增强 F - Form - 表单 W - Workflow - 工作流