机器学习——基本聚类算法原理总结(清晰易懂,适合大学牲体质)

本文详细介绍了层次聚类和K-means聚类算法,包括层次聚类的层次结构、合并规则和停止条件,以及K-means聚类的聚类策略、算法流程和对初始聚类中心的依赖。讨论了它们在处理大数据集的优点和对簇形状、噪声等因素的敏感性。
摘要由CSDN通过智能技术生成

聚类算法

  • 层次聚类:假设类别之间存在层次结构,将样本聚到层次化的类中。
    • 分为聚合聚类分裂聚类
  • 硬聚类:每个样本只能属于一个类。
  • K-means聚类:基于样本集合划分的聚类算法。
    (将样本集合划分为 k k k 个子集, n n n 个样本划分到 k k k 个类中,使每个样本到聚类中心的距离最小)
    • 优点:
      1. 简单、快捷
      2. 能处理大数据集,复杂度约为 O ( n K T ) O(nKT) O(nKT)
      3. 当簇是密集的、球状的或团状的,而簇与簇之间区别明显时,聚类效果好。
    • 缺点:
      1. 要求用户事先给出 k k k
      2. 对初值敏感,会导致不同的聚类结果。
      3. 不适合发现非凸面的簇,或大小差别很大的簇。
      4. 对于“噪声”和孤立点数据敏感。
  • 欧式距离 d i s t ( x i , x j ) = ∥ x i − x j ∥ 2 = ∑ u = 1 n ∣ x i u − x j u ∣ 2 dist(x_i, x_j) = \|x_i - x_j\|_2 = \sqrt{\sum_{u =1}^n |x_{iu} - x_{ju}|^2} dist(xi,xj)=xixj2=u=1nxiuxju2
  • 聚合聚类三要素
    • 距离 & 相似度:
      闵可夫斯基距离、马氏距离、相关系数、夹角余弦。
    • 合并规则:
      类间距离最小。(最短距离、最长距离、中心距离、平均距离)
    • 停止条件:
      类的个数达到阈值、类的直径超过阈值。

一、层次聚类

  • 聚合聚类:

    在这里插入图片描述

  • 分裂聚类:

    在这里插入图片描述


(一)聚合聚类算法过程

  • 输入 n n n个样本组成的集合及样本之间的距离。
  • 输出:对样本集合的一个层次化聚类。

步骤:

  1. 计算 n n n 个样本两两之间的欧氏距离 { d i j } \{d_{ij}\} {dij} ,记作矩阵 D = [ d i j ] n × n D = [d_{ij}]_{n \times n} D=[dij]n×n
  2. 构造 n n n 个类,每个类只包含一个样本。
  3. 合并类间距离最小的两个类,构建一个新类。(类间距离:最短距离)
  4. 计算新类与各类之间的距离,后回到步骤3。(类数达到阈值后,终止计算)

二、K-means聚类

(一)聚类策略

聚类准则函数最小化:通过损失函数的最小化选取最优的划分或函数 C ∗ C^* C

(二)聚类算法

  • 输入 n n n 个样本的集合 X X X
  • 输出:样本集合的聚类 C ∗ C^* C.

  1. 任选 K K K 个初始聚类中心: Z 1 ( 1 ) , Z 2 ( 1 ) , ⋯   , Z K ( 1 ) Z_1^{(1)},Z_2^{(1)}, \cdots ,Z_K^{(1)} Z1(1),Z2(1),,ZK(1)

  2. 最小距离原则将其余样本归到相应的类 Z j Z_j Zj 中。( k k k 为运算迭代次数)
    m i n { ∥ X − Z i ( k ) ∥ , i = 1 , 2 , ⋯   , K } = ∥ X − Z j ( k ) ∥ = d j ( k ) min\{\|X - Z_i^{(k)}\|, i = 1, 2, \cdots , K\} = \| X - Z_j^{(k)}\| = d_j^{(k)} min{XZi(k),i=1,2,,K}=XZj(k)=dj(k)

  3. 计算各个聚类中心的向量值。( N j N_j Nj 为该类的样本数)
    Z j ( k + 1 ) = 1 N j ∑ X ∈ S j ( k ) X      j = 1 , 2 , ⋯   , K Z_j^{(k + 1)} = \frac{1}{N_j} \sum_{X \in S_j^{(k)}} X \ \ \ \ j = 1,2, \cdots, K Zj(k+1)=Nj1XSj(k)X    j=1,2,,K

  4. Z j ( k + 1 ) ≠ Z j ( k ) Z_j(k + 1) \ne Z_j(k) Zj(k+1)=Zj(k),则回到(2),根据新的样本中心逐个重新分类,重复迭代计算;否则计算完毕。

  • 29
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kmeans聚类算法是一种无监督学习算法,用于将数据集划分为不同的簇。它是一个迭代算法,通过计算每个数据点与簇中心的距离,将数据点分配到最近的簇中心。然后,根据分配的数据点更新簇中心。重复这个过程,直到簇中心不再变化或达到预设的迭代次数。 下面是一个使用Python实现Kmeans聚类算法的示例: ``` python import numpy as np import matplotlib.pyplot as plt # 生成随机数据 np.random.seed(0) X = np.random.randn(100, 2) # 初始化K个簇中心 K = 3 centers = X[np.random.choice(len(X), K, replace=False)] # 迭代聚类 for i in range(10): # 计算每个数据点最近的簇中心 distances = np.linalg.norm(X[:, np.newaxis, :] - centers, axis=2) labels = np.argmin(distances, axis=1) # 更新簇中心 for k in range(K): centers[k] = np.mean(X[labels == k], axis=0) # 可视化聚类结果 colors = ['r', 'g', 'b'] for k in range(K): plt.scatter(X[labels == k, 0], X[labels == k, 1], c=colors[k]) plt.scatter(centers[:, 0], centers[:, 1], marker='*', s=200, c='#050505') plt.show() ``` 在这个例子中,我们生成了一个随机数据集,然后初始化了3个簇中心。然后,我们执行10次迭代,计算每个数据点最近的簇中心,并根据分配的数据点更新簇中心。最后,我们可视化聚类结果,其中每个簇用不同的颜色表示,簇中心用星号表示。 Kmeans聚类算法是一种简单有效的聚类算法,但它有一些缺点。例如,它需要预先指定簇的数量K,这可能不是很容易确定。此外,它对初始簇中心的选择很敏感,可能会导致陷入局部最优解。因此,在实际应用中,需要对它进行改进,例如Kmeans++算法和层次聚类算法等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值