西瓜书南瓜书第一、二章

news2024/10/7 12:21:06

存在疑问的地方使用红色字体进行了标注

第一章

什么是机器学习

人工智能:研究如何让机器变得像人一样拥有智能的学科
机器学习:让计算机像人一样能从数据中学习出规律的一类算法
深度学习:神经网络类的机器学习算法,是机器学习的子集

深度学习 ⊂ \subset 机器学习 ⊂ \subset 人工智能

人工智能的具体应用领域:
计算机视觉CV:让计算机拥有视觉能力
自然语言处理NLP:让计算机用于语言能力
推荐系统RS:让计算机精确分析出人的喜好

最快的方式学完西瓜书前五章即可开始深度学习

机器学习所研究的主要内容,是关于计算机从数据中产生“模型”的算法,即“学习算法”。有了学习算法,我们把经验数据提供给它,它就能基于这些数据产生模型,在面对新的情况时,模型会给我们相应的判断。机器学习是研究“学习算法”的学问。
【模型】西瓜书用“模型”泛指从数据中学得的结果。

机器学习的基本术语

常用术语解释

要进行机器学习必须要先有数据,数据的集合称为【数据集】,数据集是由一条一条的记录组成的,每一条记录是关于一个事件或者一个对象的描述,称为一个【示例】或【样本】。这条记录反映了事件或对象某方面的表现或性质的事项,例如“色泽”,“根蒂”,“敲声”,称为【属性】或【特征】。属性上的取值称为【属性值】。属性张成的空间成为【属性空间】、【样本空间】或【输入空间】。从几何上面说,我们也把一个样本等价于属性空间中的一个【特征向量】

符号表示

D = { x 1 , x 2 , ⋯   , x m } D=\{ x_1,x_2,\cdots,x_m\} D={x1,x2,,xm}表示包含有m个样本的数据集,每个样本 x i x_i xi d d d个属性描述,即 x i = ( x i 1 ; x i 2 ; ⋯   ; x i d ) x_i=( x_{i1};x_{i2};\cdots;x_{id}) xi=(xi1;xi2;;xid),每个样本是d维样本空间 X \mathcal{X} X中的一个向量,即 x i ∈ X x_i\in\mathcal{X} xiX。其中 x i j x_{ij} xij是样本 x i x_i xi在第j个属性上的取值,d成为样本 x i x_i xi的维数

注:有时D也可以表示成矩阵形式
D = [ x 11 x 12 ⋯ x 1 d x 21 x 22 ⋯ x 2 d ⋮ ⋮ ⋱ ⋮ x m 1 x m 2 ⋯ x m d ] = [ x 1 T x 2 T ⋮ x m T ] D= \begin{bmatrix} x_{11} & x_{12} & \cdots & x_{1d}\\ x_{21} & x_{22} & \cdots & x_{2d}\\ \vdots & \vdots & \ddots & \vdots \\ x_{m1} & x_{m2} & \cdots & x_{md}\\ \end{bmatrix} =\begin{bmatrix} x_{1}^T \\ x_{2}^T \\ \vdots \\ x_{m}^T \\ \end{bmatrix} D= x11x21xm1x12x22xm2x1dx2dxmd = x1Tx2TxmT

