机械学习基础-9.进一步的无监督学习:聚类-数据建模与机械智能课程自留

news/2025/2/21 13:32:10/

data modeling and machine intelligence - FURTHER UNSUPERVISED LEARNING-CLUSTERING

  • 聚类
    • 聚类可视化
    • 聚类分析中定义数据点之间相似性 / 相异性的方法
    • 聚类优化问题
  • K - 均值聚类算法(K - Means Clustering)
    • 评估指标
    • 非唯一性问题
  • 用于选择K值的肘部法则
    • 聚类分析中用于选择聚类数量 K K K的肘部法则(The Elbow Method)
  • K均值聚类的优缺点
  • 实现通用人工智能(AGI)所面临的障碍

本节目标:

  • 理解聚类是什么以及聚类的一些应用。
  • 掌握K - 均值算法。
  • 了解用于选择K值的肘部法则。
  • 理解机器学习(ML)的一些障碍。

这些目标聚焦于无监督学习中的聚类相关知识和机器学习的更广泛影响。

聚类

在这里插入图片描述
无监督学习的输入是一组无标签的数据(Unlabeled data),表示为 { x i } i = 1 N \{x_i\}_{i = 1}^{N} {xi}i=1N 。这些数据被输入到一个算法模块中,经过处理后,输出数据的结构(Structure)、相关性(Correlations)和模式(Patterns)。

  • 聚类(Clustering):是无监督学习的一类方法,它将数据划分或分离成“相似”的组。这意味着聚类算法会根据数据点之间的相似性将它们分组,而不需要事先知道每个数据点的类别。
  • 与主成分分析(PCA)的区别:无监督学习与PCA不同。PCA旨在通过找到数据的最大变化方向来寻求数据的低维表示,而无监督学习并不降低维度,只是简单地对数据进行分组。 (因为聚类属于无监督学习,而无监督学习又与PCA不同,所以聚类不属于PCA)

聚类例子
展示聚类应用的一个例子,以肺癌数据为例说明聚类在医学中的应用。
在这里插入图片描述

  • 数据来源:左侧显示了肺癌数据(Lung cancer data),其特征可能包括DNA(可能导致非常高维的特征空间)、疼痛程度(Level of pain)、粘液颜色(Colour of Mucus)等。
  • 聚类结果:右侧展示了聚类后的三种肺癌亚型,分别为Lung cancer subtype A、Lung cancer subtype B和Lung cancer subtype C 。
  • 应用目的:这里不是试图预测患者是否患有某种类型的癌症(这是监督学习问题),而是试图识别聚类,这可能会导致发现新疾病。在发现之后,可以开发检测和治疗方法。

聚类可视化

在这里插入图片描述

  • 划分原则
    • 每个数据点都在其中一个簇内,即 ∪ i = 1 K C i = { x i } i = 1 N \cup_{i = 1}^{K} C_i = \{x_i\}_{i = 1}^{N} i=1KCi={xi}i=1N 。这意味着所有的数据点都能被分配到某个簇中,没有数据点被遗漏。
    • 簇与簇之间不重叠,即对于所有 i ≠ j i \neq j i=j C i ∩ C j = ∅ C_i \cap C_j = \varnothing CiCj= 。这保证了每个数据点只属于一个簇。
  • 数学表示:有时从数学角度将 C i C_i Ci 表示为簇 i i i 中数据的索引集合更方便。也就是说,如果 j ∈ C i j \in C_i jCi,那么 x j x_j xj 在簇 i i i 中。同时有:
    • ∪ i = 1 K C i = { 1 , ⋯ , N } \cup_{i = 1}^{K} C_i = \{1, \cdots, N\} i=1KCi={1,,N} ,这是从索引角度说明所有数据点的索引都在这些簇的索引集合中。
    • 对于所有 i ≠ j i \neq j i=j C i ∩ C j = ∅ C_i \cap C_j = \varnothing CiCj= ,同样强调了簇的索引集合之间不重叠。
  • 选择标准:我们希望选择这样的簇,如果 i , j ∈ C l i, j \in C_l i,jCl,那么 x i x_i xi x j x_j xj 是“相似的” 。即同一簇内的数据点具有相似性。

聚类分析中定义数据点之间相似性 / 相异性的方法

