聚类算法

聚类的概念:

  • 主要用来处理无监督问题,因为我们手上没有标签了,靠电脑自己进行分类
  • 聚类是指把相似的东西分到一组
  • 难点
    • 如何评估呢(因为没有了标签,难以对比正确与否,很多评估方法失效了)
    • 如何调参呢

K-MEANS的概念

  • K是指要得到的簇的数量,如下图所示应该要得到三个簇,K值需要我们自己指定
    机器学习学习笔记 第十九章 聚类算法-K-MEANS
  • 质心
    • 其实是均值,如上图中的小红点,取向量各位的平均值
  • 距离的度量
    • 常常使用欧氏距离和预先相似度,不过要先进行标准化,令不同坐标的取值都在0~1之间
  • 优化目标
    • 说白了就是想让每个簇中所有的点到中心点的距离越小越好
    • 公式如下:
      mini=1KxCidist(ci,x)2min\sum_{i=1}^{K}\sum_{x\in C_i}^{}dist(c_i,x)^2

K-MEANS算法的工作流程

机器学习学习笔记 第十九章 聚类算法-K-MEANS

优势

  • 简单快速,比较适合于常规的数据集

劣势

  • K值很难确定,有时候需要大量的尝试
  • 复杂度于样本呈线性关系(其实我感觉复杂度也不是很高,不知道是不是我理解上出了问题)
  • 很难发现任意形状的簇,比如两个簇呈环形的关系
    机器学习学习笔记 第十九章 聚类算法-K-MEANS

推荐一个可视化展示K-MEANS的网站,大家通过尝试可以更加直观地理解聚类K-MEANS算法的工作流程

  1. 一打开网站如下
    机器学习学习笔记 第十九章 聚类算法-K-MEANS
  2. 随机选一个类型进入,这里我试试Gaussian Mixture
    机器学习学习笔记 第十九章 聚类算法-K-MEANS
  3. 他给随机分好了三堆,那我们尝试一下添加中心点,比如此处我们添加三个中心点吧
    机器学习学习笔记 第十九章 聚类算法-K-MEANS
  4. 我们再点击Go就好,就能模拟出上述讲过的流程了

通过K-MEANS聚类算法实现图像的压缩

  • 这个压缩很暴力
  • 压缩出来是一个面目全非的灰度图,而且建议大家拿个小图去试,大图要跑好久好久
from skimage import io
from sklearn.cluster import KMeans
import numpy as np
image = io.imread('1.jpg')
io.imshow(image)
io.show()

机器学习学习笔记 第十九章 聚类算法-K-MEANS

row = image.shape[0]
col = image.shape[1]
print(row)
print(col)
image = image.reshape(row*col, 3)#压缩图像,压缩到一列,和三个颜色维度
1080
1920
kmeans = KMeans(n_clusters=128, n_init=10, max_iter=200)#分成128个簇了,因为一开始图像的rgb颜色通道数值取值范围是0~255,此处想压缩一到原来的一半,因此分成128个簇,原本像素靠近哪个就归类于哪个簇中,归类到的簇当成是最后的rgb值,其余两个参数都没那么重要,max_iter是最大的迭代次数
kmeans.fit(image)
clusters = np.asarray(kmeans.cluster_centers_, dtype=np.uint8)
labels = np.asarray(kmeans.labels_, dtype=np.uint8)
labels = labels.reshape(row, col)
io.imshow(labels)
io.show()

对唐宇迪老师的机器学习教程进行笔记整理
编辑日期:2018-10-12
小白一枚,请大家多多指教

相关文章:

  • 2021-09-29
  • 2021-11-19
  • 2021-05-04
  • 2022-01-11
  • 2021-12-12
  • 2021-06-15
  • 2022-02-07
猜你喜欢
  • 2021-04-23
  • 2022-02-07
  • 2021-12-23
  • 2021-08-14
  • 2021-09-15
  • 2022-12-23
  • 2022-01-21
相关资源
相似解决方案