机器学习 第9章-聚类

news2025/1/24 14:29:51

机器学习 第9章-聚类

9.1 聚类任务

在“无监督学习”(unsupervised learning)中,训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础。此类学习任务中研究最多、应用最广的是“聚类”(clustering)。

聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个“簇”(cluster)。通过这样的划分,每个簇可能对应于一些潜在的概念(类别),如“浅色瓜”“深色瓜”,“有籽瓜”“无籽瓜”,甚至“本地瓜”“外地瓜”等;需说明的是,这些概念对聚类算法而言事先是未知的,聚类过程仅能自动形成簇结构,簇所对应的概念语义需由使用者来把握和命名。

形式化地说,假定样本集 D = x 1 , x 2 , . . . , x m D= {x_1,x_2,...,x_m} D=x1,x2,...,xm包含m个无标记样本,每个样本 x i = ( x i 1 ; x i 2 ;。。。; x i n ) x_i=(x_{i1};x_{i2};。。。;x_{in}) xi=(xi1xi2;。。。;xin)是一个 n n n维特征向量,则聚类算法将样本集 D D D划分为 k k k个不相交的簇 C l ∣ l = 1 , 2 , . . . , k {C_l|l=1,2,...,k} Cll=1,2,...,k,其中 C l ′ ∩ l ′ ≠ l C l = ∅ C_{l'}∩_{l'≠l}C_l=∅ Cll=lCl= D = ⋃ l = 1 k C l D=⋃^k_{l=1}C_l D=l=1kCl。 相应地,我们用 λ j ∈ 1 , 2 , . . . , k λ_j∈{1,2,...,k} λj1,2,...,k表示样本 x j x_j xj的“簇标记”(cluster label),即 x j ∈ C λ j x_j∈C_{λ_j} xjCλj,于是,聚类的结果可用包含 m m m个元素的簇标记向量 λ = ( λ 1 ; λ 2 ; . . . ; λ m ) λ=(λ_1;λ_2;...;λ_m) λ=(λ1;λ2;...;λm)表示。

聚类既能作为一个单独过程,用于找寻数据内在的分布结构,也可作为分类等其他学习任务的前驱过程。例如,在一些商业应用中需对新用户的类型进行判别,但定义“用户类型”对商家来说却可能不太容易,此时往往可先对用户数据进行聚类,根据聚类结果将每个定义为一个类,然后再基于这些类训练分类模型,用于判别新用户的类型。

基于不同的学习策略,人们设计出多种类型的聚类算法。本章后半部分将对不同类型的代表性算法进行介绍,但在此之前,我们先讨论聚类算法涉及的两个基本问题–性能度量和距离计算。

9.2 性能度量

聚类性能度量亦称聚类“有效性指标”。与监督学习中的性能度量作用相似,对聚类结果,我们需通过某种性能度量来评估其好坏;另一方面,若明确了最终将要使用的性能度量,则可直接将其作为聚类过程的优化目标,从而更好地得到符合要求的聚类结果。

聚类是将样本集D划分为若干互不相交的子集,即样本簇。那么,什么样的聚类结果比较好呢?直观上看,我们希望“物以类聚”,即同一簇的样本尽可能彼此相似,不同簇的样本尽可能不同。换言之,聚类结果的“簇内相似度”(intra-cluster similarity)高且“簇间相似度”(inter-cluster similarity)低

聚类性能度量大致有两类,一类是将聚类结果与某个“参考模型”(reference model)进行比较,称为“外部指标”(external index);另一类是直接考察聚类结果而不利用任何参考模型,称为“内部指标”(internalindex)。