这张图片主要讲解了在聚类分析中定义数据点之间相似性/相异性的方法。

  • 相异性定义公式:两个数据点 x , x ~ ∈ R n x, \tilde{x} \in \mathbb{R}^n x,x~Rn 之间的相异性定义 D ( x , x ~ ) : = ∑ i = 1 n w i d ( x i , x ~ i ) D(x, \tilde{x}) := \sum_{i = 1}^{n} w_i d(x_i, \tilde{x}_i) D(x,x~):=i=1nwid(xi,x~i) 其中:
    • w i > 0 w_i > 0 wi>0 且对于所有 x , y ∈ R x, y \in \mathbb{R} x,yR d ( x , y ) ≥ 0 d(x, y) \geq 0 d(x,y)0(任何距离/相异性度量都应为正)。
    • 对于所有 x ∈ R x \in \mathbb{R} xR d ( x , x ) = 0 d(x, x) = 0 d(x,x)=0(当数据相同时,相异性应为零)。

通常会选择 w i = 1 w_i = 1 wi=1 ,并且 d ( x , y ) = ( x − y ) 2 d(x, y) = (x - y)^2 d(x,y)=(xy)2 ,这样 D ( x , y ) = ∥ x − y ∥ 2 2 D(x, y) = \|x - y\|_2^2 D(x,y)=xy22 ,即平方欧几里得范数。

当特征以不同单位测量,或者某些特征被数据科学家认为更重要时,权重 w i w_i wi 就会发挥作用。

聚类优化问题

  • 优化目标:我们希望最小化簇内的平均相异性(average dissimilarity within clusters)。
  • 簇内平均相异性公式:簇 C l C_l Cl 内的平均相异性公式:
    1 ∣ C l ∣ ∑ i , j ∈ C l D ( x i , x j ) = 1 ∣ C l ∣ ∑ i , j ∈ C l ∥ x i − x j ∥ 2 2 \frac{1}{|C_l|} \sum_{i,j \in C_l} D(x_i, x_j) \\ = \frac{1}{|C_l|} \sum_{i,j \in C_l} \|x_i - x_j\|_2^2 Cl1i,jClD(xi,xj)=Cl1i,jClxixj22 这里选择欧几里得范数作为相异性度量(上面说了),所以进一步写成 1 ∣ C l ∣ ∑ i , j ∈ C l ∥ x i − x j ∥ 2 2 \frac{1}{|C_l|} \sum_{i,j \in C_l} \|x_i - x_j\|_2^2 Cl1i,jClxixj22 。其中, ∣ C l ∣ |C_l| Cl 表示簇 l l l 中的元素数量。
  • 寻找最优K个簇:为了找到最佳的 K K K 个簇,最小化每个选定簇内平均相异性的总和是合理的。对应的数学表达式为:
    • min ⁡ C 1 , ⋯ , C K ∑ k = 1 K 1 ∣ C k ∣ ∑ i , j ∈ C k ∥ x i − x j ∥ 2 2 \min_{C_1, \cdots, C_K} \sum_{k = 1}^{K} \frac{1}{|C_k|} \sum_{i,j \in C_k} \|x_i - x_j\|_2^2 C1,,CKmink=1KCk1i,jCkxixj22
    • 约束条件为: ∪ i = 1 K C i = { 1 , ⋯ , N } \cup_{i = 1}^{K} C_i = \{1, \cdots, N\} i=1KCi={1,,N} (所有数据点都在这些簇中)且 C i ∩ C j = ∅ C_i \cap C_j = \varnothing CiCj= (簇与簇之间不重叠)。

尝试使用暴力法解决聚类优化

提出问题:有多少个K - 簇?
对于每个数据点,都有K个簇可以分配。因此,几乎有 K × K × ⋯ × K = K N K×K×\cdots×K = K^N K×K××K=KN 个不同的簇。这里说“几乎”是因为这种计算会重复计算相同的簇,例如, C 1 = { x 1 } , C 2 = { x 2 } C_1 = \{x_1\}, C_2 = \{x_2\} C1={x1},C2={x2} C 1 = { x 2 } , C 2 = { x 1 } C_1 = \{x_2\}, C_2 = \{x_1\} C1={x2},C2={x1} 在这种计算中被当作两种不同的数据划分方式。

xi
C1
C2
...
CK

