<线性回归算法(Linear regression)>——《机器学习算法初识》

目录

一、线性回归简介

1 线性回归应用场景

2 什么是线性回归

2.1 定义与公式

2.2 线性回归的特征与目标的关系分析

3 小结

二、线性回归的损失和优化

1 损失函数

2 优化算法

2.1 正规方程

2.1.1 什么是正规方程

2.1.2 正规方程求解举例

2.1.3 正规方程的推导

2.2 梯度下降(Gradient Descent)

2.2.1 什么是梯度下降

2.2.2 梯度的概念

2.2.3 梯度下降举例

2.2.4 梯度下降(Gradient Descent)公式

优化动态图演示                                                                                                                              ​

3 梯度下降和正规方程的对比

3.1 算法选择依据:

4 小结

三、梯度下降法介绍

1 全梯度下降算法(FG)

2 随机梯度下降算法(SG)

3 小批量梯度下降算法(mini-batch)

4 随机平均梯度下降算法(SAG)

5 梯度下降算法比较和进一步优化

1 算法比较

2 梯度下降优化算法

6 小结

四、线性回归性能评估

五、欠拟合和过拟合

1 定义

2 原因以及解决办法

3 正则化

3.1 什么是正则化

3.2 正则化类别

4 小结

六、 正则化线性模型

1 Ridge Regression (岭回归,又名 Tikhonov regularization)

2 Lasso Regression(Lasso 回归)

3 Elastic Net (弹性网络)

4 Early Stopping [了解]

5 小结

七、 线性回归的改进-岭回归

1 API

2 观察正则化程度的变化,对结果的影响?​

3 小结


一、线性回归简介

1 线性回归应用场景

  • 房价预测

  • 销售额度预测

  • 贷款额度预测

2 什么是线性回归

2.1 定义与公式

线性回归(Linear regression)是利用回归方程(函数)一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。

  • 特点:只有一个自变量的情况称为单变量回归,多于一个自变量情况的叫做多元回归

 

2.2 线性回归的特征与目标的关系分析

线性回归当中主要有两种模型,一种是线性关系,另一种是非线性关系。在这里我们只能画一个平面更好去理解,所以都用单个特征或两个特征举例子。

  • 线性关系

    • 单变量线性关系:
  • 多变量线性关系

 注释:单特征与目标值的关系呈直线关系,或者两个特征与目标值呈现平面的关系

更高维度的我们不用自己去想,记住这种关系即可

  • 非线性关系                                                                                                        

3 小结

  • 线性回归的定义
    • 利用回归方程(函数)一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式
  • 线性回归的分类
    • 线性关系
    • 非线性关系

二、线性回归的损失和优化

假设刚才的房子例子,真实的数据之间存在这样的关系:

 既然存在这个误差,那我们就将这个误差给衡量出来

1 损失函数

总损失定义为:

  • yi为第i个训练样本的真实值
  • h(xi)为第i个训练样本特征值组合预测函数
  • 又称最小二乘法

如何去减少这个损失,使我们预测的更加准确些?既然存在了这个损失,我们一直说机器学习有自动学习的功能,在线性回归这里更是能够体现。这里可以通过一些优化方法去优化(其实是数学当中的求导功能)回归的总损失!!!

2 优化算法

如何去求模型当中的W,使得损失最小?(目的是找到最小损失对应的W值)

  • 线性回归经常使用的两种优化算法
    • 正规方程
    • 梯度下降法

2.1 正规方程

2.1.1 什么是正规方程

 

2.1.2 正规方程求解举例

2.1.3 正规方程的推导
  • 推导方式一:

把该损失函数转换成矩阵写法:

其中y是真实值矩阵,X是特征值矩阵,w是权重矩阵

对其求解关于w的最小值,起止y,X 均已知二次函数直接求导,导数为零的位置,即为最小值。

求导:

 

注:式(1)到式(2)推导过程中, X是一个m行n列的矩阵,并不能保证其有逆矩阵,但是右乘XT把其变成一个方阵,保证其有逆矩阵。

式(5)到式(6)推导过程中,和上类似。

2.2 梯度下降(Gradient Descent)

2.2.1 什么是梯度下降

梯度下降法的基本思想可以类比为一个下山的过程。

假设这样一个场景:

一个人被困在山上,需要从山上下来(i.e. 找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致可视度很低。

因此,下山的路径就无法确定,他必须利用自己周围的信息去找到下山的路径。这个时候,他就可以利用梯度下降算法来帮助自己下山。

具体来说就是,以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着山的高度下降的地方走,(同理,如果我们的目标是上山,也就是爬到山顶,那么此时应该是朝着最陡峭的方向往上走)。然后每走一段距离,都反复采用同一个方法,最后就能成功的抵达山谷。

梯度下降的基本过程就和下山的场景很类似。

首先,我们有一个可微分的函数。这个函数就代表着一座山。

我们的目标就是找到这个函数的最小值,也就是山底。

根据之前的场景假设,最快的下山的方式就是找到当前位置最陡峭的方向,然后沿着此方向向下走,对应到函数中,就是找到给定点的梯度 ,然后朝着梯度相反的方向,就能让函数值下降的最快!因为梯度的方向就是函数值变化最快的方向。 所以,我们重复利用这个方法,反复求取梯度,最后就能到达局部的最小值,这就类似于我们下山的过程。而求取梯度就确定了最陡峭的方向,也就是场景中测量方向的手段。

2.2.2 梯度的概念

梯度是微积分中一个很重要的概念

​ 在单变量的函数中,梯度其实就是函数的微分,代表着函数在某个给定点的切线的斜率;

​ 在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向;

这也就说明了为什么我们需要千方百计的求取梯度!我们需要到达山底,就需要在每一步观测到此时最陡峭的地方,梯度就恰巧告诉了我们这个方向。梯度的方向是函数在给定点上升最快的方向,那么梯度的反方向就是函数在给定点下降最快的方向,这正是我们所需要的。所以我们只要沿着梯度的反方向一直走,就能走到局部的最低点!

2.2.3 梯度下降举例

2.2.4 梯度下降Gradient Descent)公式

  • 1) α是什么含义?

    α在梯度下降算法中被称作为学习率或者步长,意味着我们可以通过α来控制每一步走的距离,以保证不要步子跨的太大,其实就是不要走太快,错过了最低点。同时也要保证不要走的太慢,导致太阳下山了,还没有走到山下。所以α的选择在梯度下降法中往往是很重要的!α不能太大也不能太小,太小的话,可能导致迟迟走不到最低点,太大的话,会导致错过最低点!

  • 2) 为什么梯度要乘以一个负号

梯度前加一个负号,就意味着朝着梯度相反的方向前进!我们在前文提到,梯度的方向实际就是函数在此点上升最快的方向!而我们需要朝着下降最快的方向走,自然就是负的梯度的方向,所以此处需要加上负号

我们通过两个图更好理解梯度下降的过程

所以有了梯度下降这样一个优化算法,回归就有了"自动学习"的能力 

  • 优化动态图演示                                                                                                                              

3 梯度下降和正规方程的对比

3.1 算法选择依据:

  • 小规模数据:
    • 正规方程:LinearRegression(不能解决拟合问题)
    • 岭回归
  • 大规模数据:
    • 梯度下降法:SGDRegressor

4 小结

  • 损失函数
    • 最小二乘法
  • 线性回归优化方法
    • 正规方程
    • 梯度下降法
  • 正规方程 -- 一蹴而就
    • 利用矩阵的逆,转置进行一步求解
    • 只是适合样本和特征比较少的情况
  • 梯度下降法 — 循序渐进
    • 梯度的概念
      • 单变量 -- 切线
      • 多变量 -- 向量
    • 梯度下降法中关注的两个参数
      • α -- 就是步长
        • 步长太小 -- 下山太慢
        • 步长太大 -- 容易跳过极小值点(*)
      • 为什么梯度要加一个负号
        • 梯度方向是上升最快方向,负号就是下降最快方向
  • 梯度下降法和正规方程选择依据
    • 小规模数据:
      • 正规方程:LinearRegression(不能解决拟合问题)
      • 岭回归
    • 大规模数据:
      • 梯度下降法:SGDRegressor

三、梯度下降法介绍

学习最基本的梯度下降法实现流程之后,常见的梯度下降算法有:

  • 全梯度下降算法(Full gradient descent),
  • 随机梯度下降算法(Stochastic gradient descent),
  • 小批量梯度下降算法(Mini-batch gradient descent),
  • 随机平均梯度下降算法(Stochastic average gradient descent)

它们都是为了正确地调节权重向量,通过为每个权重计算一个梯度,从而更新权值,使目标函数尽可能最小化。其差别在于样本的使用方式不同。

1 全梯度下降算法(FG)

计算训练集所有样本误差对其求和再取平均值作为目标函数

