聚类分析方法(一)

news2024/10/6 2:38:22

目录

    • 一、聚类分析原理
      • (一)聚类分析概述
      • (二)聚类的数学定义
      • (三)簇的常见类型
      • (四)聚类框架及性能要求
      • (五)簇的距离
    • 二、划分聚类算法
      • (一)划分聚类框架
      • (二)划分聚类的质量
      • (三)k-means算法
      • (四)空簇与离群点
      • (五)k-中心点算法


  聚类分析 (clustering analysis) 是数据挖掘研究最为活跃、内容最为丰富的领域之一,其目的是通过对数据的深度分析,将一个数据集拆分成若干个子集 (每个子集称为一个簇,cluster),使得同一个簇中数据对象 (也称数据点) 之间的距离很近或相似度较高,而不同簇中的对象之间距离很远或相似度较低。

一、聚类分析原理

(一)聚类分析概述

  聚类分析 (clustering analysis) 就是根据某种相似性度量标准,将一个没有类别标号的数据集 S S S (表10-1) 直接拆分成若干个子集 C i ( i = 1 , 2 , ⋯   , k ; k ≤ n ) C_i (i=1,2, \cdots,k; k≤n) Ci(i=1,2,,k;kn),并使每个子集内部数据对象之间相似度很高,而不同子集的对象之间不相似或相似度很低。每个子集 C i C_i Ci 称为一个簇,所有簇构成的集合 C = { C 1 , C 2 , ⋯   , C k } C=\{C_1 ,C_2, \cdots,C_k\} C={C1,C2,,Ck} 称为数据集 S S S 的一个聚类。

在这里插入图片描述
  聚类分析与分类规则挖掘不同,前者是一种探索性的分析过程。聚类分析的数据集 S S S 中没有已知的先验知识 (即对象的类别标号) 来指导,它要求直接从 S S S 本身出发,依据某种相似度标准为 S S S 的每个对象给出类别标号。因此,聚类分析也称为无监督的分类 (unsupervised classification)。对于同一个数据集,就算使用同一个聚类算法,如果选择了不同的“相似度”标准,也常常会得到不同的聚类结果。
  聚类分析作为数据挖掘的一个热门研究领域,在帮助人们获取潜在的、有价值的信息并过滤掉无用的信息方面起到了至关重要的作用。
  目前,数据聚类技术在许多领域都已得到实际应用。在生物学的研究中,科学家们可以通过聚类算法来分析大量的遗传信息,从而发现哪些基因组具有类似的功能,以此获得对种群的认识;在信息检索方面,聚类算法可以将搜索引擎返回的结果划分为若干个类,从每个类中获取查询的某个特定方面,从而产生一个类似树状的层次结构来帮助用户进一步探索查询结果;在医学领域的研究中,一种疾病通常会有多个变种,而聚类分析可以根据患者的症状描述来确定患者的疾病类型,以此提高诊断效率和治疗效果;在气象领域,聚类已经被用来发现对气候具有明显影响的海洋大气压力模式;在电子商务中,聚类分析可以对用户群体进行细分,并针对不同类型的用户进行不同的营销策略,以提升销售额。

(二)聚类的数学定义

定义10-1 设有数据集 S = { X 1 , X 2 , ⋯   , X n } S=\{X_1 ,X_2, \cdots,X_n\} S={X1,X2,,Xn},其中 X i X_i Xi d d d 维向量 (表10-1), s ( X , Y ) s(X,Y) s(X,Y) 为定义在 S S S 上的相似度函数。若利用函数 s ( X , Y ) s(X,Y) s(X,Y) 可将 S S S 拆分成 k k k 个子集 C i C_i Ci,并记 C = { C 1 , C 2 , ⋯   , C k } ( k ≤ n ) C=\{C_1 ,C_2, \cdots,C_k\}(k≤n) C={C1,C2,,Ck}(kn),使 C C C 满足以下条件:
(1) C i ≠ ∅ ( i = 1 , 2 , ⋯   , k ) C_i ≠ \varnothing (i=1 ,2, \cdots,k) Ci=(i=1,2,,k)                                           (10-1)
(2) C 1 ∪ C 2 ∪ ⋯ ∪ C k = S C_1∪ C_2∪\cdots∪C_k =S C1C2Ck=S                                          (10-2)
(3) C i ∩ C j = ∅ ( i = 1 , 2 , ⋯   , k ; i ≠ j ) C_i∩C_j= \varnothing (i=1 ,2, \cdots,k; i≠j) CiCj=(i=1,2,,k;i=j)                                     (10-3)
(4) ∀ X , Y ∈ C i , s ( X , Y ) = 1 \forall X,Y\in C_i, s(X,Y)=1 X,YCi,s(X,Y)=1 或接近 1 1 1 ∀ X ∈ C i \forall X\in C_i XCi Y ∈ C j ( i ≠ j ) , s ( X , Y ) = 0 Y\in C_j(i≠j) ,s(X,Y)=0 YCj(i=j),s(X,Y)=0 或接近 0 0 0;则称 C i C_i Ci S S S s ( X , Y ) s(X,Y) s(X,Y) 生成的一个簇 (cluster),简称簇 C i ( i = 1 , 2 , … ⋯   , k ) C_i (i=1 ,2, …\cdots,k) Ci(i=1,2,…⋯,k);同时,称 C C C S S S s ( X , Y ) s(X,Y) s(X,Y) 生成的一个划分聚类 (partitional clustering),简称 C C C S S S 的划分聚类,或称为互斥 (exclusive) 的聚类。

(2)+ 如果将公式 (10-2) 改为
C 1 ∪ C 2 ∪ ⋯ ∪ C k ⊂ S (10-4) C_1∪C_2∪\cdots∪C_k \subset S\tag{10-4} C1C2CkS(10-4) 而其它假设条件都不变,则称 C = { C 1 , C 2 , ⋯   , C k } C=\{C_1 ,C_2, \cdots,C_k\} C={C1,C2,,Ck} S S S 的部分聚类 (partial clustering)。这时, S S S 中的某些对象没有分配到任何簇中。

