机器学习 | 无监督聚类K-means和混合高斯模型

机器学习 | 无监督聚类K-means和混合高斯模型

1. 实验目的

实现一个K-means算法和混合高斯模型,并用EM算法估计模型中的参数。

2. 实验内容

用高斯分布产生 k k k个高斯分布的数据(不同均值和方差)(其中参数自己设定)。

  1. 用K-means聚类,测试效果;

  2. 用混合高斯模型和你实现的EM算法估计参数,看看每次迭代后似然值变化情况,考察EM算法是否可以获得正确的结果(与你设定的结果比较)。

  3. 可以UCI上找一个简单问题数据,用你实现的GMM进行聚类。

3. 实验环境

Windows11; Anaconda+python3.11; VS Code

4. 实验过程、结果及分析(包括代码截图、运行结果截图及必要的理论支撑等)

4.1 算法理论支撑

4.1.1 K-means聚类算法

K-means聚类算法的核心思想为假定聚类内部点之间的距离应该小于数据点与聚类外部的点之间的距离。即使得每个数据点和与它最近的中心之间距离的平方和最小

假设数据集为 X = { x 1 , … , x N } , x i ∈ R D X = \left\{ x_{1},\ldots,x_{N} \right\},x_{i} \in \mathbb{R}^{D} X={x1,,xN},xiRD,我们的目标是将数据集划分为 K K K个类别 Y Y Y。令 μ k ∈ R D , k = 1 , … , K \mu_{k} \in \mathbb{R}^{D},k = 1,\ldots,K μkRD,k=1,,K表示各类别的中心。聚类问题等价于求概率分布:

P ( Y | X ) = P ( X | Y ) ∙ P ( Y ) P ( X ) P\left( Y \middle| X \right) = \frac{P\left( X \middle| Y \right) \bullet P(Y)}{P(X)} P(YX)=P(X)P(XY)P(Y)

K-means聚类相当于假设 P ( X | Y ) P\left( X \middle| Y \right) P(XY)服从多元高斯分布(特征之间相互独立,协方差矩阵 Σ = λ I \Sigma\mathbf{=}\lambda\mathbf{I} Σ=λI),且 P ( Y ) P(Y) P(Y)为等概率均匀分布。而 P ( X ) P(X) P(X)为已知数据分布,从似然的角度看,极大化 P ( Y | X ) P\left( Y \middle| X \right) P(YX)即等价于极大化 P ( X | Y ) ∼ − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) P\left( X \middle| Y \right)\sim - \frac{1}{2}(x - \mu)^{T}\Sigma^{- 1}(x - \mu) P(XY)21(xμ)TΣ1(xμ),即最小化各数据点到其类别的均值。

多元正态分布: N ( x ∣ μ , Σ ) = 1 ( 2 π ) D / 2 1 ∣ Σ ∣ 1 / 2   exp ⁡ { − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) }   多元正态分布:\mathcal{N(}x|\mu,\Sigma) = \frac{1}{(2\pi)^{D/2}}\frac{1}{\mid \Sigma \mid^{1/2\ }}\exp\{ - \frac{1}{2}(x - \mu)^{T}\Sigma^{- 1}(x - \mu)\}\ 多元正态分布:N(xμ,Σ)=(2π)D/21Σ1/2 1exp{21(xμ)TΣ1(xμ)} 

引入二值指示变量 r n k ∈ { 0 , 1 } r_{nk} \in \{ 0,1\} rnk{0,1}表示数据点的分类情况,则可定义目标函数为

min ⁡ r , μ J = ∑ n = 1 N ∑ k = 1 K r n k ∥ x n − μ k ∥ 2 \min_{r,\mu}{J = \sum_{n = 1}^{N}{\sum_{k = 1}^{K}{r_{nk}\left\| x_{n} - \mu_{k} \right\|^{2}}}} r,μminJ=n=1Nk=1Krnkxnμk2

