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

聚类算法

聚类的概念:

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

K-MEANS的概念

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

K-MEANS算法的工作流程

2.png

优势

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

劣势

  • K值很难确定,有时候需要大量的尝试
  • 复杂度于样本呈线性关系(其实我感觉复杂度也不是很高,不知道是不是我理解上出了问题)
  • 很难发现任意形状的簇,比如两个簇呈环形的关系
    3.png

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

  1. 一打开网站如下
    4
  2. 随机选一个类型进入,这里我试试Gaussian Mixture
    5
  3. 他给随机分好了三堆,那我们尝试一下添加中心点,比如此处我们添加三个中心点吧
    6
  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()

output_1_1

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
小白一枚,请大家多多指教

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值