(2)++ 如果将定义10-1中的公式 (10-2) 改为
C 1 ∪ C 2 ∪ ⋯ ∪ C k ⊆ S (10-5) C_1∪C_2∪\cdots∪C_k\subseteq S \tag{10-5} C1C2CkS(10-5) 且至少存在两个簇 C i ∩ C j ≠ ∅ C_i∩C_j≠\varnothing CiCj=,而其它假设不变,则称 C = { C 1 , C 2 , ⋯   , C k } C=\{C_1 ,C_2, \cdots,C_k\} C={C1,C2,,Ck} S S S 的非互斥聚类 (non-exclusive clustering),也称 C C C 为重叠聚类 (overlapping clustering)。

  相似度函数 s ( X , Y ) s(X,Y) s(X,Y),通常可使用之前介绍的某种相似度,但一般都需要根据实际数据集 S S S 的属性类型来选择或确定;可选择距离或相异度 d ( X , Y ) d(X,Y) d(X,Y) 来作为相似性的度量标准,这时只要将定义10-1中的第(4)条改为“对 X , Y ∈ C i , d ( X , Y ) = 0 X,Y\in C_i, d(X,Y)=0 X,YCi,d(X,Y)=0 或接近 0 0 0,对 X ∈ C i X\in C_i XCi Y ∈ C j ( i ≠ j ) , d ( X , Y ) Y\in C_j(i≠j) ,d(X,Y) YCj(i=j),d(X,Y) 很大”即可。还可以定义其它广义的“相似度”,比如簇内点的密度,或要求每个簇构成某种形状等。聚类分析不仅与数据集 S S S 有关,而且与所选择的相似性度量有关。
  在实际应用中,对于一个给定的数据集 S S S,如何选择恰当的相似性度量却没有普遍适用的标准,仍是一个困难而富有挑战性的问题。

例10-1 假设数据集 S S S 有20个点,其在平面上位置如图10-1(1)所示。我们可将数据集 S S S 分别交给甲、乙、丙3个同学,希望他们自己选择恰当的相似度标准对 S S S 进行聚类。

在这里插入图片描述
  虽然三个同学的聚类结果不一样,但老师在评分时给三个同学都是满分,因为都是在各自选定的相似度标准下正确的聚类结果。

(三)簇的常见类型

  聚类分析旨在发现“有用”或“有意义”的簇,这里的有用性或意义完全由数据挖掘目的来决定。虽然实际存在有很多种类的簇,但数据挖掘的实践表明,无论多么奇怪的簇在实际应用中都可能是有用的。
  簇的类型一般可从簇的形状和簇间关系来划分。

1、簇的形状

  从簇的形状主要分为类球状 (凸形) 的簇,非球状的簇两种类型。
  (1)类球状的簇 (图10-2),一般是聚类算法使用距离函数所产生的簇,而非球状的簇,通常由基于密度或基于原型的聚类算法获得的簇。

在这里插入图片描述
  (2)非球状的簇,通常由基于密度或基于原型的聚类算法获得的簇。

在这里插入图片描述
2、簇间关系

1)明显分离的簇

  簇中每个数据对象到同簇中其它对象的距离,比到不同簇中任意对象的距离更近;下图中不同簇中任意两点之间的距离都大于簇内任意两点之间的距离。当然,明显分离的簇不必是球形的,也可以是其它任意的形状。

在这里插入图片描述
2)基于原型的簇

  所谓原型其实就是簇中最具代表性的点。对连续属性的数据,簇的原型通常就是质心,即簇中所有点的平均值。当数据包括分类属性时,簇的原型通常是中心点,即簇中最有代表性的点。对于许多数据类型,原型可以视为最靠近中心的点,因此,通常把基于原型的簇看作基于中心的簇 (center-based cluster),下图就是一个基于中心的簇的例子。

在这里插入图片描述
3)基于连片的簇 (contiguity-based cluster)

  簇中两个相邻对象的距离都在指定的阈值之内即将其归为同一个簇。当簇的形状不规则或缠绕,且数据集没有噪声时,用这种方式来定义簇会收到很好的聚类效果。如果存在噪声,其聚类效果就不一定理想。图中的哑铃状簇,就是由线状 (噪声) 连接两个球状簇形成的一个簇。

在这里插入图片描述
4)基于密度的簇 (density-based cluster)

  基于密度的簇由对象间相对稠密的区域组成,且其周围是低密度的区域。一般通过指定簇中任何一个对象周围区域内最少点数 (即密度) 来实现。下图有3个基于密度的簇,它们是在哑铃状图中添加了一些低密度的对象创建的。由于增加了低密度噪声点的缘故,原先的S状、线状簇不能形成较稠密的簇而被当作噪声排斥在外。当簇的形状不规则或互相盘绕,并且有噪声和离群点时,使用基于密度的簇定义通常得到较理想的聚类效果。

在这里插入图片描述
5)基于概念的簇

  即具有某种“共同性质”的数据对象集合。比如,离相同的质心或中心点最近,或组成三角形、梯形,或圆环状 (重叠聚类) 等。

在这里插入图片描述

(四)聚类框架及性能要求

算法10-1 聚类算法框架
输入:数据集 S S S,相似度 s s s,以及簇的个数 k k k
输出:聚类 C = { C 1 , C 2 , ⋯   , C k } C=\{C_1,C_2,\cdots,C_k\} C={C1,C2,,Ck}
(1)任意产生 S S S的一个聚类 C C C
(2)以 s s s为相似性标准对 S S S循环更新聚类 C C C的簇 C 1 , C 2 , ⋯   , C k C_1,C_2,\cdots,C_k C1,C2,,Ck,直到满意为止。

其中,“满意”的标准一般是簇内对象之间的距离很近,簇与簇之间的距离很远等相似度或相异度。

  1. 对数据集的可伸缩能力:不仅在小数据集上聚类效果好,而且在大数据集上的聚类也要效率高、效果好。
  2. 处理混合属性的能力:能够处理同时含有二元、分类、序数和数值等属性的数据集。
  3. 发现任意形状簇的能力:不仅能够发现凸型球状的、大小和密度相近的簇,也能够发现一些特殊形状的簇。
  4. 聚类参数自适应能力:对用户输入初始参数,如簇的个数 k k k,密度半径 ε \varepsilon ε 和最少点数 MinPts 等具有自适应能力,可以减少甚至克服初始参数对聚类的结果影响,以保障聚类的质量。
  5. 噪声数据的处理能力:以减轻或者消除“噪声”数据影响,提高聚类结果的质量。
  6. 数据输入顺序的适应能力:即适应数据集任意输入顺序的能力,有助于提高聚类结果的稳定性。
  7. 处理高维数据的能力:不仅能高效地处理2-3维的数据集,对高维数据 (几十个甚至更多的属性) 也能高效运行。
  8. 带约束条件的聚类能力:即聚类算法不仅能满足客户特定的约束条件,又能得到具有良好聚类特性的簇。

  值得注意的是,在实际的算法设计中,要求一个聚类算法同时具备以上所有能力是不现实的,如果能够同时具备其中的3-4个能力已算是相对优质的算法了。

(五)簇的距离

  数据集 S S S 的一个聚类 C = { C 1 , C 2 , ⋯   , C k } C=\{C_1,C_2,\cdots,C_k\} C={C1,C2,,Ck} 的质量,包括每个簇 C i C_i Ci 的质量和 C C C 的总体质量。前者用簇内距离来刻画,后者用簇间距离来衡量。

