【机器学习】线性回归(理论)

news2024/11/15 20:04:03

线性回归(理论)



目录

    • 一、概论
      • 1、何为线性回归
      • 2、问题的抽象
      • 3、误差的引入
      • 4、极大似然估计的引入
      • 5、目标函数的优化
    • 二、梯度下降
      • 1、何为梯度下降
      • 2、利用梯度下降进行函数寻优
      • 3、梯度下降的一些问题
        • Ⅰ 迭代步长
        • Ⅱ 算法的初始位置
        • Ⅲ 数据的取值范围差异
        • Ⅳ 鞍点现象
      • 4、常见的梯度下降算法
    • 三、正则化
      • 1、均方误差的引入
      • 2、正则化的引入
    • 四、实战部分(正在研究中...)




一、概论


1、何为线性回归

线性回归(Linear Regression)是确定两种或两种以上变量之间所存在的定量关系的一种统计方法。
来看一种最简单的情况,下面是一组给出的数据:

Alt

现在我问你,如果现在 𝑥 = 6 ,问 𝑦 取值?
分析上表,不难看出该表的数据实际上反映了 𝑥 与 𝑦 之间的关系为 𝑦 = 2𝑥 + 1,因此你可以很快的说出当 𝑥 = 6时,𝑦 取值为13。而这个过程,实际就是线性回归所所执行的工作本质。
在这个例子中,因为数据量少、且数据反应出的关系很简单(并且没有偏差),因此你能很轻易地说出这些数据所满足的函数关系。

来看一个较为实际的例子,下表给出了不同工资和年龄对应的借款额度:

Alt
可以猜想,工资和年龄可能与借款额度有关(也就是说存在某种函数关系),但是具体的关系是怎样的呢?对此,我们可以假设他们满足的关系如下(其中 𝑥1 用以表示工资, 𝑥2 用以表示年龄):

Alt

此时,若将 𝑦 做为输出(即预测值), 𝑥1 和 𝑥2 作为输入(即用于进行预测的特征)。那么我们的问题就变成了根据 𝑥1、𝑥2 和 𝑦 来求解 𝜃1 和 𝜃2 的值。


2、问题的抽象

将这个问题再抽象一下:已知一组 𝑥1、𝑥2 及其对应的 𝑦 值,试在三维空间 R3 - 𝑥1 𝑥2 𝑦 中寻找一个平面 𝛷 ,来尽可能的将这些点都涵盖在该平面中。即:寻找一个平面来尽可能地拟合已知数据。

Alt

如上图所示,对于平面:

Alt

约束它“倾斜”程度的两个参数为 𝜃1 和 𝜃2,但有时我们还需对该平面进行上下移动。因此,还需要加入一个“偏置项” 𝜃0,来限制它在该空间中的上下位置。此时,平面方程即为:

Alt
在数学中,为了处理的便捷性,我们常常也会为偏置项 𝜃0 添加一个对应的“特征”,使得整个平面能够表达为两个向量的乘积。即,此时平面方程为(特别提示:本文中的字母当为斜体时均代表某个值,而对应为黑体时则代表向量,更进一步地,当字母变为大写字母时就会表示对应小写字母共同构成的矩阵。请读者在阅读时特别注意这一点):

Alt

其中,θ = [𝜃0, 𝜃1, 𝜃2]𝑇, x = [𝑥0, 𝑥1, 𝑥2]𝑇, 𝑥0 ≡ 1。
由于我们人为地在平面方程中添加了一个值恒定的属性,因此对于原始的数据表格而言,也需要加上这一属性,如下图所示:

Alt

在该表中,对于每一行 𝑥0, 𝑥1, 𝑥2 数据,都会有一个对应的贷款额度。
即有(其中,上标 (𝑖) 表示对应第 𝑖 行的数据):

Alt

将预测值也进行向量化,即得到:

Alt

其中, y = [ 𝑦(1), 𝑦(2), … , 𝑦(𝑛) ] 𝑇, X = [ x(1), x(2), … , x(𝑛) ] 𝑇, 𝑛 为样本总量。


3、误差的引入

在现实世界中,对于拟合得到的方程 ℎ𝜃(𝑥) 而言,将某次实验数据带入并不会保证拟合值(即预测值)会与真实值完全相等,即有:

Alt
因此,对于每个样本,实际上都应该存在以下关系( 𝜀 是引入的误差项):

Alt

𝜀(𝑖) 表示第 𝑖 个样本在得到的拟合方程中所存在的误差。

Alt

在贷款表中,每个贷款人的贷款行为互不影响。比如马斯克和化腾去贷款,他们在决定要贷款时就已经确定了自己要贷款的金额,而不会出现“马斯克说要贷 2 亿,化腾说那我就要贷 3 亿”的情况。因此我们说他俩贷款的行为是独立”的。
表中所有人去同一家银行贷款,尽管他们彼此之间毫无关系,但是他们在贷款时,银行所采取的贷款额度算法是一致的,即他们共用同一套“贷款额度方程”。即:同分布。
因此,对于拟合方程存在的误差 𝜀(𝑖) ,他们彼此之间也是独立同分布的。更进一步的,这个误差依概率服从于均值为 0,方差为 1 的高斯分布。即:

Alt
高斯分布(正态分布)图像如下:

Alt


4、极大似然估计的引入

先整理下我们现有的已知信息。

  1. 拟合函数存在误差:
    Alt

  2. 误差项服从高斯分布:
    Alt

前面说到,线性回归的目的,是根据已知的特征信息 X 和对应的函数值 y ,来寻找一个能尽可能拟合真实情况的回归方程(即求出 θ 向量)。在概率论中,若已知一组观测数据和这组数据服从的分布,我们要如何求出该组数据满足的分布的具体数值呢?一个比较直观的方法是:极大似然估法。
极大似然原理的直观想法是,一个随机试验如有若干个可能的结果 A,B,C,… ,若在一次试验中,结果 A 出现了,那么可以认为实验条件对A的出现有利,也即出现的概率 P(A) 较大。例:设甲箱中有 99 个白球,1个黑球;乙箱中有1个白球。99 个黑球。现随机取出一箱,再从抽取的一箱中随机取出一球,结果是黑球,显然这一黑球从乙箱抽取的概率比从甲箱抽取的概率大得多,因此我们自然更多地认为这个黑球是取自乙箱。
一般说来,若事件A发生的概率与某一未知参数 θ 有关,则 θ 取值不同时,事件 A 发生的概率 𝑝(𝐴 | θ) 也不同,当我们在一次试验中事件A发生了,则认为此时 θ 的值应当是观测数据(即 X )中能使 𝑝(𝐴 | θ) 取值达到最大的那一个,极大似然估计法就是要选取这样的 X 值作为参数 X 的估计值,使所选取的样本在被选的总体中出现的可能性为最大。
因此,若要用极大似然估法对 θ 进行估计,则需要构建关于 θ 的似然方程。考虑前面的已知信息,可将 1 中关于 𝜀(𝑖) 的信息进行整理并带入 2 中得到:

Alt

该式子的含义是: 固定 θ 和 x(𝑖) 时,这组数据接近真实值 𝑦(𝑖) 的概率。
现在我们有多组数据,目的是尽可能使这所有数据都接近真实值 y ,这是一个联合概率密度。前面说到,𝜀(𝑖) 之间是相互独立的。由概率论:当事件独立时,联合概率密度等于边缘概率密度之积。则可得到似然函数:

Alt

对于似然函数 𝐿(𝜃) ,其含义是“这组数据接近真实值 y 的概率”,因此希望这值越大越好。
由于我们的目的不是去计算出该似然函数的取值是多少,而是关心 𝜃 在取怎样的值时,能使得似然函数 𝐿(𝜃) 的取值最大。即,这是一个求极值点的问题,而非求极值的问题。因此,为了简化计算,可对似然函数进行对数化处理:

Alt
Alt
观察上式,𝑍 为固定值,𝐽(𝜃) 为可变值。为了能使得对数似然函数 ln 𝐿(𝜃) 最大,就要使 𝐽(𝜃) 最小。
为了便于计算,接下来就仅考虑 𝐽(𝜃) 。同时,消除 𝐽(𝜃) 中的常数项,即再令:

Alt

注: 实际上, 𝐽(𝜃) 表达的含义正是“真实值”与“预测值”的欧氏距离总和(的一半),我们当然希望这个差异越小越好。


5、目标函数的优化