从数据中学得模型的过程称为“学习”或“训练”,这个过程通过执行某种学习算法来完成。学得模型对应了关于训练数据的某种潜在规律,因此亦称“假设”;这种潜在规律自身则称为“真相”或“真实”。学习过程就是为找出真相或逼近真相。西瓜书有时称模型成为“学习器”,可看做学习算法在给定数据和参数空间上的实例化
要建立关于“预测”的模型,需要获得训练样本的“结果”(“标签”)信息,一般地,用 ( x i , y i ) (x_i,y_i) (xi,yi)完整的表示第i个样本,其中, y i ∈ Y y_i\in\mathcal{Y} yiY是样本 x i x_i xi的标记, Y \mathcal{Y} Y是所有标记的集合,称为“标记空间”或“输出空间”。
若预测值为离散值,则称学习任务为“分类”(classfication);若预测值为连续值,则称学习任务为“回归”(regression)。一般地,预测任务是希望通过对训练集 { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x m , y m ) } \{ (x_1,y_1),(x_2,y_2),\cdots,(x_m,y_m)\} {(x1,y1),(x2,y2),,(xm,ym)}进行学习,从而建立一个从输入空间 X \mathcal{X} X到输出空间 Y \mathcal{Y} Y的映射 f : X → Y f:\mathcal{X}\rightarrow\mathcal{Y} f:XY。对儿分类任务,通常令 Y = { + 1 , − 1 } 或 { 0 , 1 } \mathcal{Y}=\{+1,-1\}或\{0,1\} Y={+1,1}{0,1};对多分类任务, ∣ Y ∣ > 2 |\mathcal{Y}|>2 Y>2;对回归任务, Y = R \mathcal{Y}=R Y=R
根据训练数据是否拥有标记信息,学习任务可以大致分为两大类:“监督学习(supervised learning)”和“无监督学习(unsupervised learning)”,分类和回归是监督学习的代表,而聚类是无监督学习的代表。
【泛化能力】机器学习的目标是使学得的模型能够很好的适用于新样本,而不仅仅是在训练样本上表现得很好。学得模型适用于新样本的能力,称为“泛化”(generalization)能力
通常假设样本空间中全体样本服从一个未知“分布” D \mathcal{D} D,我们获得每个样本都是独立地从这个分布上采样获得,即“独立同分布”。一般而言,训练样本越多,我们得到的关于 D \mathcal{D} D的信息就越多,这样就越有可能通过学习获得具有强泛化能力的模型。

假设空间与版本空间

归纳是从特殊到一般的“泛化”过程,演绎是从一般到特殊的“特化”过程。从样例中学习显然是一个归纳的过程
“记住”训练样本是所谓的机械学习,或称“死记硬背式的学习”
广义的归纳学习大体相当于从样例中学习,而狭义的归纳学习则要求从训练数据中学得概念,亦称“概念学习”或“概念形成”。概念学习中最基本的是布尔概念学习,即对“是”或“不是”这样的可表示为0/1布尔值的目标概念进行学习。以西瓜数据集为例,要学习的目标是“好瓜”,假设好瓜可由“色泽”、“根蒂”、“敲声”三个元素完全确定**。于是我们学得的将是“好瓜是某种色泽,某种根蒂,某种敲声的瓜”这样的概念。**
在这里插入图片描述

我们可以把学习过程看作一个在所有假设组成的空间中进行搜索的过程,搜索目标是找到与训练集匹配的假设,即能够将训练集中的瓜判断正确的假设。假设的表示形式一旦确定,假设空间及其规模大小就确定了。这里我们的假设空间由形如 **“(色泽=?) Λ \Lambda Λ (根蒂=?) Λ \Lambda Λ(敲声=?)”**的可能取值所形成的假设组成。
在这里插入图片描述

有许多策略可以对这个假设空间进行搜索,搜索过程中可以不断删除与正例不一致的假设,或与反例一致的假设,最终将会获得与训练集一致,即对所有训练样本能够正确判断的假设(有时可能会为空),这就是我们学得的结果。
需要注意的是,现实问题中我们常面临很大的假设空间,但学习过程是基于有限样本训练集进行的。因此可能有多个假设与训练一致,即存在着一个与训练集一致的“假设集合”,我们称之为“版本空间”。
在这里插入图片描述

归纳偏好

如果仅依靠训练样本,则无法判定上面三个假设中哪一个更好。然而,对于一个具体的学习算法而言,它必须要产生一个模型。这时学习算法本身的偏好就会起到关键的作用。机器学习算法在学习过程中对某种类型假设的偏好称为“归纳偏好”或简称为“偏好”,任何一个有效的机器学习算法,必有其归纳偏好,否则它将被假设空间中看似在训练集上等效的假设所迷惑,而无法产生确定的学习结果。如果没有偏好,我们的西瓜学习算法产生的模型每次在进行预测时,随机抽选训练集上的等效假设,那么学习模型可能有时告诉我们它是好瓜,有时告诉我们它是坏瓜,这样的学习结果显然是没有意义的,是不能复现的。
 

归纳偏好可看作学习算法自身在一个可能很庞大的假设空间中对假设进行选择的启发式或“价值观”,奥卡姆剃刀是一种常用的自然科学研究中最基本的原则,若有多个假设与观察一致,则选最简单的那个,并且我们认为“更平滑”意味着更简单。
事实上,归纳偏好对应了学习算法本身所做出的关于“什么样的模型更好”的假设。在具体的现实问题中,这个假设是否成立及算法的归纳偏好,是否与问题本身匹配,大多数时候直接决定了算法能否取得好的性能。 