对于这几乎 K N K^N KN 个簇中的每一个,我们可以计算每个簇内平均相异性的总和(目标函数)如下,然后找出使这个目标函数最小的簇。 ∑ k = 1 K 1 ∣ C k ∣ ∑ i , j ∈ C k ∥ x i − x j ∥ 2 2 \sum_{k = 1}^{K} \frac{1}{|C_k|} \sum_{i,j \in C_k} \|x_i - x_j\|_2^2 k=1KCk1i,jCkxixj22
顺带一提:

  • N = 200 N = 200 N=200 K = 6 K = 6 K=6 时,几乎有 6 200 ≈ 4.3 × 1 0 155 6^{200} \approx 4.3×10^{155} 62004.3×10155 个不同的簇。
  • 宇宙中大约有 1 0 82 10^{82} 1082 个原子,因此进行如此多的计算是难以处理的(intractable),说明暴力法在大规模数据下计算量过大。

既然暴力法这么拉,那肯定要找一些更好的聚类算法。

K - 均值聚类算法(K - Means Clustering)

**解释**
上图是一个可视化的例子,显示了在迭代开始(Iteration #0)时的数据点分布情况,数据点被分成了不同颜色的组,代表不同的聚类

大致算法步骤

  1. 随机地为每个数据点 x i x_i xi i = 1 , ⋯ , N i = 1, \cdots, N i=1,,N)分配一个介于 1 1 1 K K K之间的数。
  2. 迭代直到聚类分配不再改变:
    • 对于 K K K聚类中的每一个,计算聚类中心 c i c_i ci,公式为 c i = 1 ∣ C i ∣ ∑ j ∈ C i x j ∈ R n c_i=\frac{1}{|C_i|}\sum_{j\in C_i}x_j\in \mathbb{R}^n ci=Ci1jCixjRn,其中 ∣ C i ∣ |C_i| Ci聚类 C i C_i Ci中的数据点数量。
    • 更新每个数据点的聚类分配,将其分配到离其最近的聚类中心所在的聚类

伪代码示例:
Algorithm: K-means  # 初始时随机将数据分配到聚类中, L i 表示数据点 x i 所属的聚类 . Input:  { x i } i = 1 N , K ∈ N , L ∈ { 1 , … , K } N , and  ε = 1 while  ε > 0 do  for  j = 1 : K do  # 计算每个聚类的中心,即聚类中数据的平均值 c j = 1 ∑ i = 1 N 1 { L i } ( j ) ∑ i = 1 N 1 { L i } ( j ) x i end  for  i = 1 : N do  # ε ≥ 0 用于判断在本次循环中任何数据点的聚类分配是否发生了变化。 ε = ∑ i = 1 N ( L i − arg ⁡ min ⁡ 1 ≤ j ≤ K ∥ x i − c j ∥ 2 ) 2 # 将数据点分配到最近的聚类中心所在的聚类来更新数据的聚类分配 L i = arg ⁡ min ⁡ 1 ≤ j ≤ K ∥ x i − c j ∥ 2 end  end  Output:  c 补充说明: 1 A ( x ) = { 1 , x ∈ A 0 , otherwise 用于判断元素 x 是否属于集合 A 。 x ∗ = arg ⁡ min ⁡ x f ( x ) 表示当 f ( x ∗ ) = min ⁡ x f ( x ) 时, x ∗ 是使函数 f ( x ) 取得最小值的 x 值 \begin{array}{l} \text { Algorithm: K-means }\\ \#初始时随机将数据分配到聚类中,L_i表示数据点x_i所属的聚类.\\ \text { Input: }\left\{x_{i}\right\}_{i=1}^{N}, K \in \mathbb{N}, L \in\{1, \ldots, K\}^{N} \text {, and } \varepsilon=1 \\ \text { while } \varepsilon>0 \text { do }\\ \qquad\text { for } j=1: K \text { do }\\ \qquad\qquad\#计算每个聚类的中心,即聚类中数据的平均值\\ \qquad\qquad c_{j}=\frac{1}{\sum_{i=1}^{N} \mathbb{1}_{\left\{L_{i}\right\}}(j)} \sum_{i=1}^{N} \mathbb{1}_{\left\{L_{i}\right\}}(j) x_{i}\\ \qquad\text { end }\\ \qquad\text { for } i=1: N \text { do }\\ \qquad\qquad\#\varepsilon\geq0用于判断在本次循环中任何数据点的聚类分配是否发生了变化。\\ \qquad\qquad\varepsilon=\sum_{i=1}^{N}\left(L_{i}-\arg \min _{1 \leq j \leq K}\left\|x_{i}-c_{j}\right\|_{2}\right)^{2}\\\\ \qquad\qquad\#将数据点分配到最近的聚类中心所在的聚类来更新数据的聚类分配 \\ \qquad\qquad L_{i}=\arg \min _{1 \leq j \leq K}\left\|x_{i}-c_{j}\right\|_{2}\\ \qquad\text { end }\\ \text { end }\\ \text { Output: } c\\ \\ \text { 补充说明:}\\ \mathbb{1}_A(x)=\begin{cases}1, & x\in A \\ 0, & \text{otherwise}\end{cases} 用于判断元素x是否属于集合A。 \\ x^*=\arg\min_{x}f(x)\text{表示当}f(x^*)=\min_{x}f(x)时,x^*是使函数f(x)取得最小值的x值 \end{array}  Algorithm: K-means #初始时随机将数据分配到聚类中,Li表示数据点xi所属的聚类. Input: {xi}i=1N,KN,L{1,,K}N, and ε=1 while ε>0 do  for j=1:K do #计算每个聚类的中心,即聚类中数据的平均值cj=i=1N1{Li}(j)1i=1N1{Li}(j)xi end  for i=1:N do #ε0用于判断在本次循环中任何数据点的聚类分配是否发生了变化。ε=i=1N(Liargmin1jKxicj2)2#将数据点分配到最近的聚类中心所在的聚类来更新数据的聚类分配Li=argmin1jKxicj2 end  end  Output: c 补充说明:1A(x)={1,0,xAotherwise用于判断元素x是否属于集合Ax=argminxf(x)表示当f(x)=minxf(x)时,x是使函数f(x)取得最小值的x