权重向量沿其梯度相反的方向移动,从而使当前目标函数减少得最多。

因为在执行每次更新时,我们需要在整个数据集上计算所有的梯度,所以批梯度下降法的速度会很慢,同时,批梯度下降法无法处理超出内存容量限制的数据集。

批梯度下降法同样也不能在线更新模型,即在运行的过程中,不能增加新的样本

其是在整个训练数据集上计算损失函数关于参数θ的梯度:

2 随机梯度下降算法(SG)

由于FG每迭代更新一次权重都需要计算所有样本误差,而实际问题中经常有上亿的训练样本,故效率偏低,且容易陷入局部最优解,因此提出了随机梯度下降算法。

其每轮计算的目标函数不再是全体样本误差,而仅是单个样本误差,即每次只代入计算一个样本目标函数的梯度来更新权重,再取下一个样本重复此过程,直到损失函数值停止下降或损失函数值小于某个可以容忍的阈值。

此过程简单,高效,通常可以较好地避免更新迭代收敛到局部最优解。其迭代形式为

3 小批量梯度下降算法(mini-batch)

小批量梯度下降算法是FG和SG的折中方案,在一定程度上兼顾了以上两种方法的优点。

每次从训练样本集上随机抽取一个小样本集,在抽出来的小样本集上采用FG迭代更新权重。

被抽出的小样本集所含样本点的个数称为batch_size,通常设置为2的幂次方,更有利于GPU加速处理。

特别的,若batch_size=1,则变成了SG;若batch_size=n,则变成了FG.其迭代形式为

4 随机平均梯度下降算法(SAG)

在SG方法中,虽然避开了运算成本大的问题,但对于大数据训练而言,SG效果常不尽如人意,因为每一轮梯度更新都完全与上一轮的数据和梯度无关。

随机平均梯度算法克服了这个问题,在内存中为每一个样本都维护一个旧的梯度,随机选择第i个样本来更新此样本的梯度,其他样本的梯度保持不变,然后求得所有梯度的平均值,进而更新了参数。

如此,每一轮更新仅需计算一个样本的梯度,计算成本等同于SG,但收敛速度快得多。

5 梯度下降算法比较和进一步优化

1 算法比较

(1)FG方法由于它每轮更新都要使用全体数据集,故花费的时间成本最多,内存存储最大。

(2)SAG在训练初期表现不佳,优化速度较慢。这是因为我们常将初始梯度设为0,而SAG每轮梯度更新都结合了上一轮梯度值。

(3)综合考虑迭代次数和运行时间,SG表现性能都很好,能在训练初期快速摆脱初始梯度值,快速将平均损失函数降到很低。但要注意,在使用SG方法时要慎重选择步长,否则容易错过最优解。

(4)mini-batch结合了SG的“胆大”和FG的“心细”,从6幅图像来看,它的表现也正好居于SG和FG二者之间。在目前的机器学习领域,mini-batch是使用最多的梯度下降算法,正是因为它避开了FG运算效率低成本大和SG收敛效果不稳定的缺点。

2 梯度下降优化算法

以下这些算法主要用于深度学习优化

  • 动量法
    • 其实动量法(SGD with monentum)就是SAG的姐妹版
    • SAG是对过去K次的梯度求平均值
    • SGD with monentum 是对过去所有的梯度求加权平均
  • Nesterov加速梯度下降法
    • 类似于一个智能球,在重新遇到斜率上升时候,能够知道减速
  • Adagrad
    • 让学习率使用参数
    • 对于出现次数较少的特征,我们对其采用更大的学习率,对于出现次数较多的特征,我们对其采用较小的学习率。
  • Adadelta
    • Adadelta是Adagrad的一种扩展算法,以处理Adagrad学习速率单调递减的问题。
  • RMSProp
    • 其结合了梯度平方的指数移动平均数来调节学习率的变化。
    • 能够在不稳定(Non-Stationary)的目标函数情况下进行很好地收敛。
  • Adam
    • 结合AdaGrad和RMSProp两种优化算法的优点。
    • 是一种自适应的学习率算法

6 小结

  • 全梯度下降算法(FG)
    • 在进行计算的时候,计算所有样本的误差平均值,作为我的目标函数
  • 随机梯度下降算法(SG)
    • 每次只选择一个样本进行考核
  • 小批量梯度下降算法(mini-batch)
    • 选择一部分样本进行考核
  • 随机平均梯度下降算法(SAG)
    • 会给每个样本都维持一个平均值,后期计算的时候,参考这个平均值