假设学习算法 L a L_a La与学习算法 L b L_b Lb有着不同的归纳偏好,其 L a L_a La产生的模型更简单,即泛化能力更强。但是不得不承认的是,对一个学习算法 L a L_a La,若它在某些问题上比学习算法 L b L_b Lb好,则必然存在另一些问题,在那里 L b L_b Lb L a L_a La表现更好。

 
证明:假设样本空间 X \mathcal{X} X和假设空间 H \mathcal{H} H都是离散的,令 P ( h ∣ X , L a ) P(h|X,L_a) P(hX,La)代表算法 L a L_a La基于训练数据 X X X产生假设 h h h的概率, f f f为我们希望学得的真实目标函数。
算法 L a L_a La在对某个测试样本 x x x预测的误差(预测错误的平均概率)为 ∑ h P ( h ∣ X , L a ) I ( h ( x ) ≠ f ( x ) ) \sum_{h}P(h|X,L_a)I(h(x)\neq f(x)) hP(hX,La)I(h(x)=f(x))
L a L_a La的“训练集外误差”,即 L a L_a La在训练集之外的所有样本上的误差 E o t e ( L a ∣ X , f ) E_{ote}(L_a|X,f) Eote(LaX,f) ∑ x ∈ X − X P ( x ) ∑ h P ( h ∣ X , L a ) I ( h ( x ) ≠ f ( x ) ) \sum_{x\in \mathcal{X}-X}{P(x)\sum_h{P(h|X,L_a)I(h(x)\neq f(x))}} xXXP(x)hP(hX,La)I(h(x)=f(x)),也就是 ∑ x ∈ X − X ∑ h P ( x ) P ( h ∣ X , L a ) I ( h ( x ) ≠ f ( x ) ) \sum_{x\in \mathcal{X}-X}{\sum_h{P(x)P(h|X,L_a)I(h(x)\neq f(x))}} xXXhP(x)P(hX,La)I(h(x)=f(x))
其中 I ( ⋅ ) I(\cdot) I()表示指示函数,若 ⋅ \cdot 为真,则取值为1,否则取值为0。
考虑二分类问题,且真实的目标函数可以是任何函数 X → { 0 , 1 } \mathcal{X}\rightarrow \{0,1\} X{0,1},函数空间为 { 0 , 1 } ∣ X ∣ {\{0,1\}}^{|\mathcal{X}|} {0,1}X。对所有可能的 f f f按照均匀分布(期望相加)对误差求和
∑ f E o t e ( L a ∣ X , f ) = ∑ f ∑ h ∑ x ∈ X − X P ( x ) P ( h ∣ X , L a ) I ( h ( x ) ≠ f ( x ) ) = ∑ x ∈ X − X P ( x ) ∑ h P ( h ∣ X , L a ) ∑ f I ( h ( x ) ≠ f ( x ) ) = ∑ x ∈ X − X P ( x ) ∑ h P ( h ∣ X , L a ) 1 2 2 ∣ X ∣ = 1 2 2 ∣ X ∣ ∑ x ∈ X − X P ( x ) ∑ h P ( h ∣ X , L a ) = 2 ∣ X ∣ − 1 ∑ x ∈ X − X P ( x ) \begin{equation} \begin{aligned} \sum_{f}E_{ote}(L_a|X,f)&=\sum_f{\sum_h{\sum_{x\in \mathcal{X}-X}{P(x)P(h|X,L_a)I(h(x)\neq f(x))}}} \\ &=\sum_{x\in \mathcal{X}-X}{P(x)\sum_{h}{P(h|X,L_a)\sum_f{I(h(x)\neq f(x))}}} \notag\\ &=\sum_{x\in \mathcal{X}-X}{P(x)\sum_{h}{P(h|X,L_a)\frac{1}{2}2^{|\mathcal{X}|}}} \notag\\ &=\frac{1}{2}2^{|\mathcal{X}|}\sum_{x \in \mathcal{X}-X}{P(x)\sum_{h}{P(h|X,L_a)}} \notag\\ &=2^{|\mathcal{X}|-1}\sum_{x \in \mathcal{X}-X}{P(x)} \end{aligned} \end{equation} fEote(LaX,f)=fhxXXP(x)P(hX,La)I(h(x)=f(x))=xXXP(x)hP(hX,La)fI(h(x)=f(x))=xXXP(x)hP(hX,La)212X=212XxXXP(x)hP(hX,La)=2X1xXXP(x)
由上面的推导可以看出总误差与学习算法无关!对于任意两个学习算法都有
∑ f E o t e ( L a ∣ X , f ) = ∑ f E o t e ( L b ∣ X , f ) \sum_f{E_{ote}(L_a|X,f)}=\sum_f{E_{ote}(L_b|X,f)} fEote(LaX,f)=fEote(LbX,f)

