机器学习笔记之谱聚类(一)k-Means聚类算法介绍

news2024/11/15 17:30:01

机器学习笔记之谱聚类——K-Means聚类算法介绍

引言

从本节开始,将介绍聚类任务,本节将介绍 k-Means \text{k-Means} k-Means算法。

回顾:高斯混合模型

高斯混合模型( Gaussian Mixture Model,GMM \text{Gaussian Mixture Model,GMM} Gaussian Mixture Model,GMM)是一种处理聚类任务的常用模型。作为一种概率生成模型,它的概率图结构可表示为如下形式:
高斯混合模型——概率图结构
其中隐变量 Z \mathcal Z Z是一个离散型随机变量,对应随机变量 X \mathcal X X后验结果服从高斯分布:
Z ∼ Categorical Distribution ( 1 , 2 , ⋯   , K ) X ∣ Z ∼ N ( μ k , Σ k ) k ∈ { 1 , 2 , ⋯   , K } \begin{aligned} \mathcal Z & \sim \text{Categorical Distribution}(1,2,\cdots,\mathcal K) \\ \mathcal X & \mid \mathcal Z \sim \mathcal N(\mu_{k},\Sigma_{k}) \quad k \in \{1,2,\cdots,\mathcal K\} \end{aligned} ZXCategorical Distribution(1,2,,K)ZN(μk,Σk)k{1,2,,K}
从生成模型的角度,高斯混合模型对 P ( X , Z ) \mathcal P(\mathcal X,\mathcal Z) P(X,Z)进行建模。关于 X \mathcal X X概率密度函数 P ( X ) \mathcal P(\mathcal X) P(X)可表示为如下形式:
其中 P Z k \mathcal P_{\mathcal Z_k} PZk表示隐变量 Z \mathcal Z Z选择离散结果 k k k时的概率结果; μ Z k , Σ Z k \mu_{\mathcal Z_k},\Sigma_{\mathcal Z_k} μZk,ΣZk表示对应 X ∣ Z k \mathcal X \mid \mathcal Z_k XZk高斯分布的均值和协方差信息。
P ( X ) = ∑ Z P ( X , Z ) = ∑ Z P ( Z ) ⋅ P ( X ∣ Z ) = ∑ k = 1 K P Z k ⋅ N ( μ Z k , Σ Z k ) \begin{aligned} \mathcal P(\mathcal X) & = \sum_{\mathcal Z} \mathcal P(\mathcal X,\mathcal Z) \\ & = \sum_{\mathcal Z} \mathcal P(\mathcal Z) \cdot \mathcal P(\mathcal X \mid \mathcal Z) \\ & = \sum_{k=1}^{\mathcal K}\mathcal P_{\mathcal Z_k} \cdot \mathcal N(\mu_{\mathcal Z_k},\Sigma_{\mathcal Z_k}) \end{aligned} P(X)=ZP(X,Z)=ZP(Z)P(XZ)=k=1KPZkN(μZk,ΣZk)

聚类任务基本介绍

在生成模型综述——监督学习与无监督学习中简单介绍过,聚类( Clustering \text{Clustering} Clustering)任务属于无监督学习( Unsupervised Learning \text{Unsupervised Learning} Unsupervised Learning)任务。无监督学习任务的特点是:样本标签是未知的。而无监督学习的目标是通过学习无标签的样本来揭示数据的内在性质及规律

而聚类试图将数据集内的样本划分为若干个子集,每个子集称为一个( Cluster \text{Cluster} Cluster)。从概率/非概率模型的角度划分,概率模型的典型模型是高斯混合模型;而非概率的聚类模型,其主要代表是 k k k均值算法( k-Means \text{k-Means} k-Means)

距离计算

在介绍 k-Means \text{k-Means} k-Means算法之前,需要介绍聚类的有效性指标( Vaildity Index \text{Vaildity Index} Vaildity Index)。从直观上描述,在聚类的过程我们更希望物以类聚——相同的样本尽可能地彼此相似,不同簇的样本尽可能地不同。