1、簇内距离

1)簇的直径

  簇 C i C_i Ci 中任意两个对象之间欧氏距离的最大者,也称为簇外径,并记作
Φ ( C i ) = m a x { d ( X , Y ) ∣ X , Y ∈ C i } (10-6) \Phi(C_i)=max\{d(X,Y) | X,Y\in C_i\}\tag{10-6} Φ(Ci)=max{d(X,Y)X,YCi}(10-6) 2)簇的内径

  簇 C i C_i Ci 中任意两个对象之间欧氏距离的最小者,并记作
ϕ ( C i ) = m i n { d ( X , Y ) ∣ X , Y ∈ C i } (10-7) \phi(C_i)=min\{d(X,Y) | X,Y\in C_i\}\tag{10-7} ϕ(Ci)=min{d(X,Y)X,YCi}(10-7)3)簇的平均距离

  簇 C i C_i Ci 中任意两个对象之间欧氏距离之和与 C ∣ C i ∣ 2 C i C^2_{|C_i|}C_i CCi2Ci 中元素个数取2的组合数比值,并记作
d a ( C i ) = 1 C ∣ C i ∣ 2 ∑ X , Y ∈ C i d ( X , Y ) (10-8) d_a(C_i)=\frac{1}{C^2_{|C_i|}}\sum_{X,Y\in C_i}d(X,Y)\tag{10-8} da(Ci)=CCi21X,YCid(X,Y)(10-8) 4)簇的中心距离和

  设 X ‾ i \overline{X}_i Xi 为簇 C i C_i Ci 的中心点,簇中每个点到中心点的距离之和,并记作
d σ = ∑ X ∈ C i d ( X , X ‾ i ) (10-9) d_{\sigma}=\sum_{X\in C_i}d(X,\overline{X}_i)\tag{10-9} dσ=XCid(X,Xi)(10-9)

2、簇间距离

  设有两个簇 C i C_i Ci C j C_j Cj,且对于任意 X ∈ C i X\in C_i XCi Y ∈ C j Y\in C_j YCj,其距离为 d ( X , Y ) d(X,Y) d(X,Y),则两个簇之间的距离 d ( C i , C j ) d(C_i, C_j) d(Ci,Cj),一般可采用以下几种方式来定义。

1)簇间最小距离

  以两个簇中任意两个元素距离的最小者 (smallest),即
d s ( C i , C j ) = m i n { d ( X , Y ) ∣ X ∈ C i , Y ∈ C j } (10-10) d_s(C_i,C_j)=min\{d(X,Y) | X\in C_i,Y\in C_j\}\tag{10-10} ds(Ci,Cj)=min{d(X,Y)XCi,YCj}(10-10) 2)簇间最大距离

  以两个簇中任意两个元素距离的最大者 (largest) ,即
d l ( C i , C j ) = m a x { d ( X , Y ) ∣ X ∈ C i , Y ∈ C j } (10-11) d_l(C_i,C_j)=max\{d(X,Y) | X\in C_i,Y\in C_j\}\tag{10-11} dl(Ci,Cj)=max{d(X,Y)XCi,YCj}(10-11) 3)簇间中心距离

  以两个簇 C i C_i Ci C j C_j Cj 的中心点 X ‾ i \overline{X}_i Xi X ‾ j \overline{X}_j Xj 之间的距离作为两个簇之间的距离度量,即
d c ( C i , C j ) = d ( X ‾ i , X ‾ j ) (10-12) d_c(C_i,C_j)=d(\overline{X}_i,\overline{X}_j)\tag{10-12} dc(Ci,Cj)=d(Xi,Xj)(10-12) 其中 C i C_i Ci 的中心定义为
X ‾ i = 1 ∣ C i ∣ ∑ X ∈ C i X (10-13) \overline{X}_i=\frac{1}{|C_i|}\sum_{X\in C_i}X\tag{10-13} Xi=Ci1XCiX(10-13) 簇间中心距离也称为均值距离。值得注意的是,簇中心常常不是该簇中的一个对象 (虚拟对象)。

4)簇间平均距离

  以两个簇中任意两个元素距离的平均值作为两个簇之间的一种距离度量,即
d a ( C i , C j ) = 1 ∣ C i ∣ ∣ C j ∣ ∑ X ∈ C i ∑ X ∈ C j d ( X , Y ) (10-14) d_a(C_i,C_j)=\frac{1}{|C_i||C_j|}\sum_{X\in C_i}\sum_{X\in C_j}d(X,Y)\tag{10-14} da(Ci,Cj)=Ci∣∣Cj1XCiXCjd(X,Y)(10-14) 实际应用中可以用 d ( X , Y ) 2 d(X,Y)^2 d(X,Y)2 替换 d ( X , Y ) d(X,Y) d(X,Y)

5)离差距离

  令簇的中心距离平方和记作
r 2 ( C i ) = ∑ X ∈ C i d ( X , X ‾ i ) 2 (10-15) r^2(C_i)=\sum_{X\in C_i}d(X,\overline{X}_i)^2\tag{10-15} r2(Ci)=XCid(X,Xi)2(10-15) 对于任意两个簇 C i C_i Ci C j C_j Cj,如果令 C i + j = C i ∪ C j C_{i+j}=C_i\cup C_j Ci+j=CiCj,则簇 C i C_i Ci 与簇 C j C_j Cj 之间的平方和离差定义为
d 2 ( C i , C j ) = r 2 ( C i + j ) − r 2 ( C i ) − r 2 ( C j ) (10-16) d^2(C_i,C_j)=r^2(C_{i+j})-r^2(C_i)-r^2(C_j)\tag{10-16} d2(Ci,Cj)=r2(Ci+j)r2(Ci)r2(Cj)(10-16) 并简称 d ( C i , C j ) d(C_i,C_j) d(Ci,Cj) 为簇 C i C_i Ci C j C_j Cj 的离差距离。

二、划分聚类算法

(一)划分聚类框架

  由定义10-1可知,数据集 S S S 的划分聚类 C = { C 1 , C 2 , ⋯   , C k } C=\{C_1,C_2,\cdots,C_k\} C={C1,C2,,Ck} 有两个特点:
(1)每个簇至少包括一个数据对象;
(2)每个数据对象属于且仅仅属于一个簇;
将聚类算法框架10-1具体化,可得划分聚类算法框架,如下。