也就是说无论算法 L a L_a La多聪明、算法 L b L_b Lb多笨拙,他们的期望性能是相同的!这就是没有免费午餐定理(NFL)。

  1. NFL定理有一个重要前提:所有问题出现的机会相同,或所有问题同等重要。但在现实情形中,很多时候我们只关心这个算法在某个特定问题上是否为好算法,至于他在其他问题上的表现是不重要的。(“问题”的不同在公式中影响的是真实目标函数 f f f吗?)
  2. 在上面简短的推导中假设了 f f f是服从均匀分布的,而实际情况并非如此

总结:NFL定理最重要的寓意是让我们清楚地认识到,推理具体问题,空泛的谈论“什么学习算法更好”是毫无意义的。

第二章 模型评估与选择

经验误差与过拟合

一般地
【错误率】: 被分类错误的样本数 样本总数 × 100 % ( E = a m × 100 % ) \frac{被分类错误的样本数}{样本总数}\times100\%\quad (E=\frac{a}{m}\times 100\%) 样本总数被分类错误的样本数×100%(E=ma×100%)
【精度】: 1 − 错误率 或 ( 1 − a m ) × 100 % 1-错误率\quad或\quad(1-\frac{a}{m})\times 100\% 1错误率(1ma)×100%
【误差】:学习器的实际预测输出与样本的真实输出之间的差异
【训练误差或经验误差】:学习器在训练数据上的误差
【泛化误差】:学习器在新样本上的误差
【过拟合】:当学习器把训练样本学得“太好了”(训练误差非常小)的时候,很可能把训练样本自身的一些特点当做了所有潜在样本都会具有的一般性质,从而导致了泛化能力的下降
【欠拟合】:与过拟合相对,指对训练样本的一般性质尚未学好
注:欠拟合比较容易克服,例如在决策树中扩展分支、在神经网络学习中增加训练轮数,而过拟合一般比较麻烦,是机器学习面临的关键障碍,各类学习算法都必然带有一些针对过拟合的措施。并且,过拟合是无法彻底避免的(P不等于NP),只能缓解。

模型选择和参数配置是一个学习器性能好坏的关键,理想的解决方案是对模型的泛化误差进行评估,然后选择泛化误差最小的那个模型。难点在于如何获得比较准确的泛化误差或者近似替代(训练误差由于过拟合现象不能简单地替代泛化误差)

针对上面的难点,给出下列模型评估方法

模型评估

分离测试集,将测试集上学习器的测试误差近似作为学习器的泛化误差,需要注意,选取的测试集应该尽量与训练集互斥,即测试样本尽可能不出现在训练集中。
那么如何从包含m个样本的数据集D中分离出训练集S与测试集T呢?

留出法

原则: D = S ∪ T ; S ∩ T = ∅ D=S\cup T;S\cap T=\emptyset D=ST;ST=

【注意】

  1. 训练/测试集的划分要尽可能保持数据分布的一致性,从采样的角度看,要符合分层采样的原则。
  2. 即使在给定训练/测试集的样本比例后,仍存在多种方式对初始数据集D进行分割。单次使用留出法的结果并不可靠,因此一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。
  3. 训练集与测试集的样本数之比一般为7:3,常见的做法是把大约2/3~4/5的样本用于训练,其余用于测试

交叉验证法

交叉验证先将数据集地划分为k个大小相似的互斥子集,每个子集都尽可能保持数据分布的一致性,即从D中通过分层采样得到,然后用k- 1个子集的并集作为训练集,剩余的那个子集作为测试集,这样就可以获得k组训练测试集,从而可进行k次训练和测试,最终返回的是这k个测试结果的均值,显然交叉验证法评估结果的稳定性和保真性,在很大程度上取决于k的取值。为强调这一点,通常把交叉验证法称为k折,交叉验证k最常用的取值是10,此时称为十折交叉验证,其他常用的k值有5,20等。

