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

机器学习的三个基本要素

机器学习的基本要素包括模型、学习准则(策略)和优化算法三个部分。机器学习方法之间的不同,主要来自其模型、学习准则(策略)、优化算法的不同。

模型

机器学习首要考虑的问题是学习什么样的模型(Model)。在监督学习中,给定训练集,学习的目的是希望能够拟合一个函数 f ( x ; θ ) f({\bm x}; {\bm \theta}) f(x;θ)来完成从输入特征向量 x {\bm x} x到输出标签的映射。这个需要拟合的函数 f ( x ; θ ) f({\bm x}; {\bm \theta}) f(x;θ)称为模型,它由参数向量 θ {\bm \theta} θ决定。 θ {\bm \theta} θ称为模型参数向量, θ {\bm \theta} θ所在的空间称为参数空间(Parameter Space)。一般来说,模型有两种形式,一种形式是概率模型(条件概率分布),另一种形式是非概率模型(决策函数)。决策函数还可以再分为线性和非线性两种,对应的模型称为线性模型和非线性模型。在实际应用中,将根据具体的学习方法来决定采用概率模型还是非概率模型。

将训练得到的模型称为一个假设,从输入空间到输出空间的所有可能映射组成的集合称为假设空间(Hypothesis Space)。在监督学习中,模型是所要学习的条件概率分布或决策函数。模型的假设空间包含所有可能的条件概率分布或决策函数。例如,假设决策函数是输入特征向量 x {\bm x} x的线性函数,那么模型的假设空间是所有这些线性函数构成的函数集合。假设空间中的模型一般有无穷多个,而机器学习的目的是从这个假设空间中选择出一个最好的预测模型,即在参数空间中选择一个最优的估计参数向量 θ ^ \hat{{\bm \theta}} θ^

学习准则(策略)

在明确了模型的假设空间之后,接下来需要考虑的是按照什么样的准则(策略)从假设空间中选择最优的模型,即学习准则或策略问题。

机器学习最后都归结为求解最优化问题,为了实现某一目标,需要构造出一个“目标函数”(Objective Function),然后让目标函数达到极大值或极小值,从而求得机器学习模型的参数。如何构造出一个合理的目标函数,是建立机器学习模型的关键,一旦目标函数确定,可以通过优化算法来求解。