算法10-2:划分聚类算法框架
输入:数据对象集 S S S和正整数 k k k
输出:“好”的划分聚类 C C C
(1)生成初始划分聚类 C ( 0 ) = { C 1 , C 2 , ⋯   , C k } C^{(0)}=\{C_1,C_2,\cdots,C_k\} C(0)={C1,C2,,Ck}
(2)REPEAT
(3)依照某种评价函数 f f f改变 C ( i ) C^{(i)} C(i),使新划分聚类 C ( i + 1 ) C^{(i+1)} C(i+1) C ( i ) C^{(i)} C(i)更好
(4)UNTIL C ( i + 1 ) C^{(i+1)} C(i+1)没有改变为止
(5)将 C ( i + 1 ) C^{(i+1)} C(i+1)作为聚类 C C C输出

(二)划分聚类的质量

1、聚类C的簇内差异

  设聚类 C = { C 1 , C 2 , ⋯   , C k } C=\{C_1,C_2,\cdots,C_k\} C={C1,C2,,Ck},则它的簇内差异可选择某种距离函数,通过计算簇内每个对象到其中心点距离的平方和来表示,即聚类 C C C 的簇内差异定义为
w ( C ) = ∑ i = 1 k w ( C i ) = ∑ i = 1 k ∑ X ∈ C i d ( X , X ‾ i ) 2 (10-17) w(C)=\sum^{k}_{i=1}w(C_i)=\sum_{i=1}^{k}\sum_{X\in C_i}d(X,\overline{X}_i)^2\tag{10-17} w(C)=i=1kw(Ci)=i=1kXCid(X,Xi)2(10-17) w ( C ) w(C) w(C) 从总体上评价聚类 C C C 中每个簇的紧凑性,在有些文献资料中也称为误差平方和 (sum of the squared error, SSE),并用 S S E ( C ) SSE(C) SSE(C) 表示。

2、聚类C的簇间差异

  用 C C C 中任意两个簇中心之间的距离平方和来刻画聚类 C C C 的簇间疏远性,并记作
b ( C ) = ∑ 1 ≤ j < i ≤ k d ( X ‾ j , X ‾ i ) 2 (10-18) b(C)=\sum_{1≤j<i≤k}d(\overline{X}_j,\overline{X}_i)^2\tag{10-18} b(C)=1j<ikd(Xj,Xi)2(10-18) 由于 C C C k k k 个簇,因此公式(10-18)右边是 k ( k + 1 ) / 2 k(k+1)/2 k(k+1)/2 个距离平方之和。

3、聚类C的评价函数

  为了同时评价聚类 C C C 的每个簇是紧凑的,以及不同簇之间是疏远的,即评价聚类 C C C 的总体质量,其基本思想是同时考虑聚类 C C C 的簇内差异 w ( C ) w(C) w(C) 以及簇间差异 b ( C ) b(C) b(C) 的影响。因此,可考虑使用以下几种形式的评价函数作为聚类的质量标准。

(1) f ( C ) = w ( C ) f(C)=w(C) f(C)=w(C)

(2) f ( C ) = 1 / b ( C ) f(C)=1/b(C) f(C)=1/b(C)

(3) f ( C ) = w ( C ) / b ( C ) f(C)=w(C)/b(C) f(C)=w(C)/b(C)

(4) f ( C ) = α w ( C ) + β ( 1 / b ( C ) ) f(C)= \alpha w(C)+\beta(1/b(C)) f(C)=αw(C)+β(1/b(C)),其中 α , β \alpha,\beta α,β 为指定的权值,且 α + β = 1 \alpha+\beta=1 α+β=1

(5) F ( C ) = ( w ( C ) , 1 / b ( C ) ) F(C)=(w(C),1/b(C)) F(C)=(w(C),1/b(C)),这里的 F F F 为二元目标函数,或多目标函数。

因此,算法10-2就是寻找使 f ( C ) f(C) f(C) 达到最小,或使 F ( C ) F(C) F(C) 达到最小的聚类 C C C,即是我们需要的好聚类。

(三)k-means算法

1、算法描述

  k-means算法也称k-平均算法,它采用距离作为相异度的评价指标,以簇内差异函数 w ( C ) w(C) w(C) 作为聚类质量的优化目标函数,即将所有数据对象到它的簇中心点的距离平方和作为目标函数,算法寻找最优聚类的策略是使目标函数达到最小值 (簇中心不变化等价于 w ( C ) w(C) w(C)达最小)。

算法10-3 基本k-平均算法
输入:数据对象集 S = { X 1 , X 2 , ⋯   , X n } S=\{X_1,X_2,\cdots,X_n\} S={X1,X2,,Xn}和正整数 k k k
输出:划分聚类 C = { C 1 , C 2 , ⋯   , G k } C=\{C_1,C_2,\cdots,G_k\} C={C1,C2,,Gk}
(1)初始步:从 S S S中随机选择 k k k个对象作为 k k k个簇的中心,并将它们分别分配给 C 1 , C 2 , ⋯   , C k C_1,C_2,\cdots,C_k C1,C2,,Ck
(2)REPEAT
(3)将 S S S的每个对象 X i X_i Xi归入距中心最近的那个簇 C j C_j Cj
(4)重新计算每个簇 C j C_j Cj的中心,即每个簇中对象的平均值
(5)Until所有簇中心不再变化

2、计算实例

例10-2 设数据集 S = { ( 1 , 1 ) , ( 2 , 1 ) , ( 1 , 2 ) , ( 2 , 2 ) , ( 4 , 3 ) , ( 5 , 3 ) , ( 4 , 4 ) , ( 5 , 4 ) } S=\{(1,1), (2,1), (1,2), (2,2), (4,3), (5,3), (4,4), (5,4)\} S={(1,1),(2,1),(1,2),(2,2),(4,3),(5,3),(4,4),(5,4)},令 k = 2 k=2 k=2, 试用k-平均算法将 X X X 划分为 k k k 个簇。

在这里插入图片描述
:数据集 S S S 可表示为一张二维表;而每个对象在平面上的相对位置可用下图所示:

在这里插入图片描述
因为 k = 2 k=2 k=2,故 S S S 的聚类 C = { C 1 , C 2 } C=\{C_1,C_2\} C={C1,C2},由k-平均算法得循环计算如下:

(1)初始步:任选 X 1 = ( 1 , 1 ) , X 3 = ( 1 , 2 ) X_1=(1,1), X_3=(1,2) X1=(1,1),X3=(1,2) 分别作为簇的中心,即 C 1 = { X 1 } C_1=\{X_1\} C1={X1} C 2 = { X 3 } C_2=\{X_3\} C2={X3}