注意

  • 因为K - 均值聚类算法是一种启发式聚类方法(启发式算法介绍),所以K - 均值算法可能收敛到局部最小值,而非全局最优聚类。它是一种比暴力搜索更易于执行的启发式算法。

  • K - 均值算法与之前课程中介绍的用于分类的K - 近邻算法不同。

    • K - 近邻算法(K-means):是分类算法,是属于监督学习的。在监督学习里,数据是有标签的。即类是别人分好的,算是输入的一部分。
    • K - 均值聚类算法(K - Means Clustering):是聚类算法,属于无监督学习。在无监督学习里,数据没有标签,所有的分类依据都是从原始数据中推理得到的。

K-均值聚类例子

考虑数据集 D = { 2 , 3 , 4 , 7 , 12 } D = \{2, 3, 4, 7, 12\} D={2,3,4,7,12},目标是使用K - 均值算法将其划分为 2 2 2聚类
在这里插入图片描述

  • 初始化
    初始聚类分配向量 L = [ 1 , 2 , 1 , 2 , 1 ] ⊤ L = [1, 2, 1, 2, 1]^{\top} L=[1,2,1,2,1],这意味着将数据点 2 2 2 4 4 4 12 12 12分配到聚类 C 1 C_1 C1,将数据点 3 3 3 7 7 7分配到聚类 C 2 C_2 C2,即 C 1 = { 2 , 4 , 12 } C_1 = \{2, 4, 12\} C1={2,4,12} C 2 = { 3 , 7 } C_2 = \{3, 7\} C2={3,7}
  • 步骤1:计算两个聚类的中心。
    • 对于 C 1 C_1 C1 c 1 = 1 3 ( 2 + 4 + 12 ) = 6 c_1=\frac{1}{3}(2 + 4 + 12)=6 c1=31(2+4+12)=6
    • 对于 C 2 C_2 C2 c 2 = 1 2 ( 3 + 7 ) = 5 c_2=\frac{1}{2}(3 + 7)=5 c2=21(3+7)=5
  • 步骤2:根据新的聚类中心重新分配数据点。得到新的聚类分配向量 L = [ 2 , 2 , 2 , 1 , 1 ] ⊤ L = [2, 2, 2, 1, 1]^{\top} L=[2,2,2,1,1],此时 C 1 = { 7 , 12 } C_1 = \{7, 12\} C1={7,12} C 2 = { 2 , 3 , 4 } C_2 = \{2, 3, 4\} C2={2,3,4}
  • 步骤3:再次计算两个聚类的中心。
    • 对于 C 1 C_1 C1 c 1 = 1 2 ( 7 + 12 ) = 9.5 c_1=\frac{1}{2}(7 + 12)=9.5 c1=21(7+12)=9.5
    • 对于 C 2 C_2 C2 c 2 = 1 3 ( 2 + 3 + 4 ) = 3 c_2=\frac{1}{3}(2 + 3 + 4)=3 c2=31(2+3+4)=3
  • 步骤4:重新分配数据点,聚类分配向量依然是 L = [ 2 , 2 , 2 , 1 , 1 ] ⊤ L = [2, 2, 2, 1, 1]^{\top} L=[2,2,2,1,1] C 1 = { 7 , 12 } C_1 = \{7, 12\} C1={7,12} C 2 = { 2 , 3 , 4 } C_2 = \{2, 3, 4\} C2={2,3,4}聚类分配没有发生变化。
  • 输出:由于聚类分配不再改变,算法结束,输出两个聚类的中心:
    • c 1 = 1 2 ( 7 + 12 ) = 9.5 c_1=\frac{1}{2}(7 + 12)=9.5 c1=21(7+12)=9.5
    • c 2 = 1 3 ( 2 + 3 + 4 ) = 3 c_2=\frac{1}{3}(2 + 3 + 4)=3 c2=31(2+3+4)=3