与留出法相似,将数据集D划分为k个子集,同样存在多种划分方式。为减小因样本划分不同而引入的差别,k折交叉验证通常要随机使用不同的划分,重复p次,最终评估结果是这p次k折交叉验证结果的均值。常见的有十次十折交叉验证。

假定数据集D中包含m个样本,若令k=m,则得到了交叉验证法的一个特例——留一法。显然,留一法不受随机样本划分方式的影响,留一法使用的训练集与初始数据集D相比,只少了一个样本。在大多数情况下,留一法中被实际评估的模型与期望评估的用D训练出的模型很相似。因此,留一法的评估结果往往被认为比较准确。但是留一法也有缺陷,在数据集比较大的时候,训练m个模型的计算开销往往是难以忍受的。另外,留一法的估计结果也未必永远比其他评估方法准确,没有免费午餐定理,对实验评估方法同样适用。

自助法

自助法以自助采样法为基础,给定包含m个样本的数据集D,我们对它进行采样,产生数据集 D ′ D^{'} D。每次随机从D中挑选一个样本,将其拷贝放入 D ′ D^{'} D中,然后再将该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到,这个过程重复执行m次后,我们就得到了包含m个样本的数据集 D ′ D^{'} D,这就是自助采样的结果。显然,D中会有一部分样本会在 D ′ D^{'} D中多次出现,而另一部分样本不出现。
可以做一个简单的估计,样本在m次采样中始终不被采到的概率是 ( 1 − 1 m ) m {(1-\frac{1}{m})}^{m} (1m1)m,取极限得到 lim ⁡ m → ∞ ( 1 − 1 m ) m = 1 e ≈ 0.368 \lim_{m\rightarrow \infty}{(1-\frac{1}{m})}^m=\frac{1}{e}\approx0.368 mlim(1m1)m=e10.368即通过自助采样初始数据集D中约有36.8%的样本未出现在采样数据集 D ′ D^{'} D中,于是我们将 D ′ D^{'} D用作训练集, D \ D ′ D\backslash D^{'} D\D用作测试集。这样一来实际评估的模型与期望评估·的模型都使用了m个训练样本,而我们仍有数据总量约为1/3的,没在训练集中出现的样本用于测试。这样的测试结果,亦称“包外估计”。

自助法在数据集较小、难以划分训练/测试集时很有用,并且对集成学习有好处。然而自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差,因此在初始数据量足够的情况下,留出法和交叉验证法常用一些。

调参和最终模型

在进行模型评估与选择时,除了要对适用学习算法进行选择,还需要对算法参数进行设定,这就是通常所说的“参数调节”,简称“调参”。现实中,常用的做法是对每个参数选定一个范围和变化步长,例如在[0,0.2]范围内,以0.05为步长,则实际要评估的候选参数值有5个,最终是从这5个候选值中产生选定值。

性能度量

对学习期的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量。在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果,这意味着模型的好坏是相对的,什么样的模型是好的,不仅取决于算法和数据,还决定于任务需求。
在预测任务中,要评估学习器 f f f的性能,就要把学习器预测结果 f ( x ) f(x) f(x)与真实标记 y y y进行比较。

回归任务最常用的性能度量是“均方误差”:
离散:$$E(f;D)=\frac{1}{m}\sum_{i=1}{m}{(f(x_i)-y_i)}2$$
连续: E ( f ; D ) = ∫ x ∼ D ( f ( x ) − y ) 2 p ( x ) d x E(f;D)=\int_{x\sim D}{(f(x)-y)}^2p(x)dx E(f;D)=xD(f(x)y)2p(x)dx
下面主要是分类任务中常用的一些性能度量。

错误率与精度

对于样例集D,分类错误率定义为 E ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) ≠ y i ) E(f;D)=\frac{1}{m}\sum_{i=1}^{m}{I(f(x_i)\neq y_i)} E(f;D)=m1i=1mI(f(xi)=yi)
精度则定义为
a c c ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ≠ y i ) ) = 1 − E ( f ; D ) \begin{equation} \begin{aligned} acc(f;D)&=\frac{1}{m}\sum_{i=1}^{m}{I(f(x_i\neq y_i))} \notag\\ &=1-E(f;D) \end{aligned} \end{equation} acc(f;D)=m1i=1mI(f(xi=yi))=1E(f;D)
更一般地,对于数据分布D和概率密度函数 p ( ⋅ ) p(\cdot) p(),错误率和精度可分别描述为 E ( f ; D ) = ∫ x ∼ D I ( f ( x ) ≠ y ) p ( x ) d x E(f;D)=\int_{x\sim D}{I(f(x)\neq y)p(x)}dx E(f;D)=xDI(f(x)=y)p(x)dx a c c ( f ; D ) = ∫ x ∼ D I ( f ( x ) = y ) p ( x ) d x = 1 − E ( f ; D ) \begin{equation} \begin{aligned} acc(f;D)&=\int_{x\sim D}{I(f(x)= y)p(x)}dx \notag\\ &=1-E(f;D) \end{aligned} \end{equation} acc(f;D)=xDI(f(x)=y)p(x)dx=1E(f;D)