对于监督学习中的分类问题与回归问题,机器学习本质上是给定一个训练样本集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } T = \{({\bm x}_1, y_1), ({\bm x}_2, y_2), \ldots, ({\bm x}_N, y_N)\} T={(x1,y1),(x2,y2),,(xN,yN)},尝试学习 x i → y i {\bm x}_i \rightarrow y_i xiyi的映射函数 f ( x i ; θ ) f({\bm x}_i; {\bm \theta}) f(xi;θ),其中 θ {\bm \theta} θ是模型的参数向量,使得给定一个输入样本数据 x {\bm x} x,即便这个 x {\bm x} x不在训练样本中,也能够为 x {\bm x} x预测出一个标签值 y ^ \hat{y} y^

  1. 损失函数

    (1)0-1 损失函数
    0-1 损失函数(0-1 Loss Function)是最直接地反映模型正确与否的损失函数,对于正确的预测,损失函数值为 0;对于错误的预测,损失函数值为 1。其数学表达式为:
    L ( y i , f ( x i ; θ ) ) = { 0 , f ( x i ; θ ) = y i 1 , f ( x i ; θ ) ≠ y i L(y_i, f({\bm x}_i; {\bm \theta})) = \begin{cases} 0, & f({\bm x}_i; {\bm \theta}) = y_i \\ 1, & f({\bm x}_i; {\bm \theta}) \neq y_i \end{cases} L(yi,f(xi;θ))={0,1,f(xi;θ)=yif(xi;θ)=yi

    可见,0-1 损失函数不考虑预测值与实际值的误差大小,只要预测错误,损失函数值均为 1。虽然 0-1 损失函数能够直观地反映模型的错误情况,但是它的数学性质并不是很好——不连续也不可导,因此在优化时很困难。通常,会选择其他相似的连续可导函数来替代它。

    (2)平方损失函数
    平方损失函数(Quadratic Loss Function)是模型输出的预测值与实际观测值之差的平方,其数学表达式为:
    L ( y i , f ( x i ; θ ) ) = [ y i − f ( x i ; θ ) ] 2 L(y_i, f({\bm x}_i; {\bm \theta})) = [y_i - f({\bm x}_i; {\bm \theta})]^2 L(yi,f(xi;θ))=[yif(xi;θ)]2

    从直觉上理解,平方损失函数只考虑预测值与实际观测值之间误差的大小,不考虑其正负。但由于经过平方运算,与实际观测值偏差较大的预测值会比偏差较小的预测值受到更严重的惩罚。平方损失函数具有良好的数学性质——连续、可微分且为凸函数,是机器学习回归任务中最常用的一种损失函数,也称为 L 2 L_2 L2损失函数。

当模型输出预测值与实际观测值之间的误差服从高斯分布的假设成立时,最小化均方误差损失函数与极大似然估计本质上是一致的,在此情形下(如回归任务),均方误差损失函数是最优的选择。

(3)绝对损失函数

绝对损失函数(Absolute Loss Function)是模型输出的预测值与实际观测值之差的绝对值,其数学表达式为:
L ( y i , f ( x i ; θ ) ) = ∣ y i − f ( x i ; θ ) ∣ L(y_i, f({\bm x}_i; {\bm \theta})) = |y_i - f({\bm x}_i; {\bm \theta})| L(yi,f(xi;θ))=yif(xi;θ)

绝对损失函数也称为 L 1 L_1 L1损失函数。与平方损失函数类似,绝对损失函数也只考虑预测值与实际观测值之间误差的大小,不考虑其正负。所不同的是,由于绝对损失与绝对误差之间是线性关系,平方损失与误差之间是平方关系,当误差非常大的时候,平方损失会远大于绝对损失。因此,当样本中出现一个误差非常大的离群样本(Outlier)时,平方损失会产生一个非常大的损失,对模型的训练会产生较大的影响。所以,与平方损失函数相比,绝对损失函数对于离群样本更加鲁棒,即不易受到离群样本的影响。

另一方面,当使用梯度下降算法时,平方损失函数的梯度为 [ y i − f ( x i ; θ ) ] [y_i - f({\bm x}_i; {\bm \theta})] [yif(xi;θ)],而绝对损失函数的梯度为 ± 1 \pm 1 ±1,即平方损失函数的梯度的幅度会随误差大小变化,而绝对损失函数的梯度的幅度则一直保持为 1,即便在绝对误差 ∣ y i − f ( x i ; θ ) ∣ |y_i - f({\bm x}_i; {\bm \theta})| yif(xi;θ)很小时,绝对损失函数的梯度的幅度也同样为 1,这实际上是非常不利于模型的训练的。当然,也可以通过在训练过程中动态调整学习率来缓解这个问题,但是总的来说,平方损失函数通常比绝对损失函数可以更快地收敛。

(4)对数损失函数

其定义为:
L ( y i , f ( x i ; θ ) ) = − log ⁡ P ( y i ∣ x i ) L(y_i, f({\bm x}_i; {\bm \theta})) = -\log P(y_i \mid {\bm x}_i) L(yi,f(xi;θ))=logP(yixi)

对数损失函数(Logarithmic Loss Function)或负对数似然损失函数(Negative Log Likelihood Loss Function)源于极大似然估计的思想——极大化对数似然函数,而通常习惯于最小化损失函数,因此将它转变为最小化负对数似然函数。取对数是为了方便计算极大似然估计,因为在极大似然估计中,直接求导比较困难,所以通常都是先取对数再求导寻找极值点。 P ( y i ∣ x i ) P(y_i \mid {\bm x}_i) P(yixi)是指当前模型对于输入样本 x i {\bm x}_i xi的预测值为 y i y_i yi的概率,即预测正确的概率。因为对数函数是单调递增的,所以在公式中加上负号之后,表示预测正确的概率越高,其损失函数值越小,即最大化 P ( y i ∣ x i ) P(y_i \mid {\bm x}_i) P(yixi)等价于最小化损失函数。对数损失函数通常用于逻辑斯谛回归(Logistic Regression)模型的推导中。

(5)交叉熵损失函数

交叉熵(Cross Entropy)是 Shannon 信息论中一个重要概念,用于衡量同一个随机变量中的两个不同概率分布的差异程度。假设一个样本集中有两个概率分布 p p p q q q,其中 p p p表示真实概率分布, q q q表示非真实概率分布。假如,按照真实概率分布 p p p来衡量表示一个样本所需要的编码长度的期望为:
H ( p ) = − ∑ i p i log ⁡ p i H(p) = -\sum_{i} p_i \log p_i H(p)=ipilogpi

但是,如果按照非真实概率分布 q q q来衡量表示服从真实概率分布 p p p的一个样本所需要的平均编码长度,则应该是:
H ( p , q ) = − ∑ i p i log ⁡ q i H(p, q) = -\sum_{i} p_i \log q_i H(p,q)=ipilogqi

此时将 H ( p , q ) H(p, q) H(p,q)称为交叉熵。

在机器学习中,交叉熵可作为损失函数。交叉熵损失函数(Cross-Entropy Loss Function)定义为:
L ( y i , f ( x i ; θ ) ) = − [ y i log ⁡ f ( x i ; θ ) + ( 1 − y i ) log ⁡ ( 1 − f ( x i ; θ ) ) ] L(y_i, f({\bm x}_i; {\bm \theta})) = -[y_i \log f({\bm x}_i; {\bm \theta}) + (1 - y_i) \log (1 - f({\bm x}_i; {\bm \theta}))] L(yi,f(xi;θ))=[yilogf(xi;θ)+(1yi)log(1f(xi;θ))]

(6)合页损失函数

对于一个二分类的问题,数据集的标签取值是 { + 1 , − 1 } \{+1, -1\} {+1,1},预测值是一个连续型实数值函数,那么合页损失函数(Hinge Loss Function)的定义为:
L ( y i , f ( x i ; θ ) ) = max ⁡ ( 0 , 1 − y i f ( x i ; θ ) ) L(y_i, f({\bm x}_i; {\bm \theta})) = \max(0, 1 - y_i f({\bm x}_i; {\bm \theta})) L(yi,f(xi;θ))=max(0,1yif(xi;θ))

在机器学习中,软间隔支持向量机(SVM)模型的原始最优化问题等价于最小化合页损失。只有当样本被正确分类且函数间隔大于 1 时,合页损失才等于 0;否则损失是 1 − y i f ( x i ; θ ) 1 - y_i f({\bm x}_i; {\bm \theta}) 1yif(xi;θ),只能大于 0。

除了上述几种损失函数外,还有其他针对特定任务的损失函数。总而言之,没有一个适合所有机器学习问题的损失函数,损失函数的设计是以能够更好地解决具体问题为目的的。针对特定问题选择损失函数涉及许多因素,例如所选机器学习模型的类型、是否易于计算导数以及训练样本集中离群样本所占比例等。

2. 期望风险

模型的输入 X {\bm X} X和输出 Y Y Y都可以看作是输入和输出联合空间的随机变量,服从联合概率分布 P ( x , y ) P({\bm x}, y) P(x,y),称损失函数在该联合概率分布上的期望为 期望风险(Expected Risk),其数学表达式为:
R exp ⁡ ( θ ) = E ( X , Y ) ∼ P ( x , y ) [ L ( y , f ( x ; θ ) ) ] = ∫ L ( y , f ( x ; θ ) ) P ( x , y ) d x d y R_{\exp}({\bm \theta}) = E_{({\bm X}, Y) \sim P({\bm x}, y)}[L(y, f({\bm x}; {\bm \theta}))] = \int L(y, f({\bm x}; {\bm \theta})) P({\bm x}, y) \, {\rm d}{\bm x} {\rm d}y Rexp(θ)=E(X,Y)P(x,y)[L(y,f(x;θ))]=L(y,f(x;θ))P(x,y)dxdy

期望风险是损失函数的期望,用来度量平均意义下模型预测的性能好坏。

3. 经验风险

一个好的模型应当有较小的期望风险。机器学习的目标在于从假设空间中选取最优模型,而选取最优模型的准则是期望风险最小化。显然,要使期望风险 R exp ⁡ ( θ ) R_{\exp}({\bm \theta}) Rexp(θ)最小化,需要知道联合概率分布 P ( x , y ) P({\bm x}, y) P(x,y),在模式分类问题中,即必须已知先验概率和条件概率密度。但是,在实际的机器学习问题中,无法得知真实的联合概率分布函数,因此也没有办法直接计算期望风险。事实上,如果知道数据的联合概率分布 P ( x , y ) P({\bm x}, y) P(x,y),可以直接利用贝叶斯公式求得条件概率 P ( y i ∣ x i ) P(y_i \mid {\bm x}_i) P(yixi),也没必要学习模型了。

然而,从另一个方面来看,可以利用训练样本集中的 N N N个观测样本近似地求出经验风险。给定一个训练样本数据集
T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x i , y i ) , ⋯ , ( x N , y N ) } , T = \{({\bm x}_1, y_1), ({\bm x}_2, y_2), \cdots, ({\bm x}_i, y_i), \cdots, ({\bm x}_N, y_N)\}, T={(x1,y1),(x2,y2),,(xi,yi),,(xN,yN)}

