聚类分析方法(一)

目录

    • 一、聚类分析原理
      • (一)聚类分析概述
      • (二)聚类的数学定义
      • (三)簇的常见类型
      • (四)聚类框架及性能要求
      • (五)簇的距离
    • 二、划分聚类算法
      • (一)划分聚类框架
      • (二)划分聚类的质量
      • (三)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}

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

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

相关文章

车载测试之-CANoe创建仿真工程

在现代汽车工业中&#xff0c;车载测试是确保车辆电子系统可靠性和功能性的关键环节。而使用CANoe创建仿真工程&#xff0c;不仅能够模拟真实的车辆环境&#xff0c;还能大大提升测试效率和准确性。那么&#xff0c;CANoe是如何实现这些的呢&#xff1f; 车载测试中&#xff0…

PXIe-7976【K410T】

起售价 RMB 152,880.00 块RAM(BRAM): 28620 kbit 动态RAM(DRAM): 2 GB FPGA: Kintex-7 410T PXI背板链路: PCI-Express Gen2 x 8 FPGA片: 63550 DSP片: 1540

敏感词匹配DFA算法

算法简介与场景介绍 DFA算法&#xff0c;中文全称为确定性有穷自动机。它的基本思想是构建一个有穷自动机&#xff0c;当用户输入文本时&#xff0c;通过自动机的状态转换来快速匹配敏感词。具体特征是&#xff0c;有一个有效状态的集合和一些从一个状态通向另一个状态的边&am…

并发处理 优先图和多重图

优先图(Precedence Graph)视图可串性多重图(Polygraph) 优先图(Precedence Graph) 优先图用于冲突可串性的判断。 优先图结构&#xff1a; 结点 (Node)&#xff1a;事务&#xff1b;有向边 (Arc): Ti → Tj &#xff0c;满足 Ti <s Tj&#xff1b; 存在Ti中的操作A1和Tj…

利用redis Zset实现 排行榜功能 配合xxl-job持久化每一个赛季的排行榜

zset 可以排序 使用xxl-job实现定时任务 对历史排行榜持久化到数据库 排行榜有当前赛季排行版和历史排行榜 当前赛季排行榜利用redis 中的SortSet 数据结构 获取 每个月的 月初 利用xxl-job的定时任务持久化化上一个月的排行榜信息 并删除redis中的数据 当排行榜数据量巨大时…

【5G VoNR】VoNR流程简述

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G技术研究。 博客内容主要围绕…

移动校园(5):课程表数据获取及展示

首先写下静态页面&#xff0c;起初打算做成一周的课表&#xff0c;由于是以小程序的形式展现&#xff0c;所以显示一周的话会很拥挤&#xff0c;所以放弃下面的方案&#xff0c;改作一次显示一天 改后结果如下&#xff0c;后期还会进行外观优化 真正困难的部分是数据获取 大家大…

拆分Transformer注意力,韩国团队让大模型解码提速20倍|大模型AI应用开始小规模稳步爆发|周伯文:大模型也有幻觉,全球AI创新指数公布

拆分Transformer注意力&#xff0c;韩国团队让大模型解码提速20倍AI正在颠覆AI上市不到两年&#xff0c;蜗牛游戏可能要退市了&#xff1f;世界人工智能大会结束了&#xff0c;百花齐放&#xff0c;但也群魔乱舞“串联OLED”被苹果带火了&#xff0c;比OLED强在哪里&#xff1f…

文化财经macd顶底背离幅图指标公式源码

DIFF:EMA(CLOSE,12) - EMA(CLOSE,26); DEA:EMA(DIFF,9); MACD:2*(DIFF-DEA),COLORSTICK; JC:CROSS(DIFF,DEA); SC:CROSSDOWN(DIFF,DEA); N1:BARSLAST(JC)1; N2:BARSLAST(SC)1; HH:VALUEWHEN(CROSSDOWN(DIFF,DEA),HHV(H,N1));//上次MACD红柱期间合约最大值 HH2:VALUEWHE…