根据前面的讨论,现在我们的目的是使目标函数 𝐽(𝜃) 最小(有时,我们也称 𝐽(𝜃) 为损失函数,即真实值与预测值的差距),因此对其求偏导。由于该过程涉及对矩阵求导,因此先给出部分对矩阵求导的知识,感兴趣的可以自行下去学习相关知识:

Alt

对目标函数 𝐽(𝜃) 求偏导的过程如下:

Alt

由于函数 𝐽(𝜃) 是二次函数(是严格的凸函数),存在最值。故令偏导为 0 ,即可解得极值点: θ = (𝑋𝑇𝑋)−1𝑋𝑇y 。
根据求出的极值点,我们便找到了一个求解回归方程的通解为:θ = (𝑋𝑇𝑋)−1𝑋𝑇y 。也就是说,当 θ 取该值时,回归方程:

Alt

将会是拟合程度最好的方程,它将使得所有的样本数据 x𝑇 都尽可能靠近真实值。

但是,问题来了!

θ = (𝑋𝑇𝑋)−1𝑋𝑇y 一定存在么? 𝑋𝑇𝑋 一定是非奇异矩阵么?
当然不一定!在现实世界中,这样的情况也几乎不可能!
因此,上面的求解实际上仅适用于一些较为特殊的情况。并且从另一个角度来看,这样“一步到位”的求解过程,根本没有体现出机器“学习”的过程。


那么,问题出在哪儿?
求 𝐽(θ) 极值这一步。

Alt

在周志华《机器学习》书中对该问题有深刻的剖析,需要具备一定的数学功底才能理解。
在此,可以简单理解为:该式子中含有矩阵求导求逆等步骤,因此它本身存在相当多的约束,因此不能像求函数极值那样来处理以试图求得通解。
那怎么办呢?梯度下降法。




二、梯度下降


1、何为梯度下降

梯度下降法(Gradient Descent GD)是一种寻找目标函数极值点的方法,它利用梯度信息,通过迭代的方式来不断寻找最合适的目标值。
举个非常经典的例子:若你站在山上某处想要尽快下山,一种很简单的方式是走一步再走一步。即,当你走到某个位置时,考察在此位置上,往哪个方向走是最陡峭的,并沿该方向朝下走。这样一来,不断采用该策略,最终总会走到某个局部的最低处。如下图所示:

Alt

在学一元函数时,我们学过“导数”,它可表示为在函数曲线上的切线斜率。对于多元函数而言,由于曲面上的每一点都有无穷多条切线,此时,描述这种函数的导数相当困难。于是,“导数”就演变为“偏导数”。即:固定其他变量不变,仅关心多元函数中的某单个变量的导数。它的几何意义表示为固定多元曲面在某个竖直切面上对应的切线在固定点上的斜率。比如在二元函数 z = 𝑓(𝑥, 𝑦) 上,固定 𝑦 而仅考虑 𝑥 的变化,从而可将原函数看成是关于 𝑥 的一元函数来研究。

Alt

但是偏导数有一个缺点:只能表示多元函数沿坐标轴方向的变化率。而现实使用中,很多时候需要考虑多元函数沿任意方向的变化率,于是就有了方向导数。
方向导数表示某个方向的导数,其本质是函数在某个点上沿任意方向的切线斜率(是一个标量,且需要在给定方向后才能计算出在该方向上的方向导数)。而梯度则是在这众多任意方向的切线中,斜率最大的那一条切线。这里需要注意两点:

  1. 方向导数是标量、梯度是矢量;
  2. 梯度是某个点变化程度最大的方向。

所以,梯度指明了方向,方向导数可根据该方向算出导数值。在前面谈到的下山策略中,我们需要一个“最陡峭的方向”作为下山方向,于是梯度就派上用处了。


2、利用梯度下降进行函数寻优

根据前面的分析,我们可以进行总结:
梯度下降法就是沿着梯度下降的方向求解极小值。在迭代过程中,如果某位置处的梯度为 0 (或者说上一次迭代的位置与现在所处位置之间的差异在某个足够小的范围内时),就终止算法,并认为当前所处位置即为所要寻找的最小值;同理,可沿着梯度上升的方向求解最大值,这种方法叫梯度上升。
从下图可以看到:受起始点和目标函数特性的影响,梯度下降不一定能找到全局最优解,可能只是局部最优解,那么什么时候能找到全局最优解呢?这个与损失函数有关,当损失函数是凸函数的话,可以找到全局最优。