(2)第一轮循环。
注意到 X 1 , X 3 X_1,X_3 X1,X3 已分配到 C 1 C_1 C1 C 2 C_2 C2,因此
① 计算 X 2 X_2 X2 的归属:因为 d ( X 2 , X 1 ) 2 = 1 , d ( X 2 , X 3 ) 2 = 2 d(X_2,X_1)^2= 1, d(X_2,X_3)^2=2 d(X2,X1)2=1,d(X2,X3)2=2 1 < 2 1< 2 1<2;所以 X 2 X_2 X2 X 1 X_1 X1 代表的簇,即 C 1 = { X 1 , X 2 } , C 2 = { X 3 } C_1=\{X_1,X_2\}, C_2=\{X_3\} C1={X1,X2},C2={X3}
② 计算 X 4 X_4 X4 的归属:因为 d ( X 4 , X 1 ) 2 = 2 , d ( X 4 , X 3 ) 2 = 1 d(X_4,X_1)^2= 2, d(X_4,X_3)^2=1 d(X4,X1)2=2,d(X4,X3)2=1 2 > 1 2>1 2>1;所以 X 4 X_4 X4 X 3 X_3 X3 代表的簇,即 C 1 = { X 1 , X 2 } , C 2 = { X 3 , X 4 } C_1=\{X_1,X_2\}, C_2=\{X_3,X_4\} C1={X1,X2},C2={X3,X4}
③ 计算 X 5 X_5 X5 的归属:因为 d ( X 5 , X 1 ) 2 = 13 , d ( X 5 , X 3 ) 2 = 10 d(X_5,X_1)^2=13, d(X_5,X_3)^2=10 d(X5,X1)2=13,d(X5,X3)2=10 13 > 10 13>10 13>10;所以 X 5 X_5 X5 X 3 X_3 X3 代表的簇, 即 C 1 = { X 1 , X 2 } , C 2 = { X 3 , X 4 , X 5 } C_1=\{X_1,X_2\}, C_2=\{X_3,X_4,X_5\} C1={X1,X2},C2={X3,X4,X5}
④ 同理 X 6 , X 7 , X 8 X_6, X_7, X_8 X6,X7,X8 也归入 X 3 X_3 X3 代表的簇,故得初始簇为
C 1 = { X 1 , X 2 } , C 2 = { X 3 , X 4 , X 5 , X 6 , X 7 , X 8 } C_1=\{X_1,X_2\},C_2=\{X_3,X_4,X_5,X_6,X_7,X_8\} C1={X1,X2}C2={X3,X4,X5,X6,X7,X8} ⑤ 重新计算得 C 1 C_1 C1 C 2 C_2 C2 的中心点分别是 X ‾ 1 = ( 1.5 , 1 ) , X ‾ 2 = ( 3.5 , 3 ) \overline{X}_1=(1.5,1),\overline{X}_2=(3.5,3) X1=(1.5,1)X2=(3.5,3)

(3)第二轮循环。
分别将 X 1 , X 2 , ⋯   , X 8 X_1, X_2,\cdots,X_8 X1,X2,,X8 别分配到最近的中心点 X ‾ 1 \overline{X}_1 X1 X ‾ 2 \overline{X}_2 X2
类似第一轮计算可得 S S S 的两个簇 C 1 = { X 1 , X 2 , X 3 , X 4 } , C 2 = { X 5 , X 6 , X 7 , X 8 } C_1=\{X_1,X_2,X_3,X_4\},C_2=\{X_5,X_6,X_7,X_8\} C1={X1,X2,X3,X4}C2={X5,X6,X7,X8} 计算得 C 1 C_1 C1 C 2 C_2 C2 的中心点分别是 X ‾ 1 = ( 1.5 , 1.5 ) , X ‾ 2 = ( 4.5 , 3.5 ) \overline{X}_1=(1.5,1.5),\overline{X}_2=(4.5,3.5) X1=(1.5,1.5)X2=(4.5,3.5)

(4)第三轮循环。
分别将 X 1 , X 2 , ⋯   , X 8 X_1, X_2,\cdots,X_8 X1,X2,,X8 分配给最近的中心点 X ‾ 1 \overline{X}_1 X1 X ‾ 2 \overline{X}_2 X2
类似第二轮循环的计算,最终可得 S S S 的两个簇
C 1 = { X 1 , X 2 , X 3 , X 4 } , C 2 = { X 5 , X 6 , X 7 , X 8 } C_1=\{X_1,X_2,X_3,X_4\},C_2=\{X_5,X_6,X_7,X_8\} C1={X1,X2,X3,X4}C2={X5,X6,X7,X8} 重新计算得 C 1 C_1 C1 C 2 C_2 C2 的中心点分别是 X ‾ 1 = ( 1.5 , 1.5 ) , X ‾ 2 = ( 4.5 , 3.5 ) \overline{X}_1=(1.5,1.5),\overline{X}_2=(4.5,3.5) X1=(1.5,1.5)X2=(4.5,3.5)

由于簇中心已没有变化,因此算法停止,并输出 S S S 的聚类
C = { C 1 , C 2 } = { { X 1 , X 2 , X 3 , X 4 } , X 5 , X 6 , X 7 , X 8 } } C=\{C_1,C_2\}=\{\{X_1,X_2,X_3,X_4\}, X_5,X_6,X_7,X_8\}\} C={C1,C2}={{X1,X2,X3,X4},X5,X6,X7,X8}} 思考:若在此例中指定 k = 3 k=3 k=3,而初始点选择为 X 1 , X 2 , X 3 X_1, X_2, X_3 X1,X2,X3 X 1 , X 5 , X 6 X_1, X_5, X_6 X1,X5,X6,其结果会有啥差异。

3、算法分析说明

1)算法的优点

① k-平均算法简单、经典,常作为其它聚类算法的参照或被改进。
② k-平均算法以 k k k个簇的误差平方和最小为目标,当聚类的每个簇是密集的,且簇与簇之间区别明显时,其聚类效果较好。
③ k-平均算法处理大数据集高效,且具较好的可伸缩性,其计算复杂性为 O ( n × k × t ) O(n\times k\times t) O(n×k×t) n n n是数据对象个数, k k k为簇个数, t t t是迭代次数。

2)算法的缺点

① k-平均算法对初始中心点的选择比较敏感。对同一个数据集,如果初始中心选择不同,其聚类结果也可能不一样。
② k-平均算法对参数 k k k是比较敏感的,即使是同一个数据集,如果 k k k选择不同,其聚类结果可能完全不一样。
③ k-平均算法以簇内对象的平均值作为簇中心来计算簇内误差,在连续属性的数据集上很容易实现,但在具有离散属性的数据集上却不能适用。

(四)空簇与离群点

1、空簇问题

  基本k-平均算法在实际计算中可能出现的空簇现象,导致算法下一轮循环无法进行。

在这里插入图片描述
例10-3 假设 S S S 由表10-3给出,即 S S S 为二维平面上7个点的数据集。令 k = 3 k=3 k=3,请用k-平均算法将 S S S 聚类成3个簇。

:数据集 S S S 在平面上的相对位置如下图所示。