查准率、查全率与F1

对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合划分为真正例(True Positive),假正例(False Positive),真反例(True Negative),假反例(False Negative)四种情形,令TP、 FP、TN、FN分别表示其对应的样例数。则显然有TP+FP+TN+FN=样例总数。分类结果的混淆矩阵如表所示
在这里插入图片描述

查准率P与查全率R分别定义为 P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP R = T P T P + F N R=\frac{TP}{TP+FN} R=TP+FNTP
查准率和查全率是一对矛盾的度量。一般来说,查准率高时,查全率往往偏低,而查全率高时,查准率往往偏低.通常只有在一些简单任务中,才可能是查全率和查准率都很高。

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

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

相关文章

科大讯飞星火模型申请与chatgpt 3.5模型以及new bing的对比

科大讯飞星火模型 申请科大讯飞星火认知大模型账号科大讯飞星火认知大模型使用1.界面介绍2. 在编程能力上与chatgpt 3.5对比科大讯飞星火模型chatgpt 3.5模型 3. 在图片生成能力上与new bing对比 总结 申请科大讯飞星火认知大模型账号 注册网址: 科大讯飞星火认知大…

Python基础知识:列表推导式详解

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 我们经常需要这样处理一个列表: 把一个列表里面的每个元素, 经过相同的处理 ,生成另一个列表。 👇 👇 👇 更多精彩机密、教程,尽在下方…

如何给 Keycloak 用户加上“部门”、“电话”等自定义属性

Keycloak 是一款开源的用户认证和授权软件。在默认安装情况下,它只给新创建的用户提供了 email 属性,但是在许多应用场景中,客户都会要求给新创建的用户增加诸如“部门”、“电话”等自定义属性。 本文会介绍如何给 keycloak 中新创建的用户…

Android上架商城 隐私政策需要网页 没有怎么办

Android开发的项目上架商城的时候会需要你填写url,但其实并不需要真的去发布一个网站 使用腾讯文档新建文档 填写隐私政策 点击生成网页 再将网址填写即可 下面我找到的一个隐私政策文档供大家参考 将XXXX应用一键替换为自己的应用 将XXXXXX公司一键替换为公司 …

【Linux】多线程1——线程概念与线程控制

文章目录 1. 线程概念什么是线程Linux中的线程线程的优点线程的缺点线程的独立资源和共享资源 2. 线程控制Linux的pthread库用户级线程 📝 个人主页 :超人不会飞)📑 本文收录专栏:《Linux》💭 如果本文对您有帮助&…

记一次触发器拦截更新操作

1、背景 业务上有一张表记录仓库和经纬度的,正常情况不怎么做变更;业务反馈经常出现经纬度被更新的情况,操作人都是接口或者admin,人工运维后又会被接口/admin覆盖更新掉 2、过程 遇到这种情况,我的第一反应是定位代…

【Kubernetes】Kubernetes的Pod控制器

Pod控制器 一、Pod 控制器的概念1. Pod 控制器及其功用2. Pod 控制器有多种类型2.1 ReplicaSet2.2 Deployment2.3 DaemonSet2.4 StatefulSet2.5 Job2.6 Cronjob 3. Pod 与控制器之间的关系 二、Pod 控制器的使用1. Deployment2. SatefulSet2.1 为什么要有headless?2…

.Net Core 动态加载和卸载程序集