对数据集 D D D,假定通过聚类给出的簇划分为 C C C,参考模型给出的簇划分为 C ∗ C^* C,相应地,令 λ λ λ λ ∗ λ^* λ分别表示与 C C C C ∗ C^* C对应的簇标记向量。我们将样本两两配对考虑,则有定义:
a = ∣ S S ∣ , S S = { ( x i , x j ) ∣ λ i = λ j , λ i ∗ = λ j ∗ , i < j } a=|SS|,SS=\left \{ (x_i,x_j)|\lambda _i=\lambda _j, \lambda _i^*=\lambda _j^* ,i<j\right \} a=SS,SS={(xi,xj)λi=λj,λi=λj,i<j}
b = ∣ S D ∣ , S D = { ( x i , x j ) ∣ λ i = λ j , λ i ∗ ≠ λ j ∗ , i < j } b=|SD|,SD=\left \{ (x_i,x_j)|\lambda _i=\lambda _j, \lambda _i^*\neq \lambda _j^* ,i<j\right \} b=SD,SD={(xi,xj)λi=λj,λi=λj,i<j}
c = ∣ D S ∣ , D S = { ( x i , x j ) ∣ λ i ≠ λ j , λ i ∗ = λ j ∗ , i < j } c=|DS|,DS=\left \{ (x_i,x_j)|\lambda _i\neq \lambda _j, \lambda _i^*=\lambda _j^* ,i<j\right \} c=DS,DS={(xi,xj)λi=λj,λi=λj,i<j}
d = ∣ D D ∣ , D D = { ( x i , x j ) ∣ λ i ≠ λ j , λ i ∗ ≠ λ j ∗ , i < j } d=|DD|,DD=\left \{ (x_i,x_j)|\lambda _i\neq \lambda _j, \lambda _i^*\neq \lambda _j^* ,i<j\right \} d=DD,DD={(xi,xj)λi=λj,λi=λj,i<j}
其中集合SS包含了在 C C C中隶属于相同簇且在 C ∗ C^* C中也隶属于相同簇的样本对,集合SD包含了在 C C C中隶属于相同簇但在 C ∗ C^* C中隶属于不同簇的样本对。

由于每个样本对 ( x i , x j ) ( i < j ) (x_i,x_j)(i<j) (xi,xj)(i<j)仅能出现在一个集合中,因此有 a + b + c + d = m ( m − 1 ) / 2 a+b+c+d=m(m-1)/2 a+b+c+d=m(m1)/2成立

基于以上可以导出下面这些常用的聚类性能度量外部指标:

Jaccard系数
J C = a a + b + c JC=\frac{a}{a+b+c} JC=a+b+ca
FM指数
F M I = a a + b ⋅ a a + c FMI=\sqrt{\frac{a}{a+b}\cdot \frac{a}{a+c}} FMI=a+baa+ca
Rand指数, R I = 2 ( a + d ) m ( m − 1 ) RI=\frac{2(a+d)}{m(m-1)} RI=m(m1)2(a+d)

显然,上述性能度量的结果值均在[0,1]区间,值越大越好

考虑聚类结果的簇划分 C = C 1 , C 2 , . . . , C k C={C_1,C_2,...,C_k} C=C1,C2,...,Ck,定义
a v g ( C ) = 2 ∣ C ∣ ( ∣ C ∣ − 1 ) ∑ 1 ≤ i < j ≤ ∣ C ∣ d i s t ( x i , x j ) avg(C)=\frac{2}{|C|(|C|-1)}\sum_{1\leq i<j\leq |C|}dist(x_i,x_j) avg(C)=C(C1)21i<jCdist(xi,xj)
d i a m ( C ) = m a x 1 ≤ i < j ≤ ∣ C ∣ d i s t ( x i , x j ) diam(C)=max_{1\leq i<j\leq |C|}dist(x_i,x_j) diam(C)=max1i<jCdist(xi,xj)
d m i n ( C i , C j ) = m i n x i ∈ C i , x j ∈ C j d i s t ( x i , x j ) d_{min}(C_i,C_j)=min_{x_i\in C_i,x_j\in C_j}dist(x_i,x_j) dmin(Ci,Cj)=minxiCi,xjCjdist(xi,xj)
d c e n ( C i , C j ) = d i s t ( μ i , μ j ) d_{cen}(C_i,C_j)=dist(\mu _i,\mu _j) dcen(Ci,Cj)=dist(μi,μj)
其中, d i s t ( ⋅ , ⋅ ) dist(·,·) dist(⋅,⋅)用于计算两个样本之间的距离; μ μ μ代表簇 C C C的中心点。显然, a v g ( C ) avg(C) avg(C)对应于簇 C C C内样本间的平均距离, d i a m ( C ) diam(C) diam(C)对应于簇 C C C内样本间的最远距离, d m i n ( C i , C j ) d_{min}(C_i,C_j) dmin(Ci,Cj)对应于簇 C i C_i Ci与簇 C j C_j Cj最近样本间的距离, d c e n ( C i , C j ) d_{cen}(C_i,C_j) dcen(Ci,Cj) 对应于簇 C i C_i Ci与簇 C j C_j Cj中心点间的距离