Alt

故此,可总结梯度下降的具体实现过程如下:
1、确定模型的假设函数和损失函数;
2、相关参数的初始化,包括:参数、算法终止距离和步长(每次迭代时对参数修正的长度);
3、确定当前位置损失函数的梯度;
4、用步长乘以梯度,得到当前位置下降的距离;
5、确定是否所有参数梯度下降的距离都小于算法终止距离,如果小于则算法终止,否则进行下一步;
6、更新所有参数,更新完毕转到步骤 1。


3、梯度下降的一些问题

现在我们知道梯度下降的下山策略为:走一步再走一步,当走到某个位置时,往该位置处的梯度方向走。
据此,来思考一些问题。

Ⅰ 迭代步长

在梯度下降过程中,每次迭代往梯度方向走多长才合适呢?考虑如下一元函数:

Alt

若当前正处于 A 点,假设步长为 0.1 ,则采用梯度下降法将经过 3 步由 A 来到点 C。𝑥 坐标的变化过程为:0.5 + 0.1 + 0.1 + 0.1 = 0.8 ;
若设置步长为 0.05 ,则采用梯度下降法将经过 5 步由 A 来到点 B。𝑥 坐标的变化过程为:0.5 + 0.05 + 0.05 + 0.05 + 0.05 + 0.05 = 0.75 。
对于步长为 0.1 的行走方式,其优点是“下山更快”,但错过了极值点 B;对于步长为 0.05 的行走方式,其优点是
不容易错过极值点,但是“下山速度较慢”。因此,对于步长而言,它需要进行权衡。步长越长,迭代越快,但有可能错过最优解;步长越小,迭代速度越慢,且容易陷入局部最优解中,但不易错过极值点。所以算法的步长通常需要经过多次运行才能得到一个较优的值。

Ⅱ 算法的初始位置

考虑如下一元函数:

Alt

若算法的初始点在点 A ,则采用梯度下降的方式进行迭代时,该算法最终将停在上图的 area1 范围内,此范围是涵盖了极值点的,因此是可接受的;而若算法的初始点在点 B ,则采用梯度下降的方式进行迭代时,该算法最终将停在上图的 area2 范围内,此范围没有极值,甚至还可能导致算法难以跳出某个局部最优解。
因此,对于梯度下降而言,选择的初始值不同,最终得到的最小值有可能不同(可能仅得到某个局部最优解)。只有当损失函数是凸函数时,才会取到最优解。为此,该算法需要多次用不同初始值,才能确定好选择损失函数最小化的初值。如:采用随机梯度下降的方式。

Ⅲ 数据的取值范围差异

对于贷款问题,在用梯度下降进行迭代时,如果将步长设置为 0.01 ,显然这个步长对于“年龄”特征而言是合理的,但是对于“工资”特征就不太适用了。为什么?因为他们的量纲不一样(可简单理解为数据单位的不一致带来的数据取值范围差异)。“工资”这个特征的取值范围是远大于“年龄”的,因此在采用相同的步长时会使得算法在“工资”这个特征上的迭代速度远慢于“年龄”。即:统一步长会在某些量纲更小的特征上出现严重的缓迭代情形。

Alt

为此,需要对数据进行“归一化”处理。即,对每个特征 𝑥 ,求出它的期望 𝑥 ‾ \overline{𝑥} x 和标准差 𝜎 ,然后将原始特征中的每个数据都统一转化为:

Alt

这样一来,每个特征的新期望均为 0,方差均为 1,可大大提高算法的迭代速度。

Ⅳ 鞍点现象

首先解释一下什么是鞍点。鞍点是最优化问题中常遇到的一个现象,其数学含义是:目标函数在此点的梯度为0,但从该点出发的一个方向存在函数极大值点,而另一个方向是函数的极小值点。

Alt

在高度非凸空间中,存在大量的鞍点,这使得梯度下降法有时会失灵,虽然不是极小值,但是看起来确是收敛的。
解决该问题可通过进行多次随机梯度下降。


4、常见的梯度下降算法

1、批量梯度下降(Batch Gradient Descent BGD)