因此最优化过程可以划分为两步:

  1. 固定 μ \mu μ,优化 r n k r_{nk} rnk。由于 J J J关于 r n k r_{nk} rnk是线性的,因此可以对每个 n n n分别进行最小化,即对 r n k r_{nk} rnk根据与聚类中心的距离进行最优化:

r n k = { 1 ,           k = a r g m i n j ∥ x n − μ j ∥ 2 0 ,          其他情况      r_{nk} = \left\{ \begin{aligned} 1 ,&\ \ \ \ \ \ \ \ \ k = argmin_{j}\left\| x_{n} - \mu_{j} \right\|^{2} \\ 0 ,&\ \ \ \ \ \ \ \ \ 其他情况\ \ \ \end{aligned} \right.\ rnk={1,0,         k=argminjxnμj2         其他情况    

  1. 固定 r n k r_{nk} rnk,优化 μ \mu μ。由于 J J J μ \mu μ的二次函数,对其求导等于零得

∂ J ∂ μ k = 2 ∑ n = 1 N r n k ( x n − μ k ) = 0 ⇒ μ k = ∑ n r n k x n ∑ n r n k \frac{\partial J}{\partial\mu_{k}} = 2\sum_{n = 1}^{N}{r_{nk}(x_{n} - \mu_{k}) = 0} \Rightarrow \mu_{k} = \frac{\sum_{n}^{}{r_{nk}x_{n}}}{\sum_{n}^{}r_{nk}} μkJ=2n=1Nrnk(xnμk)=0μk=nrnknrnkxn

μ k \mu_{k} μk等于类别k的所有数据点的均值。

4.1.2 混合高斯模型

任意连续概率密度都能用多个高斯分布的线性组合叠加的高斯混合概率分布 p ( x ) = ∑ k = 1 K π k N ( x ∣ μ k , Σ k ) p(x) = \sum_{k = 1}^{K}{\pi_{k}\mathcal{N}(x|\mu_{k},\Sigma_{k})} p(x)=k=1KπkN(xμk,Σk)来描述。引入 " 1   o f   K " "1\ of\ K" "1 of K"编码的二值随机变量 z \mathcal{z} z,满足 z k ∈ { 0 , 1 } \mathcal{z}_{k} \in \{ 0,1\} zk{0,1} ∑ k = 1 K z k = 1 \sum_{k = 1}^{K}\mathcal{z}_{k} = 1 k=1Kzk=1

由右图模型定义联合概率分布 p ( x , z ) = p ( z ) ∙ p ( x ∣ z ) p\left( x,\mathcal{z} \right) = p\mathcal{(z) \bullet}p\left( x|\mathcal{z} \right) p(x,z)=p(z)p(xz) z \mathcal{z} z的边缘先验概率分布设为 p ( z k = 1 ) = π k ( 0 ≤ π k ≤ 1 且 ∑ k = 1 K π k = 1 ) p(\mathcal{z}_{k} = 1) = \pi_{k}(0 \leq \pi_{k} \leq 1且\sum_{k = 1}^{K}{\pi_{k} = 1}) p(zk=1)=πk(0πk1k=1Kπk=1),也可写作 p ( z ) = ∏ k = 1 K π k z k p(\mathcal{z}) = \prod_{k = 1}^{K}\pi_{k}^{\mathcal{z}_{k}} p(z)=k=1Kπkzk

那么, x x x的条件概率分布为:
p ( x ∣ z k = 1 ) = N ( x ∣ μ k , Σ k ) ⇔   p ( x ∣ z ) = ∏ k = 1 K N ( x ∣ μ k , Σ k ) z k p(x|\mathcal{z}_{k} = 1) = \mathcal{N(}x|\mu_{k},\Sigma_{k}) \Leftrightarrow \ p(x|\mathcal{z}) = \prod_{k = 1}^{K}{\mathcal{N(}x|\mu_{k},\Sigma_{k})^{\mathcal{z}_{k}}} p(xzk=1)=N(xμk,Σk) p(xz)=k=1KN(xμk,Σk)zk

于是可以给出 p ( x ) = ∑ z p ( z ) ∙ p ( x ∣ z ) = ∑ k = 1 K π k N ( x ∣ μ k , Σ k ) p(x) = \sum_{\mathcal{z}}^{}{p\mathcal{(z) \bullet}p\left( x\mathcal{|z} \right)} = \sum_{k = 1}^{K}{\pi_{k}\mathcal{N(}x|\mu_{k},\Sigma_{k})} p(x)=zp(z)p(xz)=k=1KπkN(xμk,Σk),同时, z \mathcal{z} z的条件后验概率 γ ( z k ) \gamma(\mathcal{z}_{k}) γ(zk)由贝叶斯定理得(已知为 x x x,类别为 z k \mathcal{z}_{k} zk的概率):

γ ( z k ) ≡ p ( z k = 1 | x ) = p ( z k = 1 ) p ( x | z k = 1 ) ∑ j = 1 K p ( z j = 1 ) p ( x ∣ z j = 1 )   = π k N ( x ∣ μ k , Σ k ) ∑ j = 1 K π j N ( x ∣ μ j , Σ k ) \begin{array}{r} \gamma(z_{k}) \equiv p\left( \mathcal{z}_{k} = 1 \middle| x \right) \end{array} = \frac{p\left( z_{k} = 1 \right)p\left( x \middle| z_{k} = 1 \right)}{\sum_{j = 1}^{K}{p\left( z_{j} = 1 \right)p\left( x\mid z_{j} = 1 \right)}}\ = \frac{\pi_{k}\mathcal{N}\left( x\mid\mu_{k},\Sigma_{k} \right)}{\sum_{j = 1}^{K}{\pi_{j}\mathcal{N}\left( x\mid\mu_{j},\Sigma_{k} \right)}} γ(zk)p(zk=1x)=j=1Kp(zj=1)p(xzj=1)p(zk=1)p(xzk=1) =j=1KπjN(xμj,Σk)πkN(xμk,Σk)

于是此聚类过程可以看做将概率分布 p ( x ) p(x) p(x)解耦成 K K K个高斯分布,对应 K K K个类别。对于数据集 X = { x 1 , … , x N } , x i ∈ R D , X ∈ R N × D X = \left\{ x_{1},\ldots,x_{N} \right\},x_{i} \in \mathbb{R}^{D},X \in \mathbb{R}^{N \times D} X={x1,,xN},xiRD,XRN×D,对应隐变量表示为 Z ∈ R N × K Z \in \mathbb{R}^{N \times K} ZRN×K

则对数似然函数为
ln ⁡ p ( X ∣ π , μ , Σ ) = ∑ n = 1 N ln ⁡ { ∑ k = 1 K π k N ( x n ∣ μ k , Σ k ) } \ln p(X \mid \pi,\mu,\Sigma) = \sum_{n = 1}^{N}{\ln\left\{ \sum_{k = 1}^{K}{\pi_{k}\mathcal{N}\left( x_{n}\mid\mu_{k},\Sigma_{k} \right)} \right\}} lnp(Xπ,μ,Σ)=n=1Nln{k=1KπkN(xnμk,Σk)}

将此似然函数关于 μ k \mu_{k} μk求导(假设 Σ k \Sigma_{k} Σk非奇异),令 N k = ∑ n = 1 N γ ( z n k ) ,   γ ( z n k ) ≡ p ( z k = 1 | x n ) N_{k} = \sum_{n = 1}^{N}{\gamma\left( z_{nk} \right),\ \gamma\left( z_{nk} \right) \equiv p\left( z_{k} = 1 \middle| x_{n} \right)} Nk=n=1Nγ(znk), γ(znk)p(zk=1xn)为能被分配到聚类 k k k的有效数量,可以得到:

∑ n = 1 K π k N ( x n ∣ μ k , Σ k ) ∑ j π j N ( x n ∣ μ j , Σ j ) ⏟ γ ( z n k ) Σ k − 1 ( x n − μ k ) = 0 ⇒ μ k = 1 N k ∑ n = 1 N γ ( z n k ) x n \sum_{n=1}^{K}\frac{\pi_{k}\mathcal{N}(x_{n}\mid\mu_{k},\Sigma_{k})}{\underbrace{\sum_{j}\pi_{j}\mathcal{N}(x_{n}\mid\mu_{j},\Sigma_{j})}_{\gamma({z}_{nk})}}\Sigma_{k}^{-1}(x_{n}-\mu_{k})=0\Rightarrow\mu_{k}=\frac{1}{N_{k}}\sum_{n=1}^{N}\gamma(z_{nk})x_{n} n=1Kγ(znk) jπjN(xnμj,Σj)πkN(xnμk,Σk)Σk1(xnμk)=0μk=Nk1n=1Nγ(znk)xn

由此式 μ k \mu_{k} μk可视为当前所有点数据为第 k k k类的概率加权平均。

同样地,将此函数关于 Σ k \Sigma_{k} Σk求导等于0可以得到:

Σ k = 1 N k ∑ n = 1 N γ ( z n k ) ( x n − μ k ) ( x − μ k ) T \Sigma_{k} = \frac{1}{N_{k}}\sum_{n = 1}^{N}{\gamma(z_{nk})(x_{n} - \mu_{k})(x - \mu_{k})^{T}} Σk=Nk1n=1Nγ(znk)(xnμk)(xμk)T

最后使用拉格朗日乘子法关于 π k \pi_{k} πk优化 ln ⁡ p ( X ∣ π , μ , Σ ) + λ ( ∑ k = 1 K π k − 1 ) \ln{p\left( X\mid\pi,\mu,\Sigma \right)} + \lambda(\sum_{k = 1}^{K}{\pi_{k} - 1}) lnp(Xπ,μ,Σ)+λ(k=1Kπk1) π k \pi_{k} πk需要满足和为1的条件)得到:

∑ n = 1 N N ( x n ∣ μ k , Σ k ) ∑ j π j N ( x n ∣ μ j , Σ j ) + λ = 0 ⇒ π k = N k N \sum_{n = 1}^{N}{\frac{\mathcal{N(}x_{n} \mid \mu_{k},\Sigma_{k})}{\sum_{j}^{}{\pi_{j}\mathcal{N(}x_{n} \mid \mu_{j},\Sigma_{j})}} + \lambda} = 0 \Rightarrow \pi_{k} = \frac{N_{k}}{N} n=1NjπjN(xnμj,Σj)N(xnμk,Σk)+λ=0πk=NNk

使用EM算法优化 ln ⁡ p ( X ∣ π , μ , Σ ) \ln p(X \mid \pi,\mu,\Sigma) lnp(Xπ,μ,Σ)即可总结为以下步骤:


ALGORITHM 1 EM for Gaussian Mixture Models

  1. input X ← X \leftarrow X数据集, K ← K \leftarrow K类别数目, i t e r ← iter \leftarrow iter迭代次数;
  2. 初始化均值 μ k \mu_{k} μk、协方差 Σ k \Sigma_{k} Σk和混合系数 π k \pi_{k} πk
  3. 计算对数似然 ln ⁡ p ( X ∣ π , μ , Σ ) ← ∑ n = 1 N ln ⁡ { ∑ k = 1 K π k N ( x n ∣ μ k , Σ k ) } \ln p(X \mid \pi,\mu,\Sigma) \leftarrow \sum_{n = 1}^{N}{\ln\left\{ \sum_{k = 1}^{K}{\pi_{k}\mathcal{N}\left( x_{n}\mid\mu_{k},\Sigma_{k} \right)} \right\}} lnp(Xπ,μ,Σ)n=1Nln{k=1KπkN(xnμk,Σk)}
  4. while i < i t e r i < iter i<iter do
  5. γ ( z n k ) ← π k N ( x n ∣ μ k , Σ k ) ∑ j = 1 K π j N ( x n ∣ μ j , Σ j ) \gamma(z_{nk}) \leftarrow \frac{\pi_{k}\mathcal{N}\left( x_{n}\mid\mu_{k},\Sigma_{k} \right)}{\sum_{j = 1}^{K}{\pi_{j}\mathcal{N}\left( x_{n}\mid\mu_{j},\Sigma_{j} \right)}} γ(znk)j=1KπjN(xnμj,Σj)πkN(xnμk,Σk); (E步)
  6. μ k n e w ← 1 N k ∑ n = 1 N γ ( z n k ) x n \mu_{k}^{new} \leftarrow \frac{1}{N_{k}}\sum_{n = 1}^{N}{\gamma(z_{nk})x_{n}} μknewNk1n=1Nγ(znk)xn
  7. Σ k n e w ← 1 N k ∑ n = 1 N γ ( z n k ) ( x n − μ k n e w ) ( x − μ k n e w ) T \Sigma_{k}^{new} \leftarrow \frac{1}{N_{k}}\sum_{n = 1}^{N}{\gamma(z_{nk})(x_{n} - \mu_{k}^{new})(x - \mu_{k}^{new})^{T}} ΣknewNk1n=1Nγ(znk)(xnμknew)(xμknew)T; (M步)
  8. π k n e w ← N k N \pi_{k}^{new} \leftarrow \frac{N_{k}}{N} πknewNNk
  9. end while
  10. return μ k , Σ k , π k \mu_{k},\Sigma_{k},\pi_{k} μk,Σk,πk //返回最优参数;

4.2 实验设计

4.2.1 随机数据生成

在这里插入图片描述
如上图代码,使用np.random.multivariate_normal方法按给定的协方差矩阵和均值按多元高斯分布初始化 k k k个类别的数据点。

4.2.2 K-means聚类

首先初始化 k k k个类的中心,这里采取的是从数据集中随机选取 k k k个样本作为初始的 k k k类中心。

在这里插入图片描述

而后是更新中心的算法,主要是分为两步:

  1. 通过计算每个样本到 k k k个中心的距离(欧式距离),然后选取最小的距离对应的那个聚类中心作为样本标签,将该样本划分到这个类中,

  2. 根据更新后的类别计算类内均值,作为新的中心。

在这里插入图片描述

重复上述过程,直至中心更新距离较之上次变化较小时退出迭代。

在这里插入图片描述

4.2.3 混合高斯模型GMM

首先初始化 k k k个类的均值、协方差和混合系数,可以有随机生成和采用K-means聚类的结果两种方式进行初始化。

在这里插入图片描述

根据对数似然计算公式 l n p ( X ∣ π , μ , Σ ) ← ∑ n = 1 N ln ⁡ { ∑ k = 1 K π k N ( x n ∣ μ k , Σ k ) } lnp(X \mid \pi,\mu,\Sigma) \leftarrow \sum_{n = 1}^{N}{\ln\left\{ \sum_{k = 1}^{K}{\pi_{k}\mathcal{N}\left( x_{n}\mid\mu_{k},\Sigma_{k} \right)} \right\}} lnp(Xπ,μ,Σ)n=1Nln{k=1KπkN(xnμk,Σk)}以及 关于 μ k \mu_{k} μk Σ k \Sigma_{k} Σk π k \pi_{k} πk的导数进行EM更新:

  1. E步:计算 γ ( z n k ) ← π k N ( x n ∣ μ k , Σ k ) ∑ j = 1 K π j N ( x n ∣ μ j , Σ j ) \gamma(z_{nk}) \leftarrow \frac{\pi_{k}\mathcal{N}\left( x_{n}\mid\mu_{k},\Sigma_{k} \right)}{\sum_{j = 1}^{K}{\pi_{j}\mathcal{N}\left( x_{n}\mid\mu_{j},\Sigma_{j} \right)}} γ(znk)j=1KπjN(xnμj,Σj)πkN(xnμk,Σk),即各数据点的类别概率;

  2. M步:计算新的均值 μ k n e w = 1 N k ∑ n = 1 N γ ( z n k ) x n ,  混合系数 π k n e w ← N k N 以及 协方差 Σ k n e w = 1 N k ∑ n = 1 N γ ( z n k ) ( x n − μ k n e w ) ( x − μ k n e w ) T \mu_{k}^{new} = \frac{1}{N_{k}}\sum_{n = 1}^{N}{\gamma(z_{nk})x_{n}},\ 混合系数\pi_{k}^{new} \leftarrow \frac{N_{k}}{N}以及{协方差\Sigma}_{k}^{new} = \frac{1}{N_{k}}\sum_{n = 1}^{N}{\gamma(z_{nk})(x_{n} - \mu_{k}^{new})(x - \mu_{k}^{new})^{T}} μknew=Nk1n=1Nγ(znk)xn, 混合系数πknewNNk以及协方差Σknew=Nk1n=1Nγ(znk)(xnμknew)(xμknew)T

在这里插入图片描述

重复上述过程,直至似然函数较之上次变化较小时退出迭代。

在这里插入图片描述

4.3 实验结果及分析

4.3.1 自己生成数据结果比较

设置均值为 ( − 2 , − 2 ) , ( 2 , − 2 ) , ( 2 , 2 ) , ( − 2 , 2 ) ( - 2, - 2),(2, - 2),(2,2),( - 2,2) (2,2),(2,2),(2,2),(2,2),协方差矩阵均为 [ 1 0 0 1 ] \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} [1001],生成1000组数据,而后先后使用K-means和GMM进行聚类,聚类结果如下:

K-means正确率为96.7%,GMM正确率为96.9%(在使用K-means的结果作为GMM初始化的条件下)。

在这里插入图片描述

同时,经过反复实验发现,K-means和GMM的聚类结果严重依赖于初始化的结果,当初始化中心(或均值)选取区分度不高时,结果往往会比较差。

而GMM以K-means的结果初始化,能够一定程度上优化K-means的聚类结果(特别是当分类结果不好时)。
在这里插入图片描述

而特征之间不相互独立时,GMM聚类结果明显优于K-means。这是由于K-means假设数据呈球状分布,不能够区分开具有不相互独立的特征。

下图为均值为 ( − 2 , − 2 ) , ( 2 , − 2 ) , ( 2 , 2 ) , ( − 2 , 2 ) ( - 2, - 2),(2, - 2),(2,2),( - 2,2) (2,2),(2,2),(2,2),(2,2),协方差矩阵均为 [ 1 0.36 0.36 1 ] \begin{bmatrix} 1 & 0.36 \\ 0.36 & 1 \end{bmatrix} [10.360.361],生成1000组数据,先后使用K-means和GMM进行聚类的聚类结果如下:

此时K-means正确率为91.8%,GMM正确率为97.6%。

在这里插入图片描述

4.3.2 UCI-Iris数据集结果比较

而后使用Iris数据集进行聚类,K-means分类正确率为88%,GMM的分类正确率为96.7%,将聚类结果按第一个特征和第二个特征进行可视化结果如下:

在这里插入图片描述

5. 实验结论

K-means和GMM都是EM算法的体现。两者共同之处都有隐变量,遵循EM算法的E步和M步的迭代优化。

K-means其实就是一种特殊的高斯混合模型,提出了强假设,假设每一类在样本数据中出现的概率相等均为 1 k \frac{1}{k} k1,每个特征间相互独立,且满足变量间的协方差矩阵为单位对角阵。在此条件下,可以直接用欧氏距离作为K-means的协方差去衡量相似性。

而GMM用混合高斯模型来描述聚类结果,且假设多个高斯模型对总模型的贡献是有权重的,且样本属于某一类也是由概率的,从而相似度也由离散的 0 , 1 0,1 0,1变成了需要通过全概率公式计算的值,分类效果一般好于K-means。

实验发现,初值的选取对K-means和GMM的效果影响较大,初始化较差可能会导致陷入局部最优解而得不到较好的聚类结果。可以使用GMM对K-means的分类结果进行进一步优化。

6. 参考文献

[1]李航. 统计学习方法[M]. 清华大学出版社, 2012.

[2]周志华. 机器学习[M]. 清华大学出版社, 2016.

[3]Bishop C .Pattern Recognition and Machine Learning[M]. 2006.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第十三讲 单片机驱动彩色液晶屏 bin档的烧录方法

单片机驱动TFT彩色液晶屏系列讲座 目录 第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频 第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架 第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化 第四讲 单片机驱动彩色液晶屏 控…

解锁 JavaScript 数组的强大功能:常用方法和属性详解(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

摆脱油光和黑头,先敷15分钟的亚马逊白泥面膜吧

寒冷干燥的冬季&#xff0c;是皮肤最容易出现问题的时候&#xff0c;像是油性皮肤就更容易出油&#xff0c;另外黑头之类的问题也会变得更加常见。因此&#xff0c;在这个季节里&#xff0c;我们需要特别注意保护皮肤&#xff0c;多多补水保湿&#xff0c;同时深入清洁毛孔是非…

SpringCloud.03.网关Gateway

目录 网关Gateway的概念&#xff1a; 准备 使用 方式一 因为配置了网关所以可以直接通过gateway发送请求 方式二 修改配置前&#xff1a;http://localhost:8082/provider/run 方式三(动态路由) 导入配置类 网关Gateway的概念&#xff1a; Spring Cloud Gateway 是 Spri…

分布形态的度量_峰度系数的探讨

集中趋势和离散程度是数据分布的两个重要特征,但要全面了解数据分布的特点&#xff0c;还应掌握数据分布的形态。 描述数据分布形态的度量有偏度系数和峰度系数, 其中偏度系数描述数据的对称性,峰度系数描述与正态分布的偏离程度。 峰度系数反映分布峰的尖峭程度的重要指标. 当…

失踪人员信息发布与管理系统:计算机毕设课题的研究与实践 springboot+java+vue+mysql

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

认知觉醒(九)

认知觉醒(九) 专注力——情绪和智慧的交叉地带 第一节 情绪专注&#xff1a;一招提振你的注意力 用元认知来观察自己的注意力是一件很有意思的事情&#xff0c;相信你可以轻易观察到这种现象&#xff1a;身体做着A&#xff0c;脑子却想着B。 跑步的时候&#xff0c;手脚在…

力扣日记1.14-【二叉树篇】108. 将有序数组转换为二叉搜索树

力扣日记&#xff1a;【二叉树篇】108. 将有序数组转换为二叉搜索树 日期&#xff1a;2023.1.14 参考&#xff1a;代码随想录、力扣 108. 将有序数组转换为二叉搜索树 题目描述 难度&#xff1a;简单 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;…

现代控制理论基础

在学习卡尔曼滤波、粒子滤波、隐马尔可夫模型时候&#xff0c;经常会提到状态方程的概念&#xff0c;这边联想到当时学习过的一门课程现代控制理论&#xff0c;这边就简单回顾一下吧。在回顾之前&#xff0c;串联下高等数学中微分方程的知识点。 一. 微分方程 高等数学上册第…

架构师 - 架构师是做什么的 - 学习总结

架构师核心定义 架构师是什么 架构师是业务和技术之间的桥梁 架构师的核心职责是消除不确定性、和降低复杂性 架构设计环 架构师的三个核心能力 架构师的三个关键思维 架构师主要职责 架构设计 Vs 方案设计 架构设计前期 主要任务 澄清不确定性 明确利益干系人的诉求消除冲…

10.9.2 std::function 非OO的多态实现 Page185~187

源代码&#xff1a; #include <iostream> #include <functional> #include <list>using namespace std;//使用function模板类定义一个类型&#xff0c; //该类型要求作为T的 //函数类型是参数是string,返回值是void typedef std::function <void (std::s…

全链路压测方案(一)—方案调研

一、概述 在业务系统中&#xff0c;保证系统稳定至关重要&#xff0c;直接影响线上业务稳定和性能。测试工作作为保证生产质量的最后一关&#xff0c;扮演者重要的角色。全链路压测是一种重要的测试工具和手段。可以解决系统中多环节多节点无法全流程打满流量的痛点问题&a…

Ubuntu 22.04 Cron使用

需要定时处理的场景还是比较多的&#xff0c;比如信息推送、日志清理等。 这篇文章我们来说说如何使用cron来实现定时处理&#xff0c;以及监控任务的执行。 使用 Ubuntu中使用cron&#xff0c;要用到的命令是crontab。不加sudo时&#xff0c;处理的是个人的定时任务。当加上…

pytorch集智4-情绪分类器

1 目标 从中文文本中识别出句子里的情绪。和上一章节单车预测回归问题相比&#xff0c;这个问题是分类问题&#xff0c;不是回归问题 2 神经网络分类器 2.1 如何用神经网络分类 第二章节用torch.nn.Sequantial做的回归预测器&#xff0c;输出神经元只有一个。分类器和其区别…

计算机网络期末复习(基础概念+三套卷子练习)

第一章&#xff1a;计算机网络概念 计算机网络的概念 计算机网络的定义 计算机网络是指将地理位置不同的 具有独立功能的多台计算机 及其外部设备&#xff0c;通过 通信线路链接 起来&#xff0c;在网络操作系统&#xff0c;网络管理软件及网络通信协议的管理和协调下&#…

【生存技能】git操作

先下载git https://git-scm.com/downloads 我这里是win64&#xff0c;下载了相应的直接安装版本 64-bit Git for Windows Setup 打开git bash 设置用户名和邮箱 查看设置的配置信息 获取本地仓库 在git bash或powershell执行git init&#xff0c;初始化当前目录成为git仓库…

精品量化公式——“区域突破”,应对当下行情较好的主图看盘策略

不多说&#xff0c;直接上效果如图&#xff1a; ► 日线表现 代码评估 技术指标代码评估&#xff1a; VAR1, VAR2, VAR3&#xff1a;这些变量是通过指数移动平均&#xff08;EMA&#xff09;计算得出的。EMA是一种常用的技术分析工具&#xff0c;用于平滑价格数据并减少市场“…

Ubuntu共享文件到win

Ubuntu共享文件到win 1、安装samba sudo apt-get install samba samba-common2、创建一个共享文件夹&#xff0c;并设置777权限 mkdir /home/qyh/share sudo chmod 777 /home/qyh/share我的用户名&#xff1a;qyh。 3、添加用户及密码 sudo smbpasswd -a qyh4、修改配置文…

操作系统复习篇

目录 一、引论 1.1、操作系统的目标 方便性&#xff1a; 有效性&#xff1a; 可扩充性&#xff1a; 开放性&#xff1a; 1.2、操作系统的作用 用户与计算机硬件系统之间的接口&#xff1a; 计算机系统资源的管理者&#xff1a; 实现对计算机资源的抽象&#xff1a; 1…

SqlAlchemy使用教程(二) 入门示例及编程步骤

SqlAlchemy使用教程(一) 原理与环境搭建SqlAlchemy使用教程(三) CoreAPI访问与操作数据库详解 二、入门示例与基本编程步骤 在第一章中提到&#xff0c;Sqlalchemy提供了两套方法来访问数据库&#xff0c;由于Sqlalchemy 官方文档结构有些乱&#xff0c;对于ORM的使用步骤的描…