K-均值聚类性能评估示例
这张图片展示了一个一维数据集上K - 均值算法的性能评估示例,具体内容如下:
还是上面是数据集:

  • 给定数据集 D = { x 1 , x 2 , x 3 , x 4 , x 5 } = { 2 , 3 , 4 , 7 , 12 } D = \{x_1, x_2, x_3, x_4, x_5\} = \{2, 3, 4, 7, 12\} D={x1,x2,x3,x4,x5}={2,3,4,7,12}
  • 使用K - 均值算法将其划分为两个聚类 C 1 = { 7 , 12 } = { x 4 , x 5 } C_1 = \{7, 12\} = \{x_4, x_5\} C1={7,12}={x4,x5} C 2 = { 2 , 3 , 4 } = { x 1 , x 2 , x 3 } C_2 = \{2, 3, 4\} = \{x_1, x_2, x_3\} C2={2,3,4}={x1,x2,x3}。以索引形式表示为 C 1 = { 4 , 5 } C_1 = \{4, 5\} C1={4,5} C 2 = { 1 , 2 , 3 } C_2 = \{1, 2, 3\} C2={1,2,3}

评估指标

评估指标为每个选定聚类内的平均相异度总和。计算公式为:
∑ k = 1 K 1 ∣ C k ∣ ∑ i , j ∈ C k ∣ ∣ x i − x j ∣ ∣ 2 \sum_{k = 1}^{K}\frac{1}{|C_k|}\sum_{i, j \in C_k}||x_i - x_j||^2 k=1KCk1i,jCk∣∣xixj2
其中, K K K聚类数(这里 K = 2 K = 2 K=2), ∣ C k ∣ |C_k| Ck聚类 C k C_k Ck中的数据点数量, x i x_i xi x j x_j xj聚类 C k C_k Ck中的数据点。

计算过程

  • 对于聚类 C 1 C_1 C1 ∣ C 1 ∣ = 2 |C_1| = 2 C1=2,数据点为 7 7 7 12 12 12,则 1 ∣ C 1 ∣ ∑ i , j ∈ C 1 ∣ ∣ x i − x j ∣ ∣ 2 = 1 2 ( ( 7 − 12 ) 2 + ( 12 − 7 ) 2 ) \frac{1}{|C_1|}\sum_{i, j \in C_1}||x_i - x_j||^2 = \frac{1}{2}((7 - 12)^2 + (12 - 7)^2) C11i,jC1∣∣xixj2=21((712)2+(127)2)
  • 对于聚类 C 2 C_2 C2 ∣ C 2 ∣ = 3 |C_2| = 3 C2=3,数据点为 2 2 2 3 3 3 4 4 4,则 1 ∣ C 2 ∣ ∑ i , j ∈ C 2 ∣ ∣ x i − x j ∣ ∣ 2 = 1 3 ( ( 2 − 3 ) 2 + ( 2 − 4 ) 2 + ( 3 − 4 ) 2 + ( 3 − 2 ) 2 + ( 4 − 2 ) 2 + ( 4 − 3 ) 2 ) \frac{1}{|C_2|}\sum_{i, j \in C_2}||x_i - x_j||^2 = \frac{1}{3}((2 - 3)^2 + (2 - 4)^2 + (3 - 4)^2 + (3 - 2)^2 + (4 - 2)^2 + (4 - 3)^2) C21i,jC2∣∣xixj2=31((23)2+(24)2+(34)2+(32)2+(42)2+(43)2)
  • 对上述两部分求和并化简:
    1 2 ( ( 7 − 12 ) 2 + ( 12 − 7 ) 2 ) + 1 3 ( ( 2 − 3 ) 2 + ( 2 − 4 ) 2 + ( 3 − 4 ) 2 + ( 3 − 2 ) 2 + ( 4 − 2 ) 2 + ( 4 − 3 ) 2 ) = 2 ( 1 2 ( 7 − 12 ) 2 + 1 3 ( ( 2 − 3 ) 2 + ( 2 − 4 ) 2 + ( 3 − 4 ) 2 ) ) = 29 \begin{align*} &\frac{1}{2}((7 - 12)^2 + (12 - 7)^2) + \frac{1}{3}((2 - 3)^2 + (2 - 4)^2 + (3 - 4)^2 + (3 - 2)^2 + (4 - 2)^2 + (4 - 3)^2)\\ =&2\left(\frac{1}{2}(7 - 12)^2 + \frac{1}{3}((2 - 3)^2 + (2 - 4)^2 + (3 - 4)^2)\right)\\ =& 29 \end{align*} ==21((712)2+(127)2)+31((23)2+(24)2+(34)2+(32)2+(42)2+(43)2)2(21(712)2+31((23)2+(24)2+(34)2))29