前面所介绍的算法其实就是批量梯度下降。需要首先计算在所有数据上的损失值,然后再进行梯度下降。具体操作步骤是:遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,并更新梯度。这种方法每更新一次参数,都要把数据集里的所有样本计算一遍,因此得出的梯度往往都是朝着正确的方向;但是其缺陷是计算量过大,导致计算速度慢,因而不支持在线学习。

2、随机梯度下降(Stochastic Gradient Descent SGD)

不使用全部的样本来计算梯度,而是使用单一样本来近似估计梯度。具体的操作步骤是:每次从训练集中随机选择一个样本,计算其对应的损失和梯度,进行参数更新,反复迭代。这种方式在数据规模比较大时可以减少计算复杂度,提高计算效率。从概率意义上来说,单个样本的梯度是对整个数据集合梯度的无偏估计,但是它存在着一定的不确定性,因此收敛速率比批梯度下降得更慢(即,有可能会走很多弯路)。

3、小批量梯度下降(Mini-batch Gradient Descent MGD)

为了克服上面两种方法的缺点,采用的一种折中手段:将数据分为若干批次,按批次更新参数(每一批样本被称为 MiniBatch,规模通常取 2𝑛 )。每一批次中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性;另一方面,由于一批样本的数量比整个数据集少很多,因此计算量也不是很大。所以,相较其他梯度下降算法,小批量梯度下降是用得比较多的。



三、正则化


1、均方误差的引入

假设通过相关,得到两组 𝜃 向量:

Alt

要选用哪一个作为最终的拟合方程参数呢?
一个很直观的方法是,看他们在训练样本上的均方误差(Mean Square Error):

Alt

在训练样本上取得的均方误差值越大,说明该组参数的拟合水平不是很好;反之,则说明拟合水平较高(此时还需考虑是否出现过拟合的问题)。
对于训练数据 𝑥 = [ 1, 1, 1, 1 ] 𝑇, 𝑦 = 1 而言,将其带入两个拟合方程得到的均方误差值均为 0 (在实际使用时可能会有一定的差距,但是可能差距并不大)。因此,如果仅靠均方误差值作为衡量拟合方程参数优劣的标准在一定程度上是有失偏颇的。

插语:实际上,可以很自然地认为 θ1 不如 θ2 。因为 θ1 = [ 1, 0, 0, 0 ] 𝑇,表明 θ1 仅考虑了原始数据中的第一个特征来作为拟合方程的判据;而 θ2= [ 1 4 \frac{1}{4} 41, 1 4 \frac{1}{4} 41, 1 4 \frac{1}{4} 41, 1 4 \frac{1}{4} 41 ] 𝑇,表明 θ2 考虑到了原始数据中的所有特征,因此以 θ2 作为拟合方程的参数将取得更好的拟合效果。就像素描,如果你只从一个角度去观察目标然后作画,则无论你画得多好,你的作品始终给人的感觉是一副平面图,缺失了灵魂;而当你从多个角度观察后,再执笔作画,则你最终的成品将是一幅二维平面中的立体画作,是一幅生动形象且写实的好作品。


2、正则化的引入

为了应对 1 中出现的问题,引入正则化。正则化是指在对不同的拟合方程进行评估时,额外再引入一项对拟合方程参数进行考察的新项目作为损失函数,如下:

Alt

其中, 𝛼 ≥ 0 是正则化惩罚力度,当该值为 0 时表明不进行正则化处理。用该式和训练数据 𝑥 = [ 1, 1, 1, 1 ] 𝑇, 𝑦 = 1 再对 𝜃 进行评估时,𝐽(𝜃1) = 𝛼 > 𝐽(𝜃2) = α 4 \frac{\alpha}{4} 4α ,即认为以 𝜃1 构成的拟合方程表现不如 𝜃2
引入正则化后,会对回归方程的权重参数进行惩罚,以让权重参数尽可能平滑。

Alt

如上图所示,其中三条曲线都是最高次项达 𝑥15 的拟合方程。蓝色虚线是未引入正则化操作得到的曲线。该曲线虽然能最大程度的降低 MSE 值(即在训练集上取得好的拟合效果),但是这样的模型过于复杂,会使得其在训练样本和验证集上的差异相当大(即会出现严重的过拟合现象)。而与之相对的绿色实线(正则化惩罚力度为 0.00001)则较为简单,其既能保持 MSE 值不至于太高(即在训练集上取得较好的拟合效果),也保持了模型的简单性质。红色虚线是正则化惩罚力度为 1 的拟合曲线,该曲线虽然是 MSE 值最大的一条,但是其模型相当简单,曲线非常平滑,能有效避免出现过拟合的现象。
在引入正则化时,不同的正则化算法取得的效果往往有所不同,假设损失函数为:

Alt
Alt

两者的区别在于:
1、岭回归对于任意数据都不会出现斜率为 0 的情况,它只会无限趋近于0;而 Lasso 回归则有可能得到一条斜率为 0 的回归曲线;
2、岭回归的正则项图是一个圆形;Lasso回归的正则项图是一个矩形。而二次正则项的图(圆形)具有处处可导,方便计算的优势。

Alt

两者的选用应根据具体场景而甄别。



四、实战部分(正在研究中…)


END


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

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

相关文章

i.MX8MP平台开发分享(IOMUX篇)- uboot驱动

专栏目录:专栏目录传送门 平台内核i.MX8MP5.15.71文章目录 1. pinfunc.h2.iomux驱动3.pinctrl_select_state_full4.imx_pinctrl_set_state1. pinfunc.h pinfunc.h中定义了所有的引脚,命名方式是MX8MP_IOMUXC___,例如下面的MX8MP_IOMUXC_GPIO1_IO00__GPIO1_IO00定义了MUX寄存…

网络信息安全-LSB图像隐写与检测的设计实现

任务目标: 本选题需要学习经典的图像信息隐藏算法,包括基于空域的隐写算法和数字水印算法。 接着你将使用某种编程语言实现这些算法,实现在图片中嵌入一些信息,例如字符串和一些 文件。除此之外,还需要尝试一些基础的…

吴恩达《机器学习》——Logistic多分类与神经网络

Logistic多分类与神经网络1. MINIST数据集与Logistic多分类MINIST简介数据集可视化Logistic如何实现多分类?One-Hot向量Python实现2. 神经网络(Neural Network, NN)神经网络前馈传播Python实现3. 基于PyTorch框架的网络搭建数据集、源文件可以在Github项目中获得 链…

使用CMake构建静态库和动态库

使用CMake构建静态库和动态库一、准备工作二、动态库的构建2.1 工程改造2.2 编译动态库2.3 更多的说明三、静态库的构建3.1 错误的尝试3.2 新的构建指令四、动态库的版本号五、安装动态库和头文件一、准备工作 本机演示环境为: 主机windows11 vscode 虚拟机安装的…

人工智能在药物研发和生物技术中的应用:回顾与展望

人工智能(Artificial intelligence, AI)的出现正在重新塑造整个制药和生物技术行业的发展。几乎所有大大小小的生命科学和药物发现机构,都对采用人工智能驱动的发现平台表现出浓厚的兴趣,希望通过AI来简化研发工作,减少发现时间和成本&#x…

【C++基础】10:STL(二)

CppSTL(二) OVERVIEWCppSTL(二)一、函数对象1.函数对象:(1)概述:(2)简单使用:2.谓词:(1)一元谓词:…

LVGL学习笔记10 - 按钮Button

目录 1. Check型按钮 2. 修改样式 2.1 设置背景 2.1.1 颜色 2.1.2 透明度 2.1.3 渐变色 2.1.4 渐变色起始位置设置 2.2 修改边界 2.2.1 宽度 2.2.2 颜色 2.2.3 透明度 2.2.4 指定边 2.3 修改边框 2.4 修改阴影 2.4.1 宽度 2.4.2 透明度 2.4.3 偏移坐标 2.3.…

PHP代码审计系列(五)

PHP代码审计系列&#xff08;五&#xff09; 本系列将收集多个PHP代码安全审计项目从易到难&#xff0c;并加入个人详细的源码解读。此系列将进行持续更新。 数字验证正则绕过 源码如下 <?phperror_reporting(0); $flag flag{test}; if ("POST" $_SERVER[…

数值优化之凸集

本文ppt来自深蓝学院《机器人中的数值优化》 目录 1 凸集的定义 2 凸集的运算 1 凸集的定义 集合中任意两点连线形成的线段属于这个集合&#xff0c;这个集合是凸集。 注意&#xff1a;是否是凸集&#xff0c;集合的边界是否属于这个集合很重要 这涉及到构造最小凸包的问题…