在这里插入图片描述
(1)初始步:选择 X 1 , X 6 , X 7 X_1,X_6,X_7 X1,X6,X7 作为初始中心,并将它们分别指派给三个簇,即得 C 1 = { X 1 } , C 2 = { X 6 } , C 3 = { X 7 } C_1=\{X_1\},C_2=\{X_6\}, C_3=\{X_7\} C1={X1},C2={X6},C3={X7}

(2)第一次迭代
计算 X 2 , X 3 , X 4 , X 5 X_2,X_3,X_4,X_5 X2,X3,X4,X5 与中心点 X ‾ 1 = ( 0 , 0 ) , X ‾ 2 = ( 7 , 3 ) , X ‾ 3 = ( 8 , 2 ) \overline{X}_1=(0,0),\overline{X}_2=(7,3),\overline{X}_3=(8,2) X1=(0,0),X2=(7,3),X3=(8,2) 的距离平方
在这里插入图片描述
将它们指派给距离平方最近的中心点,可得3个簇
C 1 = { X 1 , X 2 , X 3 , X 4 } , C 2 = { X 5 , X 6 } , C 3 = { X 7 } C_1=\{ X_1, X_2, X_3, X_4\},C_2=\{X_5,X_6\},C_3=\{X_7\} C1={X1,X2,X3,X4}C2={X5,X6}C3={X7} 计算得簇 C 1 , C 2 , C 3 C_1,C_2, C_3 C1,C2,C3 新的中心点为 X ‾ 1 = ( 1.5 , 2.25 ) , X ‾ 2 = ( 5 , 3 ) , X ‾ 3 = ( 8 , 2 ) \overline{X}_1=(1.5,2.25),\overline{X}_2=(5,3),\overline{X}_3=(8,2) X1=(1.5,2.25)X2=(5,3)X3=(8,2)

(3)第二次迭代
计算 X 1 , X 2 , X 3 , X 4 , X 5 , X 6 , X 7 X_1,X_2,X_3,X_4,X_5,X_6,X_7 X1,X2,X3,X4,X5,X6,X7 与3个新中心点的距离
在这里插入图片描述
X 1 , X 2 , X 3 , X 4 , X 5 , X 6 , X 7 X_1,X_2,X_3,X_4,X_5,X_6,X_7 X1,X2,X3,X4,X5,X6,X7 指派给距离平方和最小的中心点,可得
C 1 = { X 1 , X 2 , X 3 , X 4 , X 5 } , C 2 = ∅ , C 3 = { X 6 , X 7 } C_1=\{X_1, X_2, X_3, X_4, X_5\},C_2=\varnothing,C_3=\{X_6 ,X_7\} C1={X1,X2,X3,X4,X5}C2=C3={X6,X7} 这时 C 2 C_2 C2 就是一个空簇,因此没有簇的中心点,导致下一步计算无法进行。有以下两种策略来选择一个替补的中心。
(1)选择一个距离当前任何质心最远的点,并可消除当前对总平方误差影响最大的点。
(2)从具有最大 w ( C i ) w(C_i) w(Ci) 的簇中选择一个替补质心,并对该簇进行分裂簇,以此降低聚类的 w ( C ) w(C) w(C)

2、离群点问题

  k-平均算法使用误差平方和 w ( C ) w(C) w(C) 作为优化目标时,离群点可能过度影响所发现的簇质量,即当存在离群点时,聚类结果簇的质心可能不如没有离群点时那样具有代表性,并且 w ( C ) w(C) w(C) 也比较高。此例 X 1 X_1 X1 就是明显的离群点。因此,如果能够提前发现离群点并删除它们,在k-平均算法的聚类应用中常常是有用的。
在有些实际应用中,如股票市场交易分析,一些明显的离群点 (股票黑马) 恰恰可能是最令人感兴趣的。

(五)k-中心点算法

  为降低k-平均算法对噪声数据的敏感性,k-中心点 (k-medoids) 算法不采用簇的平均值 (通常不是簇中的对象,称为虚拟点) 作为簇中心点,而是选择簇中一个离平均值最近的具体对象作为簇中心。

1、算法原理

  k-中心点算法选择一个簇中位置距平均值点最近的对象替换k-平均算法的平均值中心点。首先为每个簇随机选择一个代表对象作中心点,其余对象 (非中心点) 分配给最近的代表对象所在的簇。然后反复地用一个用非代表对象替换一个代表对象,使其聚类质量更高 (用某种代价函数评估),直到聚类质量无法提高为止。
  设 S = { X 1 , X 2 , X 3 , ⋯   , X n } S=\{X_1,X_2,X_3,\cdots,X_n\} S={X1,X2,X3,,Xn},任选 k k k 个对象 O i ( i = 1 , 2 , ⋯   , k ) O_i(i=1,2,\cdots,k) Oi(i=1,2,,k) 作为中心点,记作中心点集 O = { O 1 , O 2 , ⋯   , O k } O=\{O_1, O_2,\cdots, O_k\} O={O1,O2,,Ok},其余 n − k n-k nk 个对象称为非中心点,记作非中心点集 Q = { Q 1 , ⋯   , Q r , ⋯   , O n − k } ( S = O ∪ Q ) Q=\{Q_1, \cdots, Q_r,\cdots, O_{n-k}\}(S=O\cup Q) Q={Q1,,Qr,,Onk}(S=OQ),并将它们分配给最近的中心点,并得聚类 C = { C 1 , C 2 , ⋯   , C k } C=\{C_1, C_2, \cdots,C_k\} C={C1,C2,,Ck},其中 C i C_i Ci 的中心点为 O i ( i = 1 , 2 , ⋯   , k ) O_i(i=1,2, \cdots,k) Oi(i=1,2,,k)
  然后计算用一个非中心点 Q r Q_r Qr 去替换每一个中心点 O i ( i = 1 , 2 , ⋯   , k ) O_i(i=1,2,\cdots,k) Oi(i=1,2,,k) 的代价 E i r E_{ir} Eir,找出代价最小且为负数对应的替代方案。若中心点 O i O_i Oi 被一个非中心点 Q r Q_r Qr 替换,就得到新的中心点集合 O = { O 1 , ⋯   , O i − 1 , Q r , O i + 1 , ⋯   , O k } O=\{O_1, \cdots,O_{i-1}, Q_r,O_{i+1}, \cdots, O_k\} O={O1,,Oi1,Qr,Oi+1,,Ok},则可能引起 S S S 中每个对象 X j X_j Xj 到新中心点的距离变化,将这种变化之和称为代价,记作