四、线性回归性能评估

均方误差(Mean Squared Error)MSE)评价机制:

五、欠拟合和过拟合

1 定义

  • 过拟合:一个假设在训练数据上能够获得比其他假设更好的拟合, 但是在测试数据集上却不能很好地拟合数据,此时认为这个假设出现了过拟合的现象。(模型过于复杂)
  • 欠拟合:一个假设在训练数据上不能获得更好的拟合,并且在测试数据集上也不能很好地拟合数据,此时认为这个假设出现了欠拟合的现象。(模型过于简单)

那么是什么原因导致模型复杂?线性回归进行训练学习的时候变成模型会变得复杂,这里就对应前面再说的线性回归的两种关系,非线性关系的数据,也就是存在很多无用的特征或者现实中的事物特征跟目标值的关系并不是简单的线性关系。 

2 原因以及解决办法

  • 欠拟合原因以及解决办法
    • 原因:学习到数据的特征过少
    • 解决办法:
      • 1)添加其他特征项,有时候我们模型出现欠拟合的时候是因为特征项不够导致的,可以添加其他特征项来很好地解决。例如,“组合”、“泛化”、“相关性”三类特征是特征添加的重要手段,无论在什么场景,都可以照葫芦画瓢,总会得到意想不到的效果。除上面的特征之外,“上下文特征”、“平台特征”等等,都可以作为特征添加的首选项。
      • 2)添加多项式特征,这个在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强。
  • 过拟合原因以及解决办法
    • 原因:原始特征过多,存在一些嘈杂特征, 模型过于复杂是因为模型尝试去兼顾各个测试数据点
    • 解决办法:
      • 1)重新清洗数据,导致过拟合的一个原因也有可能是数据不纯导致的,如果出现了过拟合就需要我们重新清洗数据。
      • 2)增大数据的训练量,还有一个原因就是我们用于训练的数据量太小导致的,训练数据占总数据的比例过小。
      • 3)正则化
      • 4)减少特征维度,防止维灾难

3 正则化

3.1 什么是正则化

在解决回归过拟合中,我们选择正则化。但是对于其他机器学习算法如分类算法来说也会出现这样的问题,除了一些算法本身作用之外(决策树、神经网络),我们更多的也是去自己做特征选择,包括之前说的删除、合并一些特征

如何解决? 

在学习的时候,数据提供的特征有些影响模型复杂度或者这个特征的数据点异常较多,所以算法在学习的时候尽量减少这个特征的影响(甚至删除某个特征的影响),这就是正则化

注:调整时候,算法并不知道某个特征影响,而是去调整参数得出优化的结果

3.2 正则化类别

  • L2正则化
    • 作用:可以使得其中一些W的都很小,都接近于0,削弱某个特征的影响
    • 优点:越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象
    • Ridge回归
  • L1正则化
    • 作用:可以使得其中一些W的值直接为0,删除这个特征的影响
    • LASSO回归

4 小结

  • 欠拟合
    • 在训练集上表现不好,在测试集上表现不好
    • 解决方法:
      • 继续学习
        • 1.添加其他特征项
        • 2.添加多项式特征
  • 过拟合
    • 在训练集上表现好,在测试集上表现不好
    • 解决方法:
      • 1.重新清洗数据集
      • 2.增大数据的训练量
      • 3.正则化
      • 4.减少特征维度
  • 正则化
    • 通过限制高次项的系数进行防止过拟合
    • L1正则化
      • 理解:直接把高次项前面的系数变为0
      • Lasso回归
    • L2正则化
      • 理解:把高次项前面的系数变成特别小的值
      • 岭回归

六、 正则化线性模型

  • Ridge Regression 岭回归
  • Lasso 回归
  • Elastic Net 弹性网络
  • Early stopping

1 Ridge Regression (岭回归,又名 Tikhonov regularization)

2 Lasso Regression(Lasso 回归)

3 Elastic Net (弹性网络)

4 Early Stopping [了解]

Early Stopping 也是正则化迭代学习的方法之一。

其做法为:在验证错误率达到最小值的时候停止训练。

5 小结

  • Ridge Regression 岭回归
    • 就是把系数添加平方项
    • 然后限制系数值的大小
    • α值越小,系数值越大,α越大,系数值越小
  • Lasso 回归
    • 对系数值进行绝对值处理
    • 由于绝对值在顶点处不可导,所以进行计算的过程中产生很多0,最后得到结果为:稀疏矩阵
  • Elastic Net 弹性网络
    • 是前两个内容的综合
    • 设置了一个r,如果r=0--岭回归;r=1--Lasso回归
  • Early stopping
    • 通过限制错误率的阈值,进行停止