基于以上4个式子,又可导出下面这些常用的聚类性能度量内部指标:
DB指数
D B I = 1 k ∑ i = 1 k m a x j ≠ i ( a v g ( C i ) + a v g ( C j ) d c e n ( μ i , μ j ) ) DBI=\frac{1}{k}\sum_{i=1}^{k}\underset{j\neq i}{max}(\frac{avg(C_i)+avg(C_j)}{d_{cen}(\mu _i,\mu _j)}) DBI=k1i=1kj=imax(dcen(μi,μj)avg(Ci)+avg(Cj))

Dunn指数
D I = m i n i ≤ i ≤ k { m i n j ≠ i ( d m i n ( C i , C j ) m a x 1 ≤ l ≤ k d i a m ( C l ) ) } DI=\underset{i\leq i\leq k}{min}\left \{ \underset{j\neq i}{min}(\frac{d_{min}(C_i,C_j)}{max_{1\leq l\leq k}diam(C_l)})\right \} DI=iikmin{j=imin(max1lkdiam(Cl)dmin(Ci,Cj))}

显然, D B I DBI DBI的值越小越好,而 D I DI DI则相反,值越大越好

9.3 距离计算

对函数 dist(·,·),若它是一个“距离度量”(distance measure),则需满足些基本性质:非负性、同一性、对称性、直递性

给定样本 x i = ( x i 1 ; x i 2 ;。。。; x i n ) x_i=(x_{i1};x_{i2};。。。;x_{in}) xi=(xi1xi2;。。。;xin) x j = ( x j 1 ; x j 2 ;。。。; x j n ) x_j=(x_{j1};x_{j2};。。。;x_{jn}) xj=(xj1xj2;。。。;xjn),最常用的是“闵可夫斯基距离”(Minkowski distance)
d i s t m k ( x i , x j ) = ( ∑ u = 1 n ∣ x i u − x j u ∣ p ) 1 p dist{mk}(x_i,x_j)=(\sum_{u=1}^{n}|x_{iu}-x_{ju}|^p)^{\frac{1}{p}} distmk(xi,xj)=(u=1nxiuxjup)p1
p=2时,闵可夫斯基距离即欧氏距离;p=1时,闵可夫斯基距离即曼哈顿距离

我们常将属性划分为“连续属性”(continuous attribute)和“离散属性”(categorical attribute),前者在定义域上有无穷多个可能的取值,后者在定义域上是有限个取值。

然而,在讨论距离计算时,属性上是否定义了“序”关系更为重要。例如定义域为 1 , 2 , 3 {1,2,3} 1,2,3的离散属性与连续属性的性质更接近一些能直接在属性值上计算距离:“1”与“2”比较接近、与“3”比较远,这样的属性称为“有序属性”(ordinal attribute);而定义域为 飞机 , 火车 , 轮船 {飞机,火车,轮船} 飞机,火车,轮船这样的离散属性则不能直接在属性值上计算距离,称为“无序属性”(non-ordinalattribute)。显然,闵可夫斯基距离可用于有序属性,

对于无序属性采用的是VDM,令 m u , a m_{u,a} mu,a表示在属性 u u u上取值为 a a a的样本, m u , a , i m_{u,a,i} mu,a,i表示在第 i i i个样本簇中在属性 u u u上取值为 a a a的样本数, k k k为样本簇数,那么属性 u u u上两个离散值 a a a b b b之间的VDM距离可定义为:
V D M p ( a , b ) = ∑ i = 1 k ∣ m u , a , i m u , a − m u , b , i m u , b ∣ p VDM_p(a,b)=\sum _{i=1}^{k}|\frac{m_{u,a,i}}{m_{u,a}}-\frac{m_{u,b,i}}{m_{u,b}}|^p VDMp(a,b)=i=1kmu,amu,a,imu,bmu,b,ip
于是,将闵可夫斯基距离和 VDM 结合即可处理混合属性。假定有 n c n_c nc个有序属性、 n − n c n-n_c nnc个无序属性,不失一般性,令有序属性排列在无序属性之前,则
M i n k o v D M p ( x i , x j ) = ( ∑ u = 1 n c ∣ x i u − x j u ∣ p + ∑ u = n c + 1 n V D M p ( x i u , x j u ) ) 1 p MinkovDM_p(x_i,x_j)=(\sum _{u=1}^{n_c}|x_{iu}-x_{ju}|^p+\sum _{u=n_c+1}^{n}VDM_p(x_{iu},x_{ju}))^\frac{1}{p} MinkovDMp(xi,xj)=(u=1ncxiuxjup+u=nc+1nVDMp(xiuxju))p1