很容易计算出模型的经验风险(Empirical Risk)或经验损失(Empirical Loss),即根据训练样本集的平均损失。

R emp ( θ ) = 1 N ∑ i = 1 N L ( y i , f ( x i ; θ ) ) R_{\text{emp}}({\bm \theta}) = \frac{1}{N} \sum_{i=1}^{N} L(y_i, f({\bm x}_i; {\bm \theta})) Remp(θ)=N1i=1NL(yi,f(xi;θ))

由于 R emp ( θ ) R_{\text{emp}}({\bm \theta}) Remp(θ)是用已知训练样本(即经验数据)定义的,因此称为经验风险。在假设空间、损失函数以及训练样本集确定的情况下,经验风险可以确定。根据大数定律,当训练样本集中的样本数量 N N N趋向于无穷大时,经验风险收敛于期望风险。这样,可用经验风险 R emp ( θ ) R_{\text{emp}}({\bm \theta}) Remp(θ)来逼近期望风险 R exp ⁡ ( θ ) R_{\exp}({\bm \theta}) Rexp(θ)。使得经验风险最小的模型是最优的模型,这是经验风险最小化(Empirical Risk Minimization, ERM)准则。按照经验风险最小化准则,求解模型的最优参数估计是求解如下的最优化问题:

θ ^ = arg ⁡ min ⁡ θ R emp ( θ ) = arg ⁡ min ⁡ θ 1 N ∑ i = 1 N L ( y i , f ( x i ; θ ) ) \hat{{\bm \theta}} = \arg \min_{{\bm \theta}} R_{\text{emp}}({\bm \theta}) = \arg \min_{{\bm \theta}} \frac{1}{N} \sum_{i=1}^{N} L(y_i, f({\bm x}_i; {\bm \theta})) θ^=argθminRemp(θ)=argθminN1i=1NL(yi,f(xi;θ))