这个数值 29 29 29表示在该聚类结果下,所有聚类内的平均相异度总和,用于衡量聚类的紧密程度,数值越小通常表示聚类效果越好。

非唯一性问题

还记不记得K均值算法是启发性算法?启发性算法又被称为试探法,所以在 K - 均值算法中,存在由质心定义的聚类的非唯一性问题。

假设现在考虑问题:寻找与数据点 x i x_i xi距离最近的聚类中心 c j c_j cj的索引. arg ⁡ min ⁡ 1 ≤ j ≤ k ∥ x i − c j ∥ 2 \underset{1\leq j\leq k}{\arg\min}\|x_i - c_j\|_2 1jkargminxicj2

这个问题就可能存在多个解。这是因为当数据点 x i ∈ R n x_i \in \mathbb{R}^n xiRn与两个或更多聚类中心的距离恰好相等时,就会出多个解。

例如,对于 j ≠ l j \neq l j=l,可能有 { j , l } ∈ arg ⁡ min ⁡ 1 ≤ j ≤ k ∥ x i − c j ∥ 2 \{j, l\} \in \underset{1\leq j\leq k}{\arg\min}\|x_i - c_j\|_2 {j,l}1jkargminxicj2 ,即数据点 x i x_i xi聚类中心 c j c_j cj c l c_l cl的距离都是最小的。

在实现中,当出现上述距离相等的情况时,工程师必须选择一个任意的规则来实现K - 均值算法,这个规则是一个超参数。

在本节中,将采用最小索引的规则。当然还可以选择其他规则,比如将数据点分配到质心最小或最大的聚类(即 ∥ c i ∥ 2 \|c_i\|_2 ci2最小或最大的聚类)。总之,这些规则的选择是任意的。

采用最小索引规则
如果 j ∗ ∈ arg ⁡ min ⁡ 1 ≤ j ≤ k ∥ x i − c j ∥ 2 j^* \in \underset{1\leq j\leq k}{\arg\min}\|x_i - c_j\|_2 j1jkargminxicj2 ,并且对于所有 l ∈ arg ⁡ min ⁡ 1 ≤ j ≤ k ∥ x i − c j ∥ 2 l \in \underset{1\leq j\leq k}{\arg\min}\|x_i - c_j\|_2 l1jkargminxicj2 l ≠ j ∗ l \neq j^* l=j ,都有 j ∗ < l j^* < l j<l ,那么数据点 x i x_i xi将被分配到聚类 j ∗ j^* j

用于选择K值的肘部法则

刚刚我们的讨论里,都没有关于如何选择聚类数量的 K K K的问题。对于某些应用,聚类的数量是由问题本身的内在性质决定的:

  • 以销售人员分配客户为例进行说明:假设公司有 K K K名销售人员,希望对客户进行聚类,以便为每位销售人员分配相似规模和特征的客户群,从而实现专业化服务。在这种情况下,聚类的数量 K K K就等于销售人员的数量,这样每个聚类对应一位销售人员的客户群体。

随着聚类数量 K K K的增加,通常每个聚类内的平均相异度总和会下降。这是因为更多的聚类意味着每个聚类可以更加精细地划分数据,使得同一聚类内的数据点更加相似,进而导致平均相异度降低。

既然增加聚类数量会使平均相异度下降,那么如何合理地选择聚类数量 K K K呢?