然而,用于相似度度量的距离未必一定要满足距离度量的所有基本性质,;这样的距离称为"非度量距离"

9.4 原型聚类

原型聚类亦称“基于原型的聚类”(prototype-based clustering),此类算法假设聚类结构能通过一组原型刻画,在现实聚类任务中极为常用。通常情形下算法先对原型进行初始化,然后对原型进行迭代更新求解。采用不同的原型表示、不同的求解方式,将产生不同的算法,下面介绍几种著名的原型聚类算法

9.4.1 k均值算法

给定样本集 D D D,“k均值”(k-means)算法针对聚类所得簇划分 C = C 1 , C 2 , . . , C k C={C_1,C_2,..,C_k} C=C1,C2,..,Ck最小化平方误差
E = ∑ i = 1 k ∑ x ∈ C i ∣ ∣ x − u i ∣ ∣ 2 2 E=\sum _{i=1}^{k}\sum _{x\in C_i}||x-u_i||_2^2 E=i=1kxCi∣∣xui22
k 均值算法采用了贪心策略,通过迭代优化来近似求解式。算法流程如图 9.2所示
在这里插入图片描述
其中第1行对均值向量进行初始化,在第4-8行与第9-16行依次对当前簇划分及均值向量选代更新,若迭代更新后聚类结果保持不变,则在第 18 行将当前簇划分结果返回。

在这里插入图片描述

9.4.2 学习向量量化

与k均值算法类似,“学习向量量化”(Learning Vector Quantization,简称 LVQ)也是试图找到一组原型向量来刻画聚类结构,但与一般聚类算法不同的是,LVQ假设数据样本带有类别标记,学习过程利用样本的这些监督信息来辅助聚类。

其算法流程如下图所示:
在这里插入图片描述

9.4.3 高斯混合聚类

n n n维样本空间 X X X中的随机向量 x x x, 若 x x x服从高斯分布,其概率密度函数为
p ( x ) = 1 ( 2 π ) n 2 ∣ Σ ∣ 1 2 e − 1 2 ( x − u ) T Σ − 1 ( x − u ) p(x)=\frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma |^\frac{1}{2}}e^{-\frac{1}{2}(x-u)^T\Sigma ^{-1}(x-u)} p(x)=(2π)2n∣Σ211e21(xu)TΣ1(xu)
将其记为 p ( x ∣ μ , ∑ ) p(x|μ,∑) p(xμ,)

定义高斯混合分布:
p M ( x ) = ∑ i = 1 k α i ⋅ p ( x ∣ μ i , Σ i ) p_M(x)=\sum _{i=1}^{k}\alpha _i\cdot p(x|\mu _i,\Sigma _i) pM(x)=i=1kαip(xμi,Σi)
其中 α \alpha α为混合系数,该分布共由 k个混合成分组成,每个混合成分对应一个高斯分布。

假设样本的生成过程由高斯混合分布给出:首先,根据 α 1 , α 2 ,。。。, α k \alpha_1,\alpha_2,。。。,\alpha_k α1α2,。。。,αk定义的先验分布选择高斯混合成分,其中 α i \alpha_i αi为选择第 i i i个混合成分的概率;然后,根据被选择的混合成分的概率密度函数进行采样,从而生成相应的样本。
其算法流程如下:
在这里插入图片描述

9.5 密度聚类

密度聚类亦称“基于密度的聚类”(density-based clustering),此类算法假设聚类结构能通过样本分布的紧密程度确定。通常情形下,密度聚类算法从样本密度的角度来考察样本之间的可连接性,并基于可连接样本不断扩展聚类簇以获得最终的聚类结果。

DBSCAN是一种著名的密度聚类算法,它基于一组“邻域”(neigh-borhood)参数 ( ϵ , M i n P t s ) (\epsilon,MinPts) (ϵ,MinPts)来刻画样本分布的紧密程度。给定数据集 D = x 1 , x 2 , . . . , x m D= {x_1,x_2,...,x_m} D=x1,x2,...,xm,定义下面这几个概念:

ϵ − 邻域,对 x j ∈ D , 其 ϵ − 邻域包含样本集 D 中与 x j 的距离不大于 ϵ 的样本,即 N ϵ ( x j ) = { x i ∈ D ∣ d i s t ( x i , x j ) ≤ ϵ } \epsilon-邻域,对x_j\in D,其\epsilon-邻域包含样本集D中与x_j的距离不大于\epsilon的样本,即N_\epsilon (x_j)=\left \{ x_i\in D|dist(x_i,x_j)\leq \epsilon \right \} ϵ邻域,对xjD,ϵ邻域包含样本集D中与xj的距离不大于ϵ的样本,即Nϵ(xj)={xiDdist(xi,xj)ϵ}
核心对象,若 x j 的 ϵ − 邻域至少包含 M i n P t s 个样本,即 ∣ N ϵ ( x j ) ∣ ≥ M i n P t s ,则 x j 是一个核心对象 核心对象,若x_j的\epsilon-邻域至少包含MinPts个样本,即|N_\epsilon (x_j)|\geq MinPts,则x_j是一个核心对象 核心对象,若xjϵ邻域至少包含MinPts个样本,即Nϵ(xj)MinPts,则xj是一个核心对象
密度直达,若 x j 位于 x i 的 ϵ − 邻域中,其 x i 是核心对象,则 x i 和 x j 密度直达 密度直达,若x_j位于x_i的\epsilon-邻域中,其x_i是核心对象,则x_i和x_j密度直达 密度直达,若xj位于xiϵ邻域中,其xi是核心对象,则xixj密度直达
密度可达,对 x i 和 x j ,若存在样本序列 p 1 , p 2 , ⋯ ⋯   , p n ,其中 p 1 = x i , p n = x j ,且 p i + 1 和 p i 密度直达,那么 x i 和 x j 密度可达 密度可达,对x_i和x_j,若存在样本序列p_1,p_2,\cdots \cdots ,p_n,其中p_1=x_i,p_n=x_j,且p_{i+1}和p_i密度直达,那么x_i和x_j密度可达 密度可达,对xixj,若存在样本序列p1,p2,⋯⋯,pn,其中p1=xi,pn=xj,且pi+1pi密度直达,那么xixj密度可达
密度相连,对 x i 和 x j ,若存在 x k 使得 x i 和 x j 均由 x k 密度可达,那么 x i 和 x j 密度相连 密度相连,对x_i和x_j,若存在x_k使得x_i和x_j均由x_k密度可达,那么x_i和x_j密度相连 密度相连,对xixj,若存在xk使得xixj均由xk密度可达,那么xixj密度相连

上述概念的直观显示:

在这里插入图片描述基于这些概念,DBSCAN将“簇”定义为:由密度可达关系导出的最大的密度相连样本集合.形式化地说,给定邻域参数 ( ϵ , M i n P t s ) (\epsilon,MinPts) (ϵ,MinPts),簇 C ⊆ D C⊆D CD是满足连接性和最大性的非空样本子集.

DBSCAN算法先任选数据集中的一个核心对象为“种子”(seed)再由此出发确定相应的聚类簇,算法描述如图9.9所示。在第1-7行中,算法先根据给定的邻域参数 ( ϵ , M i n P t s ) (\epsilon,MinPts) (ϵ,MinPts)找出所有核心对象;然后在第 10-24 行中以任一核心对象为出发点,找出由其密度可达的样本生成聚类簇,直到所有核心对象均被访问过为止。
在这里插入图片描述

9.6 层次聚类

层次聚类(hierarchical clustering)试图在不同层次对数据集进行划分,从而形成树形的聚类结构。数据集的划分可采用“自底向上”的聚合策略,也可采用“自顶向下”的分拆策略。

AGNES 是一种采用自底向上聚合策略的层次聚类算法:它先将数据集中的每个样本看作一个初始聚类簇,然后在算法运行的每一步中找出距离最近的两个聚类簇进行合并,该过程不断重复,直至达到预设的聚类簇个数。这里的关键是如何计算聚类簇之间的距离。实际上,每个簇是一个样本集合,因此,只需采用关于集合的某种距离即可。例如,给定聚类簇 C i C_i Ci C j C_j Cj,可通过下面的式子来计算距离:
最小距离 d m i n ( C i , C j ) = m i n x ∈ C i , z ∈ C j d i s t ( x , z ) d_{min}(C_i,C_j)=\underset{x\in C_i,z\in C_j}{min}dist(x,z) dmin(Ci,Cj)=xCi,zCjmindist(x,z)