从 .Net Core 3.0开始支持程序集的加载和卸载,在 .Net FrameWork中使用独立的应用程序域来实现同样的功能,.Net Core 不支持创建多个应用程序域,所以无法使用多个应用程序域来实现程序集动态加载和卸载。 AssemblyLoadContext 程序集加载上下…

Antd的日期选择器中文化配置

当你使用antd的日期选择器后,你会发现日期什么都是英文的:即便你已经在项目中配置了中文化: 我确实已经配置了中文化: 但是为啥没生效?官网回答:FAQ - Ant Design dayjs中文网: 安装 | Day…

宝塔部署阿里云盘webdav

安装Docker 我的系统是CentOS8,如果直接安装会出错,可以看这篇文章:Failed to download metadata for repo ‘appstream‘ docker 国内镜像: http://hub-mirror.c.163.com/下载镜像 宝塔安装docker管理器,然后搜索…

深入了解IP地址查询的几种方式

随着互联网的发展,IP地址已经成为网络世界中不可或缺的部分。而准确地了解IP地址的来源和所属地区,对于网络安全和数据分析等方面具有重要意义。本文将介绍几种常见的IP地址查询方式,帮助读者深入了解IP地址的查询方法。 WHOIS查询 WHOIS查询…

VMware 安装 Centos7

VMware 安装 Centos7 1、首先,下载我们需要安装的 Centos7 镜像 链接:https://pan.baidu.com/s/1-O5nc4OwQye_yvzTCHeyvg 提取码:88882、打开VMware,点击新建虚拟机 3、选择典型,点击下一步 4、选择Centos7 iso文件镜…

实验二十九、正弦波变锯齿波电路

一、题目 将峰值为 1 V 1\,\textrm V 1V、频率为 100 Hz 100\,\textrm{Hz} 100Hz 的正弦波输入电压,变换为峰值为 5 V 5\,\textrm V 5V、频率为 200 Hz 200\,\textrm {Hz} 200Hz 的锯齿波电压。利用 Multisim 对所设计的电路进行仿真、修改,直至满足…

什么是主数据管理?企业主数据管理方法论

什么是主数据管理? 主数据又被称为黄金数据,其价值高也非常重要。对企业来说,主数据的重要性如何强调都不为过,主数据治理是企业数据治理中最为重要的一环。主数据管理的内容包括 主数据管理标准、主数据应用标准 和 主数据集成服…

虚拟化和容器化

目录 一. 虚拟化和容器化的概念 什么是虚拟化、容器化 案例 为什么要虚拟化、容器化? 二. 虚拟化实现方式 应用程序执行环境分层 虚拟化常见类别 虚拟机 容器 JVM 之类的虚拟机 三. 常见虚拟化实现 主机虚拟化(虚拟机)实现 容器虚拟化实现 容器虚拟化实现原理 容器…

JDK19 - 虚拟线程如何进行业务代码的改造

JDK19 - 虚拟线程如何进行业务代码的改造 一. 线程池的改造二. for 循环同步代码块改造2.1 自动关闭资源会等待所有异步任务执行完毕吗? 一. 线程池的改造 假设我们的代码中,原本是这样使用线程池的: public static ExecutorService getThr…

套接字类型,地址族,数据序列

Socket: 1.套接字中使用的协议族 2.套接字数据传输类型信息 3.计算机间通信中所使用的协议信息 PF_INET协议族中, 符合SOCK_STREAM的只有一个: tcp 所以第三个参数为0 UDP同理 TCP套接字: 可靠的,按序传递的,基于字节的面向连接的数据传输方式的套接字 :tcp套接字数据不存在边…

前后端分离------后端创建笔记(10)用户修改

本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论,如有侵权请联系 源码:https://gitee.com/green_vegetables/x-admin-project.git 素材:https://pan.baidu.com/s/…

(二)结构型模式:4、组合模式(Composite Pattern)(C++实例)

目录 1、组合模式(Composite Pattern)含义 2、组合模式应用场景 3、组合模式的优缺点 4、组合模式的UML图学习 5、C实现组合模式的简单示例(公司的OA系统) 1、组合模式(Composite Pattern)含义 组合模…

短剧cps分销系统源码搭建 短剧cps系统开发 短剧项目怎么做

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、短剧是什么?二、短剧项目怎么做?三、总结 前言 短剧分销系统: 对接他人短剧小程序片源,仅推广分销。用户看…