E i r = ∑ j = 1 n W j i r (10-19) E_{ir}=\sum_{j=1}^nW_{jir}\tag{10-19} Eir=j=1nWjir(10-19) 其中 W j i r W_{jir} Wjir 表示 X j X_j Xj O i O_i Oi Q r Q_r Qr 替换后产生的代价,用替换前后 X j X_j Xj 到中心点距离之差表示,且 W j i r W_{jir} Wjir 的值因 X j ( j = 1 , 2 , ⋯   , n ) X_j (j=1,2,\cdots,n) Xj(j=1,2,,n) 原先是否在 O i O_i Oi 代表的簇中而对应不同的计算方法。

(1)若 X j X_j Xj 原先属于 O i O_i Oi 的簇 C i C_i Ci,则有两种情况。
X j X_j Xj 现在离某中心点 O m ( m ≠ i ) O_m(m≠i) Om(m=i) 最近 (图10-11a),则 X j X_j Xj 被重新分到 O m O_m Om 的簇,其代价
W j i r = d ( X j , O m ) − d ( X j , O i ) W_{jir}=d(X_j,O_m)-d(X_j,O_i) Wjir=d(Xj,Om)d(Xj,Oi)在这里插入图片描述
X j X_j Xj 现在离新中心点 Q r Q_r Qr 最近 (图10-11b),则 X j X_j Xj 被重新分配到 Q r Q_r Qr 的簇中, 其代价
C j i r = d ( X j , Q r ) − d ( X j , O i ) C_{jir}=d(X_j,Q_r)-d(X_j,O_i) Cjir=d(Xj,Qr)d(Xj,Oi)在这里插入图片描述
(2)若 X j X_j Xj 原先属于某中心点 O m O_m Om 的簇 C m ( m ≠ i ) C_m(m≠i) Cm(m=i),也有两种情况
X j X_j Xj 现在离中心点 O m O_m Om 仍然最近 (图10-12a),则 X j X_j Xj 保留在 O m O_m Om 的簇中,其代价
W j i r = 0 W_{jir}=0 Wjir=0在这里插入图片描述
X j X_j Xj 现在离新中心点 Q r Q_r Qr 最近 (图10-12b),则将 X j X_j Xj 重新分配到 Q r Q_r Qr 的簇中,其代价
W j i r = d ( X j , Q r ) − d ( X j , O m ) W_{jir}=d(X_j,Q_r)-d(X_j,O_m) Wjir=d(Xj,Qr)d(Xj,Om)在这里插入图片描述
  由于中心点有 k k k 个,非中心点有 n − k n-k nk 个,因此,中心点 O i O_i Oi 被一个非中心点 Q r Q_r Qr 替换就有 ( n − k ) × k (n-k)\times k (nk)×k 个不同的方案及其对应的代价。
  如果 E i h = m i n { E i r ∣ i = 1 , 2 , ⋯   , k ; r = 1 , 2 , ⋯   , n − k ) } E_{ih}=min\{E_{ir} | i=1,2,\cdots,k;r=1,2,\cdots,n-k)\} Eih=min{Eiri=1,2,,kr=1,2,,nk)} E i h < 0 E_{ih}<0 Eih<0,则将中心点 O i O_i Oi 用非中心点 Q h Q_h Qh 替换,使 S S S 中每个点到新中心点的距离之和减少,即提高了聚类的总体质量。
  在得到新的中心点集之后,计算得到新的聚类,然后继续寻找可替换的中心点,直到中心点集没有变化为止。

2、算法描述

算法10-4 k-中心点聚类算法
输入:簇的个数 k k k和数据集 S = { X 1 , X 2 , ⋯   , X n } S=\{X_1,X_2,\cdots,X_n\} S={X1,X2,,Xn}
输出:低价最小的聚类 C = { C 1 , C 2 , ⋯   , C k } C=\{C_1,C_2,\cdots,C_k\} C={C1,C2,,Ck}
(1)从 S S S中随机选 k k k个对象作为中心点集 O = { O 1 , O 2 , ⋯   , O k } O=\{O_1,O_2,\cdots,O_k\} O={O1,O2,,Ok}
(2)REPEAT
(3)将所有非中心点分配给离它最近的中心点,并得聚类 C C C
(4)FOR i = 1 , 2 , ⋯   , k i=1,2,\cdots,k i=1,2,,k
(5)  FOR r = 1 , 2 , ⋯   , n − k r=1,2,\cdots,n-k r=1,2,,nk
(6)  计算 S S S中每个 X j X_j Xj因中心点 O i O_i Oi被非中心点 Q r Q_r Qr替换后重新分配的代价 W j i r W_{jir} Wjir
(7)   E i r = W 1 i r + W 2 i r + ⋯ + W n i r E_{ir}=W_{1ir}+W_{2ir}+\cdots+W_{nir} Eir=W1ir+W2ir++Wnir
(8)  END FOR
(9)END FOR
(10) E i h = min ⁡ { E i r ∣ i = 1 , 2 , ⋯   , k ; r = 1 , 2 , ⋯   , n − k } E_{ih}=\min\{E_{ir}|i=1,2,\cdots,k; r=1,2,\cdots,n-k\} Eih=min{Eiri=1,2,,k;r=1,2,,nk}
(11)如果 E i h < 0 E_{ih}<0 Eih<0,则将 O i O_i Oi Q r Q_r Qr替换,得新中心点集 O = { O 1 , ⋯   , O i − 1 , Q r , O i + 1 , ⋯   , O k } O=\{O_1, \cdots,O_{i-1}, Q_r,O_{i+1}, \cdots, O_k\} O={O1,,Oi1,Qr,Oi+1,,Ok}
(12)UNTIL中心点集 O O O无需变化
(13)输出 C = { C 1 , C 2 , ⋯   , C k } C=\{C_1,C_2,\cdots,C_k\} C={C1,C2,,Ck}

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

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

相关文章

【matlab】状态空间模型与传递函数模型的建立与转换

目录 SISO系统 MIMO系统 状态空间模型 状态空间模型到传递函数模型的转换 传递函数模型到状态空间模型的转换 (1) 转换函数ss() (2) 规范形转换函数canon() (3) 常微分方程(传递函数)转换为状态空间模型函数dif2ss() 状态空间模型的变换 特征值、特征向量与广义特征向量的计算…

进程控制-wait和waitpid进程回收

wait 阻塞函数 函数作用&#xff1a; 1. 阻塞并等待子进程退出 2. 回收子进程残留资源 3. 获取子进程结束状态&#xff08;退出原因&#xff09; pid_t wait(int *wstatus); 返回值&#xff1a; ‐1 : 回收失败&#xff0c;已经没有子进程了 >0 : 回收子进程对应的…

线上问题---反思与回顾

线上问题一&#xff1a;麦哲伦2.0 人群配置不生效 发现背景&#xff1a;产品发现三层模型部分计划个别测试计划圈选人群特征与数仓统计数据的人群不一致&#xff0c;向值班人员反馈 根因定位&#xff1a; &#xff08;1&#xff09;用户配置三层模型计划时&#xff0c;配置单…