最大距离 d m a x ( C i , C j ) = m a x x ∈ C i , z ∈ C j d i s t ( x , z ) d_{max}(C_i,C_j)=\underset{x\in C_i,z\in C_j}{max}dist(x,z) dmax(Ci,Cj)=xCi,zCjmaxdist(x,z)

平均距离 d a v g ( C i , C j ) = 1 ∣ C i ∣ ∣ C j ∣ ∑ x ∈ C i ∑ z ∈ C j d i s t ( x , z ) d_{avg}(C_i,C_j)=\frac{1}{|C_i||C_j|}\sum _{x\in C_i}\sum _{z\in C_j}dist(x,z) davg(Ci,Cj)=Ci∣∣Cj1xCizCjdist(x,z)

显然,最小距离由两个簇的最近样本决定,最大距离由两个簇的最远样本决定,而平均距离则由两个簇的所有样本共同决定。

其算法流程如下图所示:
在这里插入图片描述

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

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

相关文章

【Git】如何优雅地使用Git中的tag来管理项目版本

目录 tagtag 和 branch区别操作命令打tag&#xff0c;当前分支标记tag提交到远程服务器删除本地tag删除远程tag切换到特定的tag查看所有tag查看标签详细信息 好书推荐 tag Git中的tag&#xff08;标签&#xff09;用于给项目在特定时间点&#xff08;某个版本发布&#xff09;…

周鸿祎回应将成三六零第一大股东:会和公司一起走下去

在数字化浪潮席卷全球的今天&#xff0c;网络安全已成为国家安全的重要组成部分。三六零&#xff0c;作为国内网络安全领域的佼佼者&#xff0c;其每一步动态都牵动着业界的神经。近日&#xff0c;随着公司控股股东天津奇信志成的解散清算&#xff0c;周鸿祎的持股比例上升&…

【数据泄露】据称一名威胁行为者正在出售某个加密货币交易平台数据库

该威胁行为者表示&#xff1a; “你好&#xff0c; 我想出售一个加密货币交易平台的数据库 (.csv)。该平台很活跃&#xff0c;并且对实际使用它的用户来说很合法。 行数&#xff1a;150,000 价格&#xff1a;1,500 美元” 泄露数据&#xff1a;user_id、user_name、user_ro…

【Java】Java学生信息管理系统(源码)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

SpringBoot项目详细整合邮箱服务

springboot 版本&#xff1a;2.6.3 Java版本&#xff1a;1.8 一、应用场景 用户注册发送激活邮箱 注册登录时用邮箱接收验证码 用户密码重置 向用户发送相关系统消息 … 二、添加依赖 <!-- 邮箱 --> <dependency><groupId>org.springframework.b…

【单片机毕业设计选题24098】-校园智能绿植浇灌系统

系统功能: 1. 手机通过蓝牙模块显示系统信息 2. OLED模块显示系统信息 3. DHT11采集温湿度 4. 继电器模块控制水泵 5. 按键调节湿度设定阈值 6. 土壤湿度传感器模块采集土壤湿度 7. 光照传感器采集光照值 系统分为手动和自动模式&#xff0c;上电默认为自动模式&#x…

scratch魔法门 2024年6月scratch四级 中国电子学会图形化编程 少儿编程等级考试四级真题和答案解析

目录 scratch魔法门 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、pyt…

2024/8/4 维高-STD60N驱动器(伺服)---客户反馈:电机异响

步进电机 MHS1A86-60B85B &#xff0c;额定电流6A 步骤一&#xff1a;设置额定电流 std60n驱动器拔码全部为off&#xff08;后台设置&#xff09;&#xff0c;伺服后台连上后设置h00-11按电机铭牌进行 设置下额定电流 步骤二&#xff1a;最好设置峰值电流一…

Jenkins未授权访问漏洞

Jenkins未授权访问漏洞 默认情况下 Jenkins面板中用户可以选择执行脚本界面来操作一些系统层命令&#xff0c;攻击者可通过未授权访问漏洞或者暴力破解用户密码等进入后台管理服务&#xff0c;通过脚本执行界面从而获取服务器权限。 漏洞复现 步骤一:使用以下fofa语法进行产品…

GUI:Tkinter(一)