行锁功过:怎么减少行锁对性能的影响?

在上一篇文章中,我跟你介绍了 MySQL 的全局锁和表级锁,今天我们就来讲讲 MySQL 的行锁。 MySQL 的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁,比如 MyISAM 引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁,对于这种引擎的表,同一张表上…

Java中的四种引用类型

1.对象引用介绍 从 JDK1.2 版本开始&#xff0c;把对象的引用分为四种级别&#xff0c;从而使程序更加灵活的控制对象的生命周期。这四种级别由高到低依次为&#xff1a;强引用、软引用、弱引用和虚引用。 用表格整理之后&#xff0c;各个引用类型的区别如下&#xff1a; 2.强…

BOM编程:location对象

document 对象和window对象的location的区别 document对象的位置获取步骤是返回这个相关的全局对象的位置对象&#xff0c;如果这是完全活动的&#xff0c;否则为空。 Window对象的位置获取步骤是返回它的位置对象。每个Window对象都与创建Window对象时分配的Location对象的唯…

Spark01:Spark工作原理

1. Spark执行数据计算的整个流程 首先通过Spark客户端提交任务到Spark集群&#xff0c;然后Spark任务在执行的时候会读取数据源HDFS中的数据&#xff0c;将数据加载到内存中&#xff0c;转化为RDD&#xff0c;然后针对RDD调用一些高阶函数对数据进行处理&#xff0c;中间可以调…

ElementUI——案例1用户管理(基于SpringBoot)

1.前期准备 备注&#xff1a;主要涉及组件container组件&#xff0c;导航菜单组件&#xff0c;router路由组件&#xff0c;carousel 走马灯组件&#xff0c;Image组件&#xff0c;Table表格组件 #1.在项目开发目录使用脚手架新建vue项目&#xff08;需要提前安装好node和webp…

无字母数字webshell提高

前言 元旦快乐 -- 转眼就到了2023年 新的一年继续努力 在p神博客中看到一个 通过上传临时文件进行rce&#xff0c;便想着写一篇文章&#xff0c;记录一下这个小trick。太强了 比如给你下面这么一串代码。正如文章标题 无字母数字&#xff0c;如果匹配到字母和数字&#xf…

【Vuex快速入门】vuex基础知识与安装配置

vuex快速入门——什么是vuex&#xff1f;创作背景vuex基础知识一、vuex是什么&#xff1f;二、vuex的组成三、为什么使用vuex&#xff1f;四、什么时候使用vuex&#xff1f;vuex的安装配置一、直接下载 / CDN引用二、npm安装vuex三、yarn安装四、自己构建更多内容可参考Vuex官方…

[从零开始]用python制作识图翻译器·二

AlsoEasy-RecognitionTranslator需求分析系统分析功能拆解工程语言选择技术可行性分析具体实现需求分析 见上篇[从零开始]用python制作识图翻译器一 上篇分析了该产品的需求以及市场上的可行性&#xff08;没有被吊打的竞品&#xff09;。而本篇将着重于分析如何实现。 系统分析…

gateway基本配置

目录 1、gateway简介 2、gateway核心概念 3、路由 4、断言 5、过滤器 5.1、过滤器介绍 5.2、内置局部过滤器与使用 5.3、内置全局过滤器 5.4、自定义全局过滤器 5.4.1、黑名单校验 5.4.2、模拟登录校验 6、一个简单的gateway配置实例 1、gateway简介 路由转发 执行…

Linear Regression with PyTorch 用PyTorch实现线性回归

文章目录4、Linear Regression with PyTorch 用PyTorch实现线性回归4.1 Prepare dataset 准备数据集4.2 Design Model 设计模型4.2.1 __call__() 作用4.3 Construct Loss and Optimizer 构造损失和优化器4.4 Training Cycle 训练周期4.5 Test Model 测试模型4.6 Different Opti…

redis缓存淘汰策略

定时删除 Redis不可能时时刻刻遍历所有被设置了生存时间的key&#xff0c;来检测数据是否已经到达过期时间&#xff0c;然后对它进行删除。 立即删除能保证内存中数据的最大新鲜度&#xff0c;因为它保证过期键值会在过期后马上被删除&#xff0c;其所占用的内存也会随之释放。…