七、 线性回归的改进-岭回归

1 API

  • sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True,solver="auto", normalize=False)
    • 具有l2正则化的线性回归
    • alpha:正则化力度,也叫 λ
      • λ取值:0~1 1~10
    • solver:会根据数据自动选择优化方法
      • sag:如果数据集、特征都比较大,选择该随机梯度下降优化
    • normalize:数据是否进行标准化
      • normalize=False:可以在fit之前调用preprocessing.StandardScaler标准化数据
    • Ridge.coef_:回归权重
    • Ridge.intercept_:回归偏置

Ridge方法相当于SGDRegressor(penalty='l2', loss="squared_loss"),只不过SGDRegressor实现了一个普通的随机梯度下降学习,推荐使用Ridge(实现了SAG)

  • sklearn.linear_model.RidgeCV(_BaseRidgeCV, RegressorMixin)
    • 具有l2正则化的线性回归,可以进行交叉验证
  • coef_:回归系数
    class _BaseRidgeCV(LinearModel):def __init__(self, alphas=(0.1, 1.0, 10.0),fit_intercept=True, normalize=False,scoring=None,cv=None, gcv_mode=None,store_cv_values=False):

2 观察正则化程度的变化,对结果的影响?

  • 正则化力度越大,权重系数会越小
  • 正则化力度越小,权重系数会越大

3 小结

  • sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True,solver="auto", normalize=False)【知道】
    • 具有l2正则化的线性回归
    • alpha -- 正则化
      • 正则化力度越大,权重系数会越小
      • 正则化力度越小,权重系数会越大
    • normalize
      • 默认封装了,对数据进行标准化处理

 后记:
●本博客基于B站开源学习资源,是作者学习的笔记记录,仅用于学习交流,不做任何商业用途!

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

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

相关文章

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的田间杂草检测系统(深度学习模型+UI界面+Python代码+训练数据集)

摘要:开发用于田间杂草识别的系统对提高农业运营效率和提升作物产出至关重要。本篇文章详尽阐述了如何应用深度学习技术开发一个用于田间杂草识别的系统,并附上了完备的代码实现。该系统基于先进的YOLOv8算法,并对比了YOLOv7、YOLOv6、YOLOv5…

AXI CANFD MicroBlaze 测试笔记

文章目录 前言测试用的硬件连接Vivado 配置Vitis MicroBlaze CANFD 代码测试代码测试截图Github Link 前言 官网: CAN with Flexible Data Rate (CAN FD) (xilinx.com) 特征: 支持8Mb/s的CANFD多达 3 个数据位发送器延迟补偿(TDC, transmitter delay compensation)32-deep T…

在Linux/Ubuntu/Debian中设置字体

下载字体。 下载你喜欢的字体,双击并安装。 之后更新字体缓存: fc-cache -f -v安装 GNOME 调整。 GNOME Tweaks 是一个工具,允许你自定义 GNOME 桌面环境的各个方面,包括字体。 如果你还没有安装 GNOME Tweaks: …

PLC实验—西门子S7 1200读取旋转编码器数据并计算电机转速

PLC实验—西门子S7 1200读取旋转编码器数据并计算电机转速 注意PTO控制步进电机实验博途软件需要V14版本,不然没有PTO功能块 软件的下载请点击下方百度网盘的链接 链接:https://pan.baidu.com/s/11mQFVnaQxrUy4W9nGIk8Jw 提取码:6lva 详细的…

ubuntu20.04上获取Livox Avia雷达点云数据

若拿到手的Livox Avia激光雷达不知道它的ip信息,可以在官网上LiDAR Sensors - Livox下载上位机软件Livox Viewer,查看IP,下载window版本就可以。雷达通过网线连上电脑后,该软件就可以自动识别出来。按照下图步骤,就可以…

【功能大全】手机短信验证码一键注册登录流程

目录 发送验证码 注册登录 用户表设计 ​编辑申请腾讯云短信与密钥 找到云短信服务 开通腾讯云短信服务 ​编辑​​​​​创建短信签名 ​编辑​编辑创建短信正文模版​编辑​编辑 等待审核 测试短信​编辑 SDK密钥创建 SpringBoot集成腾讯云短信 pom中导入腾讯云短…

二分查找的梳理——边界初始值、循环条件、边界更新