MySQL:视图、用户管理、C/C++/图形化界面链接访问数据库、网页逻辑

文章目录 1.视图1.1 视图的基本使用1.2 视图的基本规则 2.用户管理2.1 创建、删除、修改用户2.2 数据库权限 3.C/C/图形化界面链接访问数据库3.1 准备工作及常用接口介绍3.2 图形化界面访问MySQL 4.用户逻辑(注册&&登录) 1.视图 视图是一个虚拟表&#xff0c;其内容由…

springboot苏桦旅游管理系统-计算机毕业设计源码02123

摘要 旅游业在全球范围内不断发展&#xff0c;为了提供高效的旅游管理和服务&#xff0c;开发一个旅游管理系统具有重要意义。本文旨在设计和实现该旅游管理系统&#xff0c;以满足用户和管理员的需求。该系统采用Spring Boot作为后端框架&#xff0c;利用其简化的开发流程和强…

ComfyUI如何高效率使用多Lora

Efficient 工作流 {"last_node_id": 29,"last_link_id": 56,"nodes": [{"id": 26,"type": "LoRA Stacker","pos": [540,270],"size": {"0": 320,"1": 322},"flag…

如何让代码兼容 Python 2 和 Python 3?Future 库助你一臂之力

目录 01Future 是什么? 为什么选择 Future? 安装与配置 02Future 的基本用法 1、兼容 print 函数 2、兼容整数除法 3、兼容 Unicode 字符串 03Future 的高级功能 1. 处理字符串与字节 2. 统一异常处理…

STM32-TIM定时器

本内容基于江协科技STM32视频内容&#xff0c;整理而得。 文章目录 1. TIM1.1 TIM定时器1.2 定时器类型1.3 基本定时器1.4 通用定时器1.4 高级定时器1.5 定时中断基本结构1.6 预分频器时序1.7 计数器时序1.8 计数器无预装时序1.9 计数器有预装时序1.10 RCC时钟树 2. TIM库函数…

路径跟踪算法之PID、PP、Stanley详细理解

一、前言 今天又来补作业了&#xff01; 在跟踪控制领域&#xff0c;PID&#xff08;Proportional-Integral-Derivative, 分别为比例、积分、微分&#xff09;、PP&#xff08; Pure-Puresuit, 纯跟踪&#xff09;、Stanley&#xff08;前轮反馈控制&#xff09;是三种最为常见…

02STM32软件安装新建工程

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

线性系统理论及应用GUI设计及仿真

目录 1.控制系统的状态空间模型 1.1.状态空间模型 1.2 传递函数模型 1.3 传递函数转换为状态空间模型 1.4.状态空间模型转换为传递函数 1.5.状态空间模型转化为约当标准型 2.线性系统的时域分析 2.1.矩阵指数函数的计算 2.2.线型定常连续系统的状态空间模型求解 3.线…

《Nature》文章:ChatGPT帮助我学术写作的三种方式

图片翻译 ** 文章内容** 忏悔时间&#xff1a;我使用生成式人工智能&#xff08;AI&#xff09;。尽管在学术界关于聊天机器人是积极力量还是消极力量的争论不休&#xff0c;但我几乎每天都使用这些工具来完善我所写论文中的措辞&#xff0c;并寻求对我被要求评估的工作进行替…

Mysql-常用函数及其用法总结

1、字符串函数 测试用例如下&#xff1a; 1.1 CONCAT() 将多个字符串连接成一个字符串。 SELECT CONCAT(first_name, , last_name) AS full_name FROM users; -- 期望结果&#xff1a;John Doe, Jane Smith, Michael Johnson 1.2 SUBSTRING() 提取子字符串 SELECT SUBSTR…

算法012:将x减到0的最小操作数

将x减到0的最小操作数. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/minimum-operations-to-reduce-x-to-zero/ 这个题使用到的是滑动窗口。 乍一看&#xff0c…