4. 结构风险

当训练集中的样本数量足够大时,经验风险最小化(ERM)准则能保证有很好的效果,在现实中被广泛采用。例如,极大似然估计(Maximum Likelihood Estimation)是经验风险最小化的一个例子。当模型是条件概率分布、损失函数是对数损失函数时,经验风险最小化等价于极大似然估计。然而,通常情况下,由于训练样本集中的样本数量是有限的,而且训练集中的样本数据包含了各种噪声,因此实际所用的训练集不能很好地反映样本数据的真实分布。在这种情况下,如果利用经验风险最小化准则,则会导致模型产生“过拟合”(Overfitting)现象。

导致“过拟合”发生的因素有很多,最主要的原因是训练样本数量不足以及模型过于复杂。为了解决这一问题,需要引入结构风险函数,即对经验风险函数进行矫正,即在经验风险上加上表示模型复杂度的正则(Regularization)项或惩罚(Penalty)项。在假设空间、损失函数以及训练样本集确定的情况下,结构风险函数定义为:
R str ( θ ) = 1 N ∑ i = 1 N L ( y i , f ( x i ; θ ) ) + λ φ ( θ ) R_{\text{str}}({\bm \theta}) = \frac{1}{N} \sum_{i=1}^N L(y_i, f({\bm x}_i; {\bm \theta})) + \lambda \varphi ({\bm \theta}) Rstr(θ)=N1i=1NL(yi,f(xi;θ))+λφ(θ)