聚类分析中用于选择聚类数量 K K K的肘部法则(The Elbow Method)

假设数据集 { x i } i = 1 N \{x_i\}_{i = 1}^{N} {xi}i=1N存在一些自然形成的聚类 C 1 , ⋯ , C K ∗ C_1, \cdots, C_{K^*} C1,,CK ,其中 K ∗ K^* K是数据中真实的聚类数量。

不同 K K K值下的聚类情况

  • K < K ∗ K < K^* K<K:某些聚类会包含来自多个自然形成聚类的元素。这会导致每个聚类内的相异度较高,因为不同自然聚类中的元素特征差异较大。
  • K > K ∗ K > K^* K>K:某些聚类会对自然形成的聚类进行划分。进一步增加 K K K只会使总相似度有少量下降。这是因为自然聚类中的数据已经比较接近,进一步划分这些聚类只能少量减少相异度。

肘部法则原理
定义 S A D ( K ) = ∑ k = 1 K 1 ∣ C k ∣ ∑ i , j ∈ C k ∥ x i − x j ∥ 2 SAD(K)=\sum_{k = 1}^{K}\frac{1}{|C_k|}\sum_{i, j \in C_k}\|x_i - x_j\|^2 SAD(K)=k=1KCk1i,jCkxixj2,它表示当聚类数量为 K K K时,所有聚类内平均相异度的总和。随着 K K K的增加, S A D ( K ) SAD(K) SAD(K)通常会下降。在 K = K ∗ K = K^* K=K处, S A D ( K ) SAD(K) SAD(K)的曲线会出现一个拐点或类似肘部的形状。对于一些数据集,可能没有明显的肘部,所以肘部法则是一种启发式方法,用于帮助用户选择合适的 K K K值。
在这里插入图片描述

上图展示了 S A D ( K ) SAD(K) SAD(K) K K K变化的曲线。曲线在 K ∗ K^* K处出现明显的弯曲,类似肘部,可据此判断合适的聚类数量。但是需要知道,并非所有数据集都有清晰可辨的肘部,该方法只是辅助选择 K K K的一种手段。

K均值聚类的优缺点

优点
与通过暴力搜索找到最优聚类相比,K - 均值算法在计算上更高效。暴力搜索需要穷举所有可能的聚类组合来找到最优解,计算量巨大,而K - 均值算法基于启发式策略,通过迭代计算聚类中心和分配数据点,能在较短时间内得到一个较满意的聚类结果,适用于大规模数据集。

缺点

  1. 聚类数量选择困难:用户必须自行选择聚类 K K K,但这是一个主观的选择,只能依靠如肘部法则等启发式方法辅助,没有一种绝对准确的方法来确定最优的 K K K值,不同的 K K K值可能导致不同的聚类结果。

  2. 易陷入局部最优:算法不一定能收敛到最优的 K K K聚类。输出的局部最小值在很大程度上取决于聚类数据分配的初始化。不同的初始聚类中心选择可能会使算法收敛到不同的局部最优解,而非全局最优解。
    在这里插入图片描述
    如上图,凸函数图像呈现为一个碗状,只有一个全局最小值;非凸函数图像有多个起伏,存在多个局部最小值,这恰恰说明K - 均值算法因为初始化随机,很可能陷入局部最优的问题。

  3. 无法处理非凸聚类:K - 均值算法无法处理非凸形状的聚类。因为它基于质心来分配聚类,质心的计算方式会导致聚类结果倾向于凸形状。
    在这里插入图片描述
    凸区域内任意两点连线都在区域内,非凸区域则不满足此条件,K - 均值算法因为计算质心的特性,在处理非凸聚类时的局限性。

实现通用人工智能(AGI)所面临的障碍

