机器学习 第9章-聚类

机器学习 第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.rhkb.cn/news/391002.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机毕业设计选题推荐-学生作业管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

errno错误码列举

errno&#xff0c;int变量&#xff0c;表示系统最近一次错误码。 当系统调用和一些库函数发生错误时&#xff0c;会给errno赋值&#xff0c;以指示哪里出了问题。 目录 errno值列表 errno值获取示例 errno值列表 <errno.h>头文件定义了errno的一些值&#xff0c;部分…

【C++ STL】list

文章目录 list1. list的使用1.1 增删查改1.2 功能接口 2. list的模拟实现2.1 list的定义2.2 默认成员函数2.3 迭代器正向迭代器解引用箭头 反向迭代器迭代器接口 2.4 基本功能 3. list对比vector list 与 vector 相比&#xff0c;list 的好处就是每次插⼊或删除 ⼀个 元素 就 …

pydal,一个实用的 Python 库!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个实用的 Python 库 - pydal。 Github地址&#xff1a;https://github.com/web2py/pydal/ 在现代应用开发中&#xff0c;数据库操作是一个核心部分。为了简化与数据库的交互…

PMP–知识卡片--Scrum框架

定义 Scrum框架包含由产品负责人、开发团队、敏捷专家构成的Scrum团队&#xff0c;以及活动工件。框架中的每一个组件都服务于一个特定的目标&#xff0c;且是Scrum成功和运用的基本要素。 Scrum的规则将角色、活动和工件绑定在一起&#xff0c;管理它们之间的关系和交互。 …

【Vue3】组件通信之$parent

【Vue3】组件通信之$parent 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的…

基于Java的网络考试系统的设计与实现

点击下载源码 基于Java的网络考试系统的设计与实现 摘 要 科技在进步&#xff0c;人们生活和工作的方式正发生着改变&#xff0c;不仅体现在人们的衣食住行&#xff0c;也体现在与时俱进的考试形式上。以前的考试需要组织者投入大量的时间和精力&#xff0c;需要对考试的试题…

人工智能与大数据的融合:驱动未来的力量

人工智能与大数据的融合&#xff1a;驱动未来的力量 一、人工智能与大数据的概述二、人工智能与大数据在数据库中的融合三、实际应用案例四、未来发展方向总结 【纪录片】中国数据库前世今生 在数字化潮流席卷全球的今天&#xff0c;数据库作为IT技术领域的“活化石”&#xff…

【Python实战】如何优雅地实现文字 二维码检测?

前几篇&#xff0c;和大家分享了如何通过 Python 和相关库&#xff0c;自动化处理 PDF 文档&#xff0c;提高办公效率。 【Python实战】自动化处理 PDF 文档&#xff0c;完美实现 WPS 会员功能【Python实战】如何优雅地实现 PDF 去水印&#xff1f;【Python实战】一键生成 PDF…

【Linux详解】基础IO:软硬连接 | 动静态库管理

目录 软硬链接 1. 介绍 2.理解 2.1 如何理解硬链接&#xff1f; 2.2 如何理解软连接&#xff1f; 动静态库 1.介绍 1.1 使用 1.2 什么是库&#xff1f; 2.生成 2.1 静态库 2.2 动态库&#xff1a; 软硬链接 1. 介绍 1.1 软连接 是一个独立文件&#xff0c;具有独…

【Python机器学习】支持向量机——利用完整platt SMO算法加速优化

在几百个数据点组成的小规模数据集上&#xff0c;简化版SMO算法的运行是没有什么问题&#xff0c;但是在更大的数据集上的运行速度就会变慢。完整版的platt SMO算法应用了一些能够提速的启动方法。 platt SMO算法时通过一个外循环来选择第一个alpha值的&#xff0c;并且其选择…

内网穿透--ICMP隧道转发实验

实验背景 通过公司带有防火墙功能的路由器接入互联网&#xff0c;然后由于私网IP的缘故&#xff0c;公网无法直接访问内部web服务器主机。通过内网其它主机做代理&#xff0c;穿透访问内网web服务器主机边界路由器或防火墙做静态NAT映射访问内网服务器inux主机&#xff0c;且策…

MySQL的数据类型

文章目录 数据类型分类整型bit类型浮点类型字符串类型charvarchar 日期和时间类型enum和set find_ in_ set 数据类型分类 整型 在MySQL中&#xff0c;整型可以指定是有符号的和无符号的&#xff0c;默认是有符号的。 可以通过UNSIGNED来说明某个字段是无符号的。 在MySQL中如…

Tree-of-Traversals:结合知识图谱与大模型,通过树遍历和回溯寻找高置信度推理路径

Tree-of-Traversals&#xff1a;结合知识图谱与大模型&#xff0c;通过树遍历和回溯寻找高置信度推理路径 Tree-of-Traversals算法解析对比 MindMap1. 与知识图谱&#xff08;KGs&#xff09;的整合2. 推理方法3. 灵活性与可扩展性4. 在医学诊断中的应用 速度和准确1. 速度2. 推…

第十一章:Kubernetes API服务器的安全防护

本章内容包括&#xff1a; 了解认证机制ServiceAccounts是什么及使用的原因了解基于角色(RBAC)的权限控制插件使用角色和角色绑定使用集群角色和集群角色绑定了解默认角色及其绑定 1 了解认证机制 在前面的内容中&#xff0c;我们说到API服务器可以配置一个到多个认证的插件(授…

数据结构链表2(常考习题1)(C语言)

移除链表元素&#xff1a; . - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 解题思路&#xff1a; 情况1&#xff1a; 情…

python dash框架

Dash 是一个用于创建数据分析型 web 应用的 Python 框架。它由 Plotly 团队开发&#xff0c;并且可以用来构建交互式的 web 应用程序&#xff0c;这些应用能够包含图表、表格、地图等多种数据可视化组件。 Dash 的特点&#xff1a; 易于使用&#xff1a;Dash 使用 Python 语法…

深入解析 KMZ 文件的处理与可视化:从数据提取到地图展示项目实战

文章目录 1. KMZ 文件与 KML 文件简介1.1 KMZ 文件1.2 KML 文件 2. Python 环境配置与依赖安装3. 代码实现详解3.1 查找 KMZ 文件3.2 解压 KMZ 文件3.3 解析 KML 文件3.4 可视化 KMZ 数据 4. 项目实战4.1. 数据采集4.2. 项目完整代码 5. 项目运行与结果展示6. 总结与展望 在处理…

将后台传来的数据,转成easyui-tree所需格式

easyui 中文文档 EasyUI Tree组件需要一个包含特定属性&#xff08;如id, text, children等&#xff09;的JSON对象数组来初始化。 而后台返回的数据&#xff0c;它可能不是我们直接能拿来用的。 方式一&#xff1a;使用loadFilter函数处理来自Web Services的JSON数据。 $(#…

功能实现——通过阿里云 OSS 实现文件管理

目录 1.需求分析2.阿里云 OSS 开通与配置2.1.登录阿里云官网2.2.搜索 OSS 服务并开通2.3.OSS 配置 3.在项目使用阿里云 OSS3.1.项目环境搭建3.2.代码实现3.2.1.将本地文件上传到阿里云 OSS3.2.2.将前端传入的文件上传到阿里云 OSS3.2.3.下载文件到本地2.3.4.流式下载3.2.4.OSSC…