式中, λ ( λ > 0 ) \lambda (\lambda > 0) λ(λ>0)为正则化系数,也称惩罚因子,用以权衡经验风险和模型复杂度; φ ( θ ) \varphi ({\bm \theta}) φ(θ)代表模型函数的复杂度,是定义在假设空间上的泛函,简单来说是函数的函数。模型函数的复杂度越高, φ ( θ ) \varphi ({\bm \theta}) φ(θ)也越大。一般使用模型参数向量 θ {\bm \theta} θ ℓ 2 \ell_2 2范数或 ℓ 1 \ell_1 1范数来近似模型的复杂度。通过设置正则化系数 λ \lambda λ,来权衡经验风险和正则项,减小参数规模,达到模型简化的目的,从而使模型具有更好的泛化能力。因此,结构风险函数强制使模型的复杂度不应过高,这种学习准则(策略)称为结构风险最小化(Structural Risk Minimization, SRM)准则。正则化可以看成结构风险最小化的实现,是为了防止过拟合而提出来的策略。

结构风险小意味着经验风险小、模型复杂度低。结构风险小的模型通常对训练样本以及新的测试样本都有较好的预测性能。结构风险最小化的策略认为结构风险最小的模型是最优的模型。所以按照结构风险最小化准则,求解模型的最优参数估计是求解如下的最优化问题:
θ ^ = arg ⁡ min ⁡ θ R str ( θ ) = arg ⁡ min ⁡ θ [ 1 N ∑ i = 1 N L ( y i , f ( x i ; θ ) ) + λ R ( θ ) ] \hat{{\bm \theta}} = \arg \min_{{\bm \theta}} R_{\text{str}}({\bm \theta}) = \arg \min_{{\bm \theta}} \left[ \frac{1}{N} \sum_{i=1}^N L(y_i, f({\bm x}_i; {\bm \theta})) + \lambda R({\bm \theta}) \right] θ^=argθminRstr(θ)=argθmin[N1i=1NL(yi,f(xi;θ))+λR(θ)]

优化算法

在获得了训练样本集、确定了假设空间以及选定了合适的学习准则之后,要根据准则(策略)从假设空间中选择最优模型,需要考虑用什么样的计算方法来求解模型参数估计。

机器学习模型的训练和学习的过程,实际上是求解最优化问题的过程。如果最优化问题存在显式的解析解,则这个最优化问题比较简单,可以求出它的闭式解。但是,如果不存在解析解,则需要通过数值计算的方法来不断逼近。在机器学习中,很多优化函数是凸函数,因此,如何高效地寻找到全局最优解,是一个值得研究的问题。