对于两个样本点,通常使用计算它们在样本空间中的距离 来描述两样本之间的相似性程度。样本之间距离越小,样本之间的相似性程度越高,反之同理。

已知两个样本 x ( i ) , x ( j ) x^{(i)},x^{(j)} x(i),x(j)表示如下:
它们均属于 p p p维特征空间,即 x ( i ) , x ( j ) ∈ R p x^{(i)},x^{(j)} \in \mathbb R^p x(i),x(j)Rp.
{ x ( i ) = ( x 1 ( i ) , x 2 ( i ) , ⋯   , x p ( i ) ) T x ( j ) = ( x 1 ( j ) , x 2 ( j ) , ⋯   , x p ( j ) ) T \begin{cases} x^{(i)} = \left(x_1^{(i)},x_2^{(i)},\cdots,x_p^{(i)}\right)^T \\ x^{(j)} = \left(x_1^{(j)},x_2^{(j)},\cdots,x_p^{(j)}\right)^T \end{cases} x(i)=(x1(i),x2(i),,xp(i))Tx(j)=(x1(j),x2(j),,xp(j))T
关于描述样本 x ( i ) , x ( j ) x^{(i)},x^{(j)} x(i),x(j)之间的距离,最常用的方法是明可夫斯基距离( Minkowski Distance \text{Minkowski Distance} Minkowski Distance):
其中参数 m ≥ 1 m \geq 1 m1.
Dist mk ( x ( i ) , x ( j ) ) = ( ∑ k = 1 p ∣ x k ( i ) − x k ( j ) ∣ m ) 1 m \text{Dist}_{\text{mk}}(x^{(i)},x^{(j)}) = \left(\sum_{k=1}^p \left|x_k^{(i)} - x_k^{(j)}\right|^m\right)^{\frac{1}{m}} Distmk(x(i),x(j))=(k=1p xk(i)xk(j) m)m1
m = 2 m=2 m=2时的明可夫斯基距离即欧几里得距离( Euclidean Distance \text{Euclidean Distance} Euclidean Distance),也称欧式距离:
Dist ed ( x ( i ) , x ( j ) ) = ( ∑ k = 1 p ∣ x k ( i ) − x k ( j ) ∣ 2 ) 1 2 = ∑ k = 1 p ∣ x k ( i ) − x k ( j ) ∣ 2 = ∣ ∣ x ( i ) − x ( j ) ∣ ∣ 2 \begin{aligned} \text{Dist}_{\text{ed}}(x^{(i)},x^{(j)}) & = \left(\sum_{k=1}^p \left|x_k^{(i)} - x_k^{(j)}\right|^2\right)^{\frac{1}{2}} \\ & = \sqrt{\sum_{k=1}^p \left|x_k^{(i)} - x_k^{(j)}\right|^2} \\ & = \left|\left|x^{(i)} - x^{(j)}\right|\right|_2 \end{aligned} Disted(x(i),x(j))=(k=1p xk(i)xk(j) 2)21=k=1p xk(i)xk(j) 2 = x(i)x(j) 2
m = 1 m=1 m=1时的明可夫斯基距离即曼哈顿距离( Manhattan Distance \text{Manhattan Distance} Manhattan Distance):
Dist man = ∑ k = 1 p ∣ x k ( i ) − x k ( j ) ∣ = ∣ ∣ x ( i ) − x ( j ) ∣ ∣ 1 \begin{aligned} \text{Dist}_{\text{man}} & = \sum_{k=1}^p \left|x_k^{(i)} - x_k^{(j)}\right| \\ & = \left|\left|x^{(i)} - x^{(j)}\right|\right|_1 \end{aligned} Distman=k=1p xk(i)xk(j) = x(i)x(j) 1

k-Means \text{k-Means} k-Means算法介绍

给定一个样本集合 D = { x ( 1 ) , x ( 2 ) , ⋯   , x ( N ) } \mathcal D = \{x^{(1)},x^{(2)},\cdots,x^{(N)}\} D={x(1),x(2),,x(N)},并设定的数量 C = { C 1 , C 2 , ⋯   , C K } \mathcal C = \{C_1,C_2,\cdots,C_{\mathcal K}\} C={C1,C2,,CK},那么目标函数可描述成:对所有的簇,各簇内样本到均值向量之间的距离之和
{ E = ∑ k = 1 K ∑ x ∈ C k Dist ( x , μ k ) μ k = 1 ∣ C k ∣ ∑ x ∈ C k x \begin{cases} \mathbb E = \sum_{k=1}^{\mathcal K} \sum_{x \in C_k} \text{Dist}(x,\mu_k) \\ \mu_{k} = \frac{1}{|C_k|} \sum_{x \in C_k} x \end{cases} {E=k=1KxCkDist(x,μk)μk=Ck1xCkx
其中 μ k \mu_k μk表示 C k C_k Ck均值向量。观察上式, ∑ x ∈ C k Dist ( x , μ k ) \sum_{x \in C_k} \text{Dist}(x,\mu_k) xCkDist(x,μk)描述了 C k C_k Ck内样本围绕 μ k \mu_k μk紧密程度

  • 如果 ∑ x ∈ C k Dist ( x , μ k ) \sum_{x \in C_k} \text{Dist}(x,\mu_k) xCkDist(x,μk)较小,那么 C k C_k Ck内样本的紧密程度就高;
  • 同理,如果 ∑ k = 1 K ∑ x ∈ C k Dist ( x , μ k ) \sum_{k=1}^{\mathcal K} \sum_{x \in C_k} \text{Dist}(x,\mu_k) k=1KxCkDist(x,μk)小,意味着各个内样本的紧密程度都较高,从而达到样本分类的目的。

如果想要通过这种方式去寻找各簇对应的 μ k \mu_k μk,这明显是一个 NP-Hard \text{NP-Hard} NP-Hard问题:均值向量 μ k \mu_k μk并不是某个真实的样本点,因而它有无穷多种可能;虽然在给定样本的条件下,各簇对应的 μ k \mu_k μk是客观存在的,但相应寻找的代价是极高的
假设在当前样本条件下,找到了最优的簇对应的 μ k \mu_k μk,但样本自身是存在噪声的,如果新加入样本进来,可能会使 μ k \mu_k μk产生变化。

那么 k-Means \text{k-Means} k-Means方法采用贪心策略,通过迭代的方式去近似求解 E = ∑ k = 1 K ∑ x ∈ C k Dist ( x , μ k ) \mathbb E = \sum_{k=1}^{\mathcal K} \sum_{x \in C_k} \text{Dist}(x,\mu_k) E=k=1KxCkDist(x,μk)的最小值。下面通过实例使用 k-Means \text{k-Means} k-Means算法进行近似求解。
示例转载自K-means 算法【基本概念篇】非常感谢,侵删。

k-Means \text{k-Means} k-Means算法示例

已知包含二维特征的数据集合 D \mathcal D D表示如下,并针对该集合使用 k-Means \text{k-Means} k-Means算法执行聚类任务:
D = { ( 2 , 10 ) , ( 2 , 5 ) , ( 8 , 4 ) , ( 5 , 8 ) , ( 7 , 5 ) , ( 6 , 4 ) , ( 1 , 2 ) , ( 4 , 9 ) } \mathcal D = \{(2,10),(2,5),(8,4),(5,8),(7,5),(6,4),(1,2),(4,9)\} D={(2,10),(2,5),(8,4),(5,8),(7,5),(6,4),(1,2),(4,9)}
对应二维图像表示如下:
k-Means算法示例——样本空间

  • 假设将上述集合内的样本点划分成三类,因此需要选择三个类对应的初始中心。这里我们从集合中随机选择样本点作为初始中心(上图中的橙色样本点):
    当然,并不是说‘初始中心’就必须在样本中进行选择,实际上只要是样本空间中任意点都可作为初始中心。
    μ 1 ( i n i t ) = ( 2 , 10 ) μ 2 ( i n i t ) = ( 5 , 8 ) μ 3 ( i n i t ) = ( 1 , 2 ) \mu_1^{(init)} = (2,10)\quad \mu_2^{(init)} = (5,8)\quad \mu_3^{(init)} = (1,2) μ1(init)=(2,10)μ2(init)=(5,8)μ3(init)=(1,2)
  • 对两样本点之间的距离 Dist ( x ( i ) , x ( j ) ) ; x ( i ) , x ( j ) ∈ D \text{Dist}(x^{(i)},x^{(j)});x^{(i)},x^{(j)} \in \mathcal D Dist(x(i),x(j));x(i),x(j)D进行定义。由于样本比较简单,这里直接定义为曼哈顿距离
    ρ [ x ( i ) , x ( j ) ] = ∣ x 1 ( i ) − x 1 ( j ) ∣ + ∣ x 2 ( i ) − x 2 ( j ) ∣ { x ( i ) = ( x 1 ( i ) , x 2 ( i ) ) T x ( j ) = ( x 1 ( j ) , x 2 ( j ) ) T \rho[x^{(i)},x^{(j)}] = \left|x_1^{(i)} - x_1^{(j)}\right| + \left|x_2^{(i)} - x_2^{(j)}\right| \quad \begin{cases} x^{(i)} = (x_1^{(i)},x_2^{(i)})^T \\ x^{(j)} = (x_1^{(j)},x_2^{(j)})^T \end{cases} ρ[x(i),x(j)]= x1(i)x1(j) + x2(i)x2(j) {x(i)=(x1(i),x2(i))Tx(j)=(x1(j),x2(j))T
  • 定义完毕后,将所有样本点分别与三个初始中心计算曼哈顿距离。具体结果表示如下:
    示例:样本点 ( 5 , 8 ) (5,8) (5,8)与初始中心 ( 2 , 10 ) (2,10) (2,10)之间的曼哈顿距离
    ρ = ∣ 5 − 2 ∣ + ∣ 8 − 10 ∣ = 5 \rho = |5-2| + |8 - 10| = 5 ρ=∣52∣+∣810∣=5
    选择距离最小的初始中心,并划分至该初始中心对应的簇。
SamplePoint/InitialCenter \text{SamplePoint/InitialCenter} SamplePoint/InitialCenter μ 1 ( i n i t ) : ( 2 , 10 ) \mu_1^{(init)}:(2,10) μ1(init):(2,10) μ 2 ( i n i t ) : ( 5 , 8 ) \mu_2^{(init)}:(5,8) μ2(init):(5,8) μ 3 ( i n i t ) : ( 1 , 2 ) \mu_3^{(init)}:(1,2) μ3(init):(1,2) ClusterResult \text{ClusterResult} ClusterResult
( 2 , 10 ) (2,10) (2,10) 0 0 0 5 5 5 9 9 9 1 1 1
( 2 , 5 ) (2,5) (2,5) 5 5 5 6 6 6 4 4 4 3 3 3
( 8 , 4 ) (8,4) (8,4) 12 12 12 7 7 7 9 9 9 2 2 2
( 5 , 8 ) (5,8) (5,8) 5 5 5 0 0 0 10 10 10 2 2 2
( 7 , 5 ) (7,5) (7,5) 10 10 10 5 5 5 9 9 9 2 2 2
( 6 , 4 ) (6,4) (6,4) 10 10 10 5 5 5 7 7 7 2 2 2
( 1 , 2 ) (1,2) (1,2) 9 9 9 10 10 10 0 0 0 3 3 3
( 4 , 9 ) (4,9) (4,9) 3 3 3 2 2 2 10 10 10 2 2 2

至此,得到了第一次迭代产生的聚类结果表示如下:
{ Cluster 1:  ( 2 , 10 ) Cluster 2:  ( 8 , 4 ) , ( 5 , 8 ) , ( 7 , 5 ) , ( 6 , 4 ) , ( 4 , 9 ) Cluster 3:  ( 2 , 5 ) , ( 1 , 2 ) \begin{cases} \text{Cluster 1: }(2,10) \\ \text{Cluster 2: }(8,4),(5,8),(7,5),(6,4),(4,9) \\ \text{Cluster 3: }(2,5),(1,2) \\ \end{cases} Cluster 1: (2,10)Cluster 2: (8,4),(5,8),(7,5),(6,4),(4,9)Cluster 3: (2,5),(1,2)

  • 基于第一次迭代,重新计算每个聚类的中心,并替换初始中心

    • Cluster 1:  \text{Cluster 1: } Cluster 1: 本次聚类中,该类样本点只有1个,因而新的聚类中心就是它自身;
    • Cluster 2:  ( 6 , 6 ) ⇐ { x ˉ 1 = ( 4 + 5 + 6 + 7 + 8 ) / 5 = 6 x ˉ 2 = ( 4 + 4 + 5 + 8 + 9 ) / 5 = 6 \text{Cluster 2: } (6,6) \Leftarrow \begin{cases} \bar x_1 = (4+5+6+7+8) / 5 = 6 \\ \bar x_2 = (4+4+5+8+9) / 5 = 6\end{cases} Cluster 2: (6,6){xˉ1=(4+5+6+7+8)/5=6xˉ2=(4+4+5+8+9)/5=6
    • Cluster 3:  ( 1.5 , 3.5 ) ⇐ { ( 2 + 1 ) / 2 = 1.5 ( 5 + 2 ) / 2 = 3.5 \text{Cluster 3: }(1.5,3.5) \Leftarrow \begin{cases} (2 + 1)/2 = 1.5 \\ (5 + 2)/2 = 3.5 \end{cases} Cluster 3: (1.5,3.5){(2+1)/2=1.5(5+2)/2=3.5

    此时,基于替换中心的样本空间以及聚类区域表示如下(红色样本点表示第一次迭代后的新聚类中心): 第一次迭代——聚类中心、簇更新

  • 重复执行上述步骤,可以得到新的聚类中心以及对应的。直到聚类中心不再发生变化,这意味着:在迭代过程中,通过计算聚类中心所产生的簇内部的样本点已经稳定,不再发生变化。此时即可停止算法:
    最终迭代——聚类中心、簇更新

k-Means \text{k-Means} k-Means算法与高斯混合模型的关系

从上面的迭代过程中,可以发现:整个计算过程与概率没有明显的关联关系。我们仅仅在迭代过程中执行了计算距离并比较大小更新聚类中心这两种操作。

但从单个样本点的角度,可以将其视作高斯混合模型的一种描述。以样本点 ( 2 , 5 ) (2,5) (2,5)为例,对该样本到各聚类中心之间的距离进行计算,并将其映射至(0,1)区间:
注意:这里的箭头表示的是‘欧式距离’,而不是曼哈顿距离。这里仅表示一个指向,不要被误导。
在这里插入图片描述

注意:距离数值越小的,映射的结果越大。这意味着样本点与该聚类中心对应的簇关联更加密切。因而这里使用的标准化方法表示如下。其中 N N N表示簇的个数; SumDistance \text{SumDistance} SumDistance表示样本到所有聚类中心的 ManhattanDistance \text{ManhattanDistance} ManhattanDistance之和。
MappingResult = 1 N − 1 ( 1 − ManhattanDistance SumDistance ) \text{MappingResult} = \frac{1}{N - 1}(1 - \frac{\text{ManhattanDistance}}{\text{SumDistance}}) MappingResult=N11(1SumDistanceManhattanDistance)
这里的标准化方法仅仅描述映射后的大小关系,严格来说并不准确。这里提出一种函数 Softmax ( 1 ManhanttanDistance ) \text{Softmax}(\frac{1}{\text{ManhanttanDistance}}) Softmax(ManhanttanDistance1)作为参考。

ManhattanDistance \text{ManhattanDistance} ManhattanDistance MappingResult \text{MappingResult} MappingResult
( 1.5 , 3.5 ) (1.5,3.5) (1.5,3.5) 2 2 2 0.4253 0.4253 0.4253
( 7 , 4.3 ) (7,4.3) (7,4.3) 5.7 5.7 5.7 0.2868 0.2868 0.2868
( 3.67 , 9 ) (3.67,9) (3.67,9) 5.67 5.67 5.67 0.2879 0.2879 0.2879

观察上述表格的 MappingResult \text{MappingResult} MappingResult,完全可以将这一组数值 P ( Z ) = [ 0.4253 , 0.5868 , 0.2879 ] \mathcal P(\mathcal Z) = [0.4253,0.5868,0.2879] P(Z)=[0.4253,0.5868,0.2879]看作是一个概率分布。该概率分布中概率值最大的是对应聚类中心 ( 1.5 , 3.5 ) (1.5,3.5) (1.5,3.5)对应的簇结果。
另一种思路在于:此时的聚类中心已经不是样本点了,此时的聚类中心在样本空间中已经没有任何实际意义,也符合隐变量的描述。

而样本点在给定聚类中心 Z \mathcal Z Z的条件下,那么样本点 x ( i ) ∣ Z x^{(i)} \mid \mathcal Z x(i)Z服从高斯分布。因为该样本点距离聚类中心越近,意味着它从该中生成的概率越高。因而可将 k-Means \text{k-Means} k-Means视作一种基于高斯混合模型思想的硬划分模型( Hard-GMM \text{Hard-GMM} Hard-GMM)。

k-Means \text{k-Means} k-Means算法的缺陷

虽然 k-Means \text{k-Means} k-Means算法简单,但它同样存在缺陷:

  • 我们需要手动添加聚类数量。这需要对样本信息有一定程度的了解,聚类数量的选择对聚类结果的影响是巨大的;
  • 它对于聚类分布紧密( Compactness \text{Compactness} Compactness)的样本集合有不错的聚类效果,如簇是凸形状( Convex \text{Convex} Convex)这种类似云团状的分布结构
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn import cluster

n_samples = 500
colors = ["tab:blue","tab:orange","tab:green"]
blobs = datasets.make_blobs(n_samples=n_samples, random_state=8)

X,y = blobs
KMeans = cluster.MiniBatchKMeans(n_clusters=3)
KMeans.fit(X)
yPred = KMeans.predict(X)

for _,(XElement,yPredElement) in enumerate(zip(X,yPred)):
    plt.scatter(XElement[0],XElement[1],color=colors[yPredElement],s=5)
plt.show()

返回结果如下:
k-Means处理凸集合
但针对连通性( Connectivity \text{Connectivity} Connectivity)簇分布,它的聚类结果可能并不漂亮
我们原本希望将大圆与小圆中的样本划分开来;不仅k-Means出现这样的现象,高斯混合模型同样会出现这种现象。

blobs = datasets.make_circles(n_samples=n_samples, factor=0.5, noise=0.05)

k-Means处理连通性簇分布
关于这种结构,在核方法思想与核函数介绍中提到过,使用核方法 + k-Means \text{k-Means} k-Means的方式进行处理,但这种方式同样因维度增加而可能出现维度诅咒/维度惩罚( Curse of Dimensionary \text{Curse of Dimensionary} Curse of Dimensionary)的风险。因此,针对类似连通类型的簇分布, k-Means \text{k-Means} k-Means并不可取。
在这里插入图片描述
下一节从 k-Means \text{k-Means} k-Means的缺陷开始,介绍谱聚类( Spectral Clusting \text{Spectral Clusting} Spectral Clusting)。

相关参考:
机器学习-谱聚类(1)-背景介绍
K-means 算法【基本概念篇】
Sklearn \text{Sklearn} Sklearn中文文档——K-means
机器学习——周志华著

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

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

相关文章

CTFer成长之路之CTF中的SQL注入

CTF中的SQL注入CTF SQL注入 SQL注入-1 题目描述: 暂无 docker-compose.yml version: 3.2services:web:image: registry.cn-hangzhou.aliyuncs.com/n1book/web-sql-1:latestports:- 80:80启动方式 docker-compose up -d 题目Flag n1book{union_select_is_so_cool} Wri…

PyQt5数据库开发1 4.3 QSqlTableModel 之 相关槽函数的实现(多图长文详解)

目录 一、打开数据库表 1. 写打开数据库的槽函数 2. 运行后发现数据库可以打开了 3. ODBC配通了,数据库还是打不开 4. 写在tableView上显示数据库表的函数 5. 运行后发现表可以显示了 6. 代码分析 7. 添加列名称 8. 根据内容调整列宽 9. 备注:…

Kaggle系列之CIFAR-10图像识别分类(残差网络模型ResNet-18)

CIFAR-10数据集在计算机视觉领域是一个很重要的数据集,很有必要去熟悉它,我们来到Kaggle站点,进入到比赛页面:https://www.kaggle.com/competitions/cifar-10CIFAR-10是8000万小图像数据集的一个子集,由60000张32x32彩…

spring cloud gateway集成sentinel并扩展支持restful api进行url粒度的流量治理

sentinel集成网关支持restful接口进行url粒度的流量治理前言使用网关进行总体流量治理(sentinel版本:1.8.6)1、cloud gateway添加依赖:2、sentinel配置3、网关类型项目配置4、通过zk事件监听刷新上报api分组信息1、非网关项目上报api分组信息…

I.MX6ULL_Linux_系统篇(16) uboot分析-启动流程

原文链接:I.MX6ULL_系统篇(16) uboot分析-启动流程 – WSY Personal Blog (cpolar.cn) 前面我们详细的分析了 uboot 的顶层 Makefile,了解了 uboot 的编译流程。本章我们来详细的分析一下 uboot 的启动流程,理清 uboot 是如何启动的。通过对 …

虹科资讯| 虹科AR荣获汽车后市场“20佳”维修工具评委会提名奖!

2022 虹科荣获20佳维修工具 评委会提名奖 特大喜讯,在2月16日《汽车维修与保养》杂志主办的第十八届汽车后市场“20佳”评选活动中,虹科的产品“M400智能AR眼镜”凭借在AR领域的专业实力,通过层层筛选,在102款入围产品中脱颖而出…

GIT:【基础三】Git工作核心原理

目录 一、Git本地四个工作区域 二、Git提交文件流程 一、Git本地四个工作区域 工作目录(Working Directory):电脑上存放开发代码的地方。暂存区(Stage/Index):用于l临时存放改动的文件,本质上只是一个文件,保存即将提交到文件列…

[ 对比学习篇 ] 经典网络模型 —— Contrastive Learning

🤵 Author :Horizon Max ✨ 编程技巧篇:各种操作小结 🏆 神经网络篇:经典网络模型 💻 算法篇:再忙也别忘了 LeetCode [ 对比学习篇 ] 经典网络模型 —— Contrastive Learning🚀 …

MongoDB介绍及使用教程

文章目录一、MongoDB介绍1. 什么是MongoDB2. 为什么要用MongoDB3. MongoDB的应用场景4. MongoDB基本概念二、MongoDB使用教程1.下载安装(Windows)2.MongoDB Conpass简单使用(选学)3.使用navicat连接MongoDB4.JAVA项目中使用MongoD…

JVM11 垃圾回收

1.1GC分类与性能指标 垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。 从不同角度分析垃圾收集器,可以将GC分为不同的类型。 Java不同版本新特性 语法层面:Lambda表达式、switch、自动拆箱装箱、enumAPI层面…

AI稳定生成图工业链路打造

前沿这篇文章会以比较轻松的方式,跟大家交流下如何控制文本生成图片的质量。要知道如何控制文本生成质量,那么我们首先需要知道我们有哪些可以控制的参数和模块。要知道我们有哪些控制的参数和模块,我们就得知道我们文本生成图片的这架机器或…

新手福利——x64逆向基础

一、x64程序的内存和通用寄存器 随着游戏行业的发展,x32位的程序已经很难满足一些新兴游戏的需求了,因为32位内存的最大值为0xFFFFFFFF,这个值看似足够,但是当游戏对资源需求非常大,那么真正可以分配的内存就显得捉襟…

测试人员如何运用好OKR

在软件测试工作中是不是还不知道OKR是什么?又或者每次都很害怕写OKR?或者总觉得很迷茫,不知道目标是什么? OKR 与 KPI 的区别 去年公司从KPI换OKR之后,我也有一段抓瞎的过程,然后自己找了两本书看,一本是《OKR工作法》&#xf…

WPF_ObservableCollection基本使用及其注意项

文章目录一、引言二、ObservableCollection三、结语一、引言 在GUI编程中经常会用到条目控件,常见的如ComboBox(下拉列表框),它内部往往有多个项。 在使用一些图形框架(Qt、WinForm)上进行原始开发时&…

安卓mvvm

AndroidX的意思是android extension libraries, 也就是安卓扩展包 AndroidX其实是Jetpack类库的命名空间 (190条消息) AndroidX初识_Neda Wang的博客-CSDN博客https://blog.csdn.net/weixin_38261570/article/details/111500044 viewmodel ViewModel类旨在以注重生命周期的方…

【机器学习】决策树-C4.5算法

1.C4.5算法 C4.5算法与ID3相似,在ID3的基础上进行了改进,采用信息增益比来选择属性。ID3选择属性用的是子树的信息增益,ID3使用的是熵(entropy, 熵是一种不纯度度量准则),也就是熵的变化值&…

回溯算法理论基础及组合问题

文章目录回溯算法理论基础什么是回溯法回溯法的效率回溯法解决的问题如何理解回溯法回溯法模板组合问题回溯算法理论基础 什么是回溯法 回溯法也可以叫做回溯搜索法,它是一种搜索的方式。 回溯是递归的副产品,只要有递归就会有回溯。 所以以下讲解中&…

LPWAN及高效弹性工业物联网核心技术方案

20多年前的一辆拖拉机就是一个纯机械的产品,里面可能并没有电子或者软件的构成;而随后随着软件的发展,拖拉机中嵌入了软件,它能控制发动机的功率及拖拉机防抱死系统;接下来,通过融入各种软件,拖…

js逆向基础篇-某房地产网站-登录

提示!本文章仅供学习交流,严禁用于任何商业和非法用途,如有侵权,可联系本文作者删除! 网站链接:aHR0cHM6Ly9tLmZhbmcuY29tL215Lz9jPW15Y2VudGVyJmE9aW5kZXgmY2l0eT1iag== 案例分析: 本篇文章分析的是登录逻辑。话不多说,先看看登录中有哪些加密参数,在登录页面随便输入…

K8S DNS解析过程和延迟问题

一、Linux DNS查询解析原理(对于调用glibc库函数gethostbyname的程序)我们在浏览器访问www.baidu.com这个域名,dns怎么查询到这台主机呢?  1、在浏览器中输入www.baidu.com域名,操作系统会先查找本地DNS解析器缓存&a…