文章目录 1 来源2 思考2.1 区间的选择——由区间决定写法2.2 重点:右边界初始值、循环条件、边界更新2.3 两种写法详解2.3.1 左闭右闭的写法2.3.2 左闭右开的写法 1 来源 手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查…

学习笔记-华为IPD转型2020:1,IPD的重要意义

华为产品开发转型:IPD计划 大多数公司发现,当公司大幅增长时,在较小规模上有效的管理实践不再有效。产品开发过程也是如此。随着华为的发展,该公司遇到了产品故障率更高、开发周期更长和研发成本增加等问题。然后,它转…

小米汽车SU7定档发布,雷军携智能科技赴三年之约

大家好! 我是老洪。 刚刚浏览到一则关于小米汽车的新闻,内容颇为引人关注。 小米SU7,这款备受期待的新能源汽车,已经正式定档在3月28日发布。 雷军,小米的掌舵人,已经明确表示,他们对即将到来的…

k8s基本使用(namespace,pod增删查)-持续更新中

目录 1. 查看Namespace 2. 创建Namespace 2.1 使用纯命令行创建 2.2 编写yaml文件创建 3. 删除Namespace 3.1 使用纯命令行删除 3.2 使用yaml文件删除 二、Pod 1. 查看pod 1.1 查看默认空间的pod 1.2 查看指定空间的pod 1.3 查看全部pod 1.4 查看pod更多信息 1…

leetcode-hot100-矩阵

73. 矩阵置零 给定一个 _m_ x _n_ 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 **输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]] 两次遍历,第一…

springboot265基于Spring Boot的库存管理系统

基于Spring Boot库存管理系统 Inventory Meanagement System based on Spring Boot 摘 要 当下,如果还依然使用纸质文档来记录并且管理相关信息,可能会出现很多问题,比如原始文件的丢失,因为采用纸质文档,很容易受潮…

【读论文】【精读】3D Gaussian Splatting for Real-Time Radiance Field Rendering

文章目录 1. What:2. Why:3. How:3.1 Real-time rendering3.2 Adaptive Control of Gaussians3.3 Differentiable 3D Gaussian splatting 4. Self-thoughts 1. What: What kind of thing is this article going to do (from the a…

图片和PDF 加水印去水印

图片和PDF 加水印去水印 前要1. 图片加水印1.1 方法11.2 方法2 2. 去水印3. pdf加水印4. pdf 去水印 前要 网上查了很多资料, 汇总了几个不错的代码, 顺便做个笔记 1. 图片加水印 1.1 方法1 简单方便, 后也好处理 # -*- coding:utf-8 -*- import os from PIL import Imag…

24-Java策略模式 ( Strategy Pattern )

Java策略模式 摘要实现范例 策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更加灵活,具有更好的维护性和扩展性。 策略模式属于行为型模式 摘要 1. 意图 针对一组算法,将每一个算法封装到具有共…

微服务day01 -- SpringCloud01 -- (Eureka , Ribbon , Nacos)

介绍微服务 1.认识微服务(p1-p5) 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢? 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#…

vscode使用remote-ssh免密连接服务器

你还在使用XShell、Hyper、FinalShell等等SSH客户端软件吗,作为前端的我们,一直在用的功能强大的开发工具vscode,早已实现SSH连接功能(借助官方提供的插件)。而且更加好用,可以直接打开服务器上的文件&…

蓝桥杯练习系统(算法训练)ALGO-975 P0802字符串表达式

资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 编写一个字符串表达式求解函数int expression(char* s); 输入一个字符串表达式,返回它的结果。表达式长度不会超过100。表…

Qt 使用RAW INPUT获取HID触摸屏,笔设备,鼠标的原始数据,最低受支持的客户端:Windows XP [仅限桌面应用]

在开发绘图应用程序时,经常会需要读取笔设备的数据,通过对笔数据的解析,来判断笔的坐标,粗细。如果仅仅只是读取鼠标的坐标,就需要人为在应用程序端去修改笔的粗细,并且使用体验不好,如果可以实…

解析Perl爬虫代码:使用WWW__Mechanize__PhantomJS库爬取stackoverflow.com的详细步骤

在这篇文章中,我们将探讨如何使用Perl语言和WWW::Mechanize::PhantomJS库来爬取网站数据。我们的目标是爬取stackoverflow.com的内容,同时使用爬虫代理来和多线程技术以提高爬取效率,并将数据存储到本地。 Perl爬虫代码解析 首先&#xff0…