目前,常用的优化算法有梯度下降法(Gradient Descent, GD)、随机梯度下降法(Stochastic Gradient Descent, SGD)、批量梯度下降法(Mini-Batch Gradient Descent, MBGD)、牛顿法、拟牛顿法、坐标下降法等。

相关文章:

机器学习的三个基本要素

机器学习的基本要素包括模型、学习准则(策略)和优化算法三个部分。机器学习方法之间的不同,主要来自其模型、学习准则(策略)、优化算法的不同。 模型 机器学习首要考虑的问题是学习什么样的模型(Model&am…...

二十三种设计模式

2 工厂方法模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通…...

Spring Boot 异步编程深入剖析

Spring Boot 异步编程深入剖析 1. 异步方法的使用 原理深度解析 Spring Boot 的异步方法基于 Spring 的 AOP(面向切面编程)实现。当在方法上添加 Async 注解时,Spring 会为该方法所在的类创建一个代理对象。当调用该异步方法时&#xff0c…...

SqlSugar 语法糖推荐方式

//方式1&#xff1a;var dd _repository._Db.Queryable<ConfigAggregateRoot, UserRoleEntity>((o, p) > o.Id p.Id).Select((o, p) > new{o.Id,o.Remark,p.RoleId,});//方式2&#xff1a;不推荐使用&#xff0c;建议优先使用 Lambda 表达式&#xff0c;因为它更…...

SQL 全面指南:从基础语法到高级查询与权限控制

SQL&#xff1a;全称 Structured Query Language&#xff0c;结构化查询语言。操作关系型数据库的编程语言&#xff0c;定义了一套操作关系型数据库统一标准 。 一、SQL通用语法 在学习具体的SQL语句之前&#xff0c;先来了解一下SQL语言的同于语法。 1). SQL语句可以单行或多…...

Spring Cloud Gateway 网关的使用

在之前的学习中&#xff0c;所有的微服务接口都是对外开放的&#xff0c;这就意味着用户可以直接访问&#xff0c;为了保证对外服务的安全性&#xff0c;服务端实现的微服务接口都带有一定的权限校验机制&#xff0c;但是由于使用了微服务&#xff0c;就需要每一个服务都进行一…...

【Spring Cloud Alibaba】基于Spring Boot 3.x 搭建教程

目录 前言一、开发环境二、简介 1.主要功能2.组件 三、搭建过程 1 - 主体工程搭建2 - 服务注册与发现组件 —— Nacos的安装3 - 服务注册与发现 —— 服务提供者4 - 服务注册与发现 —— 服务消费者5 - 服务配置中心6 - OpenFeign服务接口调用7 - OpenFeign高级特性8 - Spring…...

JavaWeb-jdk17安装

下载jdk17 地址&#xff1a;https://www.oracle.com/java/technologies/downloads/#jdk17-windows 安装jdk 配置环境变量 右键点击我的电脑>属性>高级系统设置>环境变量 在系统变量Path变量中添加 测试 java -version javac -version...

docker关闭mysql端口映射的使用

需求 项目中的数据库为mysql&#xff0c;如果将端口映射到宿主机上&#xff0c;容易被工具扫描出&#xff0c;且随着国产化的进程推进&#xff0c;mysql将不被允许。为了提高安全性与满足项目需求&#xff0c;这里采用隐藏mysql端口方式&#xff0c;不映射宿主机端口&#xff…...

【银河麒麟高级服务器操作系统】服务器测试业务耗时问题分析及处理全流程分享

更多银河麒麟操作系统产品及技术讨论&#xff0c;欢迎加入银河麒麟操作系统官方论坛 https://forum.kylinos.cn 了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer…...

算法1-4 蜜蜂路线

题目描述 一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你&#xff1a;蜜蜂从蜂房 m 开始爬到蜂房 n&#xff0c;m<n&#xff0c;有多少种爬行路线&#xff1f;&#xff08;备注&#xff1a;题面有误&#xff0c;右上角应为 n−…...

Android 常见View的防抖

在开发Android应用时&#xff0c;我们经常会遇到用户快速点击按钮或者频繁触发某个事件的情况。这种行为可能会导致不必要的重复操作&#xff0c;例如多次提交表单、重复加载数据等。为了避免这些问题&#xff0c;我们需要对这些事件进行防抖处理。本文将详细介绍如何在Kotlin中…...

数据库原理SQL查询(习题+知识点)

一、查询学生表所有学生记录 1.题目内容代码编写 select * from stu; 2.知识点提醒 1&#xff09;选择表中的所有属性列有两种方法 在select关键字后列出所有列名若列的显示顺序与其在表中的顺序相同&#xff0c;则也可用 * 表示所有列 二、查询学生表中部分信息 1.题目内…...

安路FPGA开发入门:软件安装与点灯与仿真(TangDynasty ModelSim)

文章目录 前言软件安装开发软件仿真软件 点灯测试代码编写与编译引脚分配固件下载 仿真测试ModelSim添加仿真库TangDynasty仿真设置进行仿真 后记 前言 最近因为工作需要用安路的FPGA&#xff0c;这里对安路FPGA开发相关流程做个记录。作为测试只需要一个核心板&#xff08;我这…...

Java 导出大数据到 Excel 表格

背景 之前的项目一直是用XSSFWorkbook来做 Excel 导出&#xff0c;在遇到大数据导出时&#xff0c;经常会遇到 OOM。在 Apache Poi 3.8 之后的版本提供的 SXSSFWorkbook 可以优雅的解决这个问题。 原理 SXSSFWorkbook 被称为流式 API&#xff0c;主要是因为它采用了流式写入…...

浅克隆与深克隆区别

package d12_api_object;public class Test2 {public static void main(String[] args) throws CloneNotSupportedException {//目标&#xff1a;掌握Object类提供的对象克隆方法//1、protected Object clone():对象克隆User u1 new User(1,"min","1120",…...

关于服务器cpu过高的问题排查

1.定位是哪个程序造成的cpu过高 如果有云服务器&#xff0c;就用云服务器自带的监控功能&#xff0c;查时间段 如果没有&#xff0c;则使用&#xff1a; ps -eo pid,comm,pcpu,pmem,cputime --sort-cputime | head -n 100 2.定位到问题 发现是uwsgi的cpu消耗过高&#xff0…...

【缓冲区】数据库备份的衍生问题,缓冲区在哪里?JVMor操作系统?(二)

【缓冲区】数据库备份的衍生问题&#xff0c;缓冲区在哪里&#xff1f;JVMor操作系统&#xff1f;&#xff08;二 完结&#xff09; 缓冲区既属于操作系统&#xff0c;也属于 JVM&#xff0c;具体取决于你讨论的是哪个层面的缓冲区。下面我会详细解释这两者的区别和联系。 1. …...

RPA 职业前景:个人职场发展的 “新机遇”

1. RPA职业定义与范畴 1.1 RPA核心概念 机器人流程自动化&#xff08;RPA&#xff09;是一种通过软件机器人模拟人类操作&#xff0c;自动执行重复性、规则性任务的技术。RPA的核心在于其能够高效、准确地处理大量数据和流程&#xff0c;减少人工干预&#xff0c;从而提高工作…...

如何实现小数据的大智能?

大数据可以通过从态到势、从感到知的态势感知过程计算出可能性&#xff0c;如各种大模型&#xff0c;而要通过小数据、小样本获得好的预测结果&#xff0c;可以通过从势到态、从知到感的势态知感过程算计出可能性。 一般情况下&#xff0c;大家常常会提到了大数据和小数据在态势…...

打开 Windows Docker Desktop 出现 Docker Engine Stopped 问题

一、关联文章: 1、Docker Desktop 安装使用教程 2、家庭版 Windows 安装 Docker 没有 Hyper-V 问题 3、安装 Windows Docker Desktop - WSL问题 二、问题解析 打开 Docker Desktop 出现问题,如下: Docker Engine Stopped : Docker引擎停止三、解决方法 1、检查服务是否…...

基于单片机和蓝牙通讯的简易钢琴控制装置设计

摘要&#xff1a;本文设计了一个基于单片机和蓝牙通讯的简易钢琴演奏控制装置&#xff0c;在 Proteus 中设计绘制了系统电路原理图&#xff0c;在 Keil 中编写了单片机控制程序并导入 Proteus电路原理图中进行了软、硬件交互仿真&#xff0c;设置了手机蓝牙串口调试的键盘设置及…...

Linux常见操作命令以及编辑器VI命令

一.复制(cp)和移动(mv) 1.复制文件 格式&#xff1a;cp 源文件 目标文件 2.复制目录 格式&#xff1a;cp -r 源文件夹 目标文件夹 3.重命名和移动 重命名格式&#xff1a;mv 源文件 目标文件 移动格式&#xff1a;mv 源文件 目录/源文件 二.查看文件内容 1.cat命令 格式&#x…...

React Native从入门到进阶详解

React Native知识框架从入门到进阶的问题。首先需要结合我搜索到的资料来整理出结构化的内容。证据中有多本书籍和文章&#xff0c;可能会涉及不同的章节和重点&#xff0c;需要仔细梳理。 首先&#xff0c;根据邱鹏源的《React Native精解与实战》将知识分为入门和进阶两大部分…...

STL——list的介绍和模拟实现

前言 本篇博客我们将要开始介绍list这个容器&#xff0c;list是带头双向循环链表&#xff0c;STL标准模板库中实现了list这样方便我们去使用&#xff0c;那么本篇博客我们将脱下list的神秘外衣&#xff0c;介绍它的使用以及模拟实现。 list的介绍 list的底层是带头双向循环链…...

go前后端开源项目go-admin,本地启动

https://github.com/go-admin-team/go-admin 教程 1.拉取项目 git clone https://github.com/go-admin-team/go-admin.git 2.更新整理依赖 go mod tidy会整理依赖&#xff0c;下载缺少的包&#xff0c;移除不用的&#xff0c;并更新go.sum。 # 更新整理依赖 go mod tidy 3.编…...

go 分布式redis锁的实现方式

go 语言以高并发著称。那么在实际的项目中 经常会用到锁的情况。比如说秒杀抢购等等场景。下面主要介绍 redis 布式锁实现的两种高并发抢购场景。其实 高并发 和 分布式锁 是一个互斥的两个状态&#xff1a; 方式一 setNX&#xff1a; 使用 redis自带的API setNX 来实现。能解决…...

深入理解递归:从原理到C++实践

什么是递归&#xff1f; 递归&#xff08;Recursion&#xff09;是编程中一种强大的技术&#xff0c;其核心思想是&#xff1a;函数直接或间接地调用自身。如同俄罗斯套娃一般&#xff0c;每个函数调用都会解开问题的一个层级&#xff0c;直到达到基础条件。 递归三要素&…...

【2025年15期免费获取股票数据API接口】实例演示五种主流语言获取股票行情api接口之沪深A股解禁限售数据获取实例演示及接口API说明文档

在近一至两年期间&#xff0c;股票量化分析逐步成为备受关注的热门议题。对于投身于该领域工作而言&#xff0c;首要步骤便是获取全面且精准的股票数据。无论是实时交易数据、历史交易记录、财务数据&#xff0c;亦或是基本面信息&#xff0c;这些数据均是开展量化分析过程中不…...

MyBatis-Plus 入门详解:从零搭建高效持久层

一、MyBatis-Plus 简介 MyBatis-Plus&#xff08;简称 MP&#xff09;是 MyBatis 的增强工具&#xff0c;在保留 MyBatis 原生功能的基础上&#xff0c;提供了全自动化的 CRUD 操作、强大的分页插件、代码生成器等功能&#xff0c;显著减少开发工作量。与原生 MyBatis 相比&…...