文心一言 VS 讯飞星火 VS chatgpt (297)-- 算法导论22.1 1题

一、给定有向图的邻接链表&#xff0c;需要多长时间才能计算出每个结点的出度(发出的边的条数)&#xff1f;多长时间才能计算出每个结点的入度(进入的边的条数)&#xff1f;如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 计算出度 对于有向图的邻接链表表示&a…

rufus-4.5 制作 Clonezilla(再生龙)启动盘报syslinux-6.04下载错误

1、官网下载rufus 官网下载rufus-4.5&#xff0c;下载地址&#xff1a;https://rufus.ie/downloads/ 2、下载再生龙&#xff08;Clonezilla&#xff09; 下载最新版本&#xff1a; Clonezilla live 版本: 3.1.2-22&#xff1a;https://sourceforge.net/projects/clonezill…

在 Docker 容器中运行 Vite 开发环境,有这两个问题要注意

容器化开发给我们带来了很多便捷&#xff0c;但是在开发环境下也有一些问题要注意&#xff0c;如果不解决这些问题&#xff0c;你的开发体验不会很好。 容器启动正常&#xff0c;却无法访问 我们用 Docker 启动一个 Vite Vue3 项目的开发环境后&#xff0c;发现端口日志一切…

Springboot使用WebSocket发送消息

1. 创建springboot项目&#xff0c;引入spring-boot-starter-websocket依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>完整项目依赖 <?xml ver…

【游戏客户端】大话版本slg玩法正式上线~~

【游戏客户端】制作率土之滨Like玩法 大家好&#xff0c;我是Lampard家杰~~ 好久好久没有更新博客了&#xff0c;有不少大佬都在后台私信我催更&#xff0c;但是很悲伤这段时间都忙的不行QAQ 那在忙什么呢&#xff1f;就是在制作一个SLG类的玩法【帮派纷争】啦 &#xff0c;布…

RNN、LSTM与GRU循环神经网络的深度探索与实战

循环神经网络RNN、LSTM、GRU 一、引言1.1 序列数据的迷宫探索者&#xff1a;循环神经网络&#xff08;RNN&#xff09;概览1.2 深度探索的阶梯&#xff1a;LSTM与GRU的崛起1.3 撰写本博客的目的与意义 二、循环神经网络&#xff08;RNN&#xff09;基础2.1 定义与原理2.1.1 RNN…

java 闭锁(CountDownLatch)

闭锁&#xff08;CountDownLatch&#xff09;是Java中的一个同步辅助类&#xff0c;用于协调多个线程之间的协作。它允许一个或多个线程等待&#xff0c;直到在其他线程中执行的一组操作完成。闭锁非常适用于需要等待一组事件发生之后再执行某些操作的场景。 import java.uti…

【Java】垃圾回收学习笔记(二):分代假说与垃圾回收算法

文章目录 0. 分代收集理论分代假说分代GC定义 1. 垃圾回收算法1.1 标记清除&#xff08;Mark-Sweep&#xff09;算法优点缺点 1.2 标记复制算法优点缺点为什么是8:1:1&#xff1f; 1.3 标记整理算法优点缺点 2. 是否移动&#xff1f; 0. 分代收集理论 分代假说 现在多数JVM G…

Python编程学习笔记(2)--- 列表简介

1、列表是什么 列表由一系列按特定顺序排列的元素组成。可以创建包含字母表中所有字母、数字、0~9或所有家庭成员姓名的列表&#xff1b;也可以将任何东西加入列表中&#xff0c;其中的元素之间可以没有任何关系。列表通常包含多个元素&#xff0c;因此给列表指定一个表示复数…

python库(6):Pygments库

1 Pygments介绍 在软件开发和文档编写中&#xff0c;代码的可读性是至关重要的一环。无论是在博客文章、技术文档还是教程中&#xff0c;通过代码高亮可以使程序代码更加清晰和易于理解。而在Python世界中&#xff0c;Pygments库就是这样一个强大的工具&#xff0c;它能够将各…

1.2 如何让机器说人话?万字长文回顾自然语言处理(NLP)的前世今生 —— 《带你自学大语言模型》系列

本系列目录 《带你自学大语言模型》系列部分目录及计划&#xff0c;完整版目录见&#xff1a;带你自学大语言模型系列 —— 前言 第一部分 走进大语言模型&#xff08;科普向&#xff09; 第一章 走进大语言模型 1.1 从图灵机到GPT&#xff0c;人工智能经历了什么&#xff1…

Powershell 获取电脑保存的所有wifi密码

一. 知识点 netsh wlan show profiles 用于显示计算机上已保存的无线网络配置文件 Measure-Object 用于统计数量 [PSCustomObject]{ } 用于创建Powershell对象 [math]::Round 四舍五入 Write-Progress 显示进度条 二. 代码 只能获取中文Windows操作系统的wifi密码如果想获取…

【绿色版】Mysql下载、安装、配置与使用(保姆级教程)

大家都知道&#xff0c;Mysql安装版的卸载过程非常繁琐&#xff0c;而且卸载不干净会出现许多问题&#xff0c;很容易让大家陷入重装系统的窘境。基于此&#xff0c;博主今天给大家分享绿色版Mysql的安装、配置与使用。 目录 一、Mysql安装、配置与使用 1、下载解压 2、创建…

02STM32软件安装新建工程

STM32软件安装&新建工程 1.软件安装&#xff1a;1.1Keil5 MDK安装1.2安装器件支持包离线安装支持包在线安装支持包 1.3软件注册&#xff1a;1.4安装驱动STLINK驱动JLink驱动在此文件夹下USB转串口 2开发方式&新建工程步骤&架构个人心得 1.软件安装&#xff1a; 安…

stm32精密控制步进电机(基础篇)

众所周知&#xff0c;步进电机由于使用脉冲控制&#xff0c;会比直流电机的控制稍难一些&#xff0c;但开环控制时也更加稳定。 落到做项目的时候&#xff0c;目前来说我都会先考虑步进电机&#xff0c;再去考虑直流&#xff0c;无刷这样的电机。包括毕设时所用的机械臂也是用…

Linux开发讲课33---线程实现与线程控制步骤简析

线程概述 进程是系统中程序执行和资源分配的基本单位。 每个进程都拥有自己的数据段、代码段和堆栈段&#xff0c;这就造成了进程在进行切换等操作时都需要有比较负责的上下文切换等动作。为了进一步减少处理机的空转时间支持多处理器和减少上下文切换开销&#xff0c;进程在演…

Java基础-内部类与异常处理

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一、Java 内部类 什么是内部类&#xff1f; 使用内部类的优点 访问局部变量的限制 内部类和继承 内部…