Tkinter文档 一&#xff0c;Tkinter基本流程 1. 创建应用程序主窗口对象 from tkinter import * window Tk() window.mainloop()#开启主循环 2. 在主窗口中&#xff0c;添加各种可视化组件&#xff0c;比如&#xff1a;按钮&#xff08;Button&#xff09;、文本框&#x…

Java中Lambda表达式的使用

Lambda的背景 Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda 表达式&#xff08;Lambda expressio…

用户看广告获取密码访问网页内容流量主模式源码

简介&#xff1a; 全开源付费进群流量主模式&#xff0c;用户看广告获取密码访问网页内容&#xff0c;网站生成内容&#xff0c;用户需要浏览内容跳转至小程序&#xff0c;观看广告后获取密码&#xff0c;输入密码查看网页内容。 与之前得9.9付费进群区别就是内容体现在了网页…

【信创】国产操作系统上使用的万能打印驱动 _ 统信 _ 麒麟 _ 中科方德

往期好文&#xff1a;统信UOS服务器离线安装postgresql数据库 Hello&#xff0c;大家好&#xff01;今天给大家带来一款在信创终端操作系统上使用的万能打印驱动——瑞印万能打印驱动。这款驱动程序是国产操作系统下的通用打印驱动程序&#xff0c;具有很高的兼容性和广泛的功能…

图论:1857. 有向图中最大颜色值(拓扑排序+动态规划)

文章目录 1.问题分析2.代码解析2.1 代码步骤1. 初始化数据结构2. 构建图和入度数组3. 初始化队列4. 拓扑排序和动态规划5. 检查是否存在环并返回结果 3. 问题扩展1. 最长路径问题&#xff08;DAG&#xff09;2. 最短路径问题&#xff08;DAG&#xff09;3. 最大路径和问题4. 路…

科普文:微服务之Spring Cloud 客户端负载均衡组件LoadBalancer替代Ribbon

概叙 负载均衡 负载均衡的两个基本点&#xff1a; 选择哪个服务器来处理客户端请求。将客户端请求转发出去。 一个核心原理&#xff1a;通过硬件或软件的方式维护一个服务列表清单。当用户发送请求时&#xff0c;会将请求发送给负载均衡器&#xff0c;然后根据负载均衡算法从…

中仕公考:2024年重庆市属事业单位招聘公告

本次公开招聘市属事业单位工作人员218名&#xff0c;报考者可登录重庆市人力资源和社会保障局官网“事业单位公开招聘”栏查阅。 (一)可报考的条件 1.具有中华人民共和国国籍; 2.遵守中华人民共和国宪法和法律&#xff0c;具有良好的品行; 3.身体健康&#xff0c;符合事业单…

OGG同步目标端中文乱码处理

现象说明&#xff1a; 源端字符集&#xff1a;AMERICAN_AMERICA.ZHS16GBK 目标端字符集&#xff1a;AMERICAN_AMERICA.AL32UTF8 源端同步过来的数据显示中文乱码。 查询数据库表中含有乱码的字段&#xff1a; select * from xx.xxxx a where to_char(a.crtopetime,yyyy-mm-…

一些不被人熟知,但又很好用的HTML属性

HTML&#xff08;超文本标记语言&#xff09;具有多种属性&#xff0c;可用于增强我们的网页的结构和功能。 下面我就给大家介绍一下&#xff0c;一些很好用的HTML属性&#xff0c;但是不被人熟知的HTML属性 contenteditable&#xff1a; 这个属性使我们的元素变的可编辑。用…

谷粒商城实战笔记-126-全文检索-ElasticSearch-整合-测试保存

文章目录 一&#xff0c;谷粒商城实战笔记-126-全文检索-ElasticSearch-整合-测试保存1&#xff0c;在Elasticsearch的配置类中增加通用设置2&#xff0c;索引数据3&#xff0c;验证 一&#xff0c;谷粒商城实战笔记-126-全文检索-ElasticSearch-整合-测试保存 1&#xff0c;在…

环境搭建:全面详尽的 MongoDB Shell MongoDB Server介绍、安装、验证与配置指南(以 Windows 系统为主)

环境搭建&#xff1a;全面详尽的 MongoDB Shell & MongoDB Server介绍、安装、验证与配置指南&#xff08;以 Windows 系统为主&#xff09; MongoDB 是一个基于文档的 NoSQL 数据库&#xff0c;以其高性能、灵活性和可扩展性而受到广泛欢迎。本文将带您完成 MongoDB 的安装…