这张图片主要探讨了实现通用人工智能(AGI)所面临的障碍,具体内容如下:

  1. 数据标注瓶颈
    • 手动标注数据集(如为图像添加描述性标签)仍是人工智能训练中的重大瓶颈。
    • AGI的进展取决于在无需大量人类指导下进行自学习的能力。
    • 大规模获取高质量数据的可持续性存在重大隐患。
  2. 摩尔定律的局限性
    • 摩尔定律指出微芯片上的晶体管数量大约每两年翻一番。
    • 物理限制的存在给维持当前计算能力的指数级增长带来了不确定性。
    • 仅依靠规模扩展可能不是可持续的解决方案,算法和架构方面的创新势在必行。
  3. 过拟合与算法挑战
    • 扩大人工智能模型规模的追求增加了过拟合风险和性能下降的问题。
    • 深入研究梯度下降和神经网络表现良好的原因至关重要。
    • 必须探索新的算法、理论和计算范式以推动AGI发展。
    • 算法需要持续训练和学习,而不是像ChatGPT那样预训练后模型参数就固定下来。
  4. 封闭与开放游戏及不确定性
    • 区分封闭游戏(规则明确)和开放游戏(具有不可预测性和模糊性)至关重要。
    • 人工智能模型处理不确定性的能力是关键挑战,影响其在两种游戏中的表现。
    • 像国际象棋、围棋和蛋白质折叠等应用属于封闭游戏,而掌握开放游戏仍然是一个悬而未决的挑战。
  5. 数据质量与人类偏见
    • 人工智能模型的质量与训练数据的质量本质上相关联。
    • 人类生成的数据存在固有局限性和偏见,这可能限制人工智能的智能水平。
    • 可能没有足够的高质量数据来持续扩大机器学习模型的规模。

http://www.ppmy.cn/news/1573897.html

相关文章

DeepSeek - R1:模型架构深度解析

DeepSeek - R1&#xff1a;模型架构深度解析 引言 本文将深入探索DeepSeek - R1模型架构。将从输入到输出追踪DeepSeek - R1模型&#xff0c;找出架构中的新发展和关键部分。DeepSeek - R1基于DeepSeek - V3 - Base模型架构&#xff0c;本文旨在涵盖其设计的所有重要方面。 …

YOLOv12技术研究

1.1 研究背景与动机 YOLO系列作为目标检测领域的经典算法&#xff0c;以其高效的检测速度和良好的精度平衡&#xff0c;广泛应用于实时目标检测任务。然而&#xff0c;传统YOLO模型大多基于卷积神经网络&#xff08;CNN&#xff09;&#xff0c;尽管CNN在计算效率上表现出色&a…

蓝桥杯 Java B 组 之树的基础(二叉树遍历)

Day 4&#xff1a;树的基础&#xff08;二叉树遍历&#xff09; 一、什么是树&#xff1f; 树&#xff08;Tree&#xff09;是一种 层次结构 的数据结构&#xff0c;它由节点&#xff08;Node&#xff09;组成&#xff0c;每个节点可以有 多个子节点。树的应用非常广泛&#x…

机器学习数学基础:29.t检验

一、t 检验的定义与核心思想 &#xff08;一&#xff09;定义 t 检验&#xff08;Student’s t - test&#xff09;是一种在统计学领域中广泛应用的基于 t 分布的统计推断方法。其主要用途在于判断样本均值与总体均值之间&#xff0c;或者两个独立样本的均值之间、配对样本的…

Simple_SSTI_2(WEB)

这道题我也是第一次碰&#xff0c;不过我很好奇为什么我不从SSTI_1开始做 ##解题思路 拿到页面一串英文&#xff0c;告诉我们缺少一个flag参数&#xff0c;于是我令flag1&#xff0c;于是打印了1&#xff0c;输入各种语句也是&#xff0c;原封不动变为传入的字符串 根据题目提…

校招后台开发:JAVA和GO选哪一个?

有同学过来咨询说&#xff1a;“大拿老师我之前有过go语言的实习&#xff0c;但是我在校招里面发现go语言的校招岗位不是很多&#xff0c;我是投java的岗位还是投go的岗位&#xff1f; 这个问题呢这两年来也有很多同学问过&#xff0c;下面我们来详细说说应该怎么选&#xff1…

C++ 设计模式-责任链模式

模拟网络请求处理管道&#xff0c;包含动态处理器注册、请求修改和条件传递等特性&#xff1a; #include <iostream> #include <memory> #include <vector> #include <string>// 请求上下文&#xff0c;包含可修改的状态 struct RequestContext {std:…

排序算法复习——包括插入排序、希尔排序、冒泡排序、快排(包括霍尔法、挖坑法、快慢指针法)、堆排、选择排序、归并排序等 (代码采用c/c++混编)

1.插入排序 插入排序就像我们打斗地主的时候&#xff0c;有一大把牌我们来不及理&#xff0c;就会一张一张的拿然后把拿到的牌放到合适的位置。 对于插入排序我们可以将待排序的数组理解为那一堆没有整理的牌&#xff0c;将排序好的部分理解为手上的牌&#xff0c;对于第i张牌我…