聚类算法 K-Means和DBSCAN学习小结

引言

k-means聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法。也是一种无监督学习算法。
DBSCAN是一种著名的密度聚类算法,它使用一组关于“邻域”的参数来描述样本分布的紧密程度。

无监督学习

缺乏足够的先验知识,因此难以人工标注类别或进行人工类别标注的成本太高。根据类别未知(没有被标记结果)的训练样本解决模式识别中的各种问题,称之为无监督学习。

k-means

  • 随机生成k个初始点(质心),作为聚类的中心
  • 计算每个样本点和初始点的距离(一般使用欧式距离公式或曼哈顿距离),把样本归类为最近的那个初始点。这样就形成了K个聚集类,每一类结果被称为“簇”。
  • 计算每一簇的均值点,以它为新的质心,重新做一次距离计算。
  • 重复几次,直到达到指定的迭代次数或最小调整幅度阈值,则停止。

在这里插入图片描述

特点

kmeans:简单,快速,适合常规数据集。但是缺点也很明显:K值难确定、复杂度与样本呈线性关系、很难发现任意形状的簇。一些奇奇怪怪的样本,就很难分类好。
在这里插入图片描述

要点归纳

一个很简单的算法,和KNN有点像,主要就是注意下面几点。

  • K值的选择
  • 距离的度量
  • 质心的更新

代码

使用k-means压缩图片的灰度值

导库

import numpy as np
from sklearn.cluster import KMeans
#skimage就是Scikit-Image,搜索Scikit-Image可以安装
#pip install Scikit-Image
from skimage import io

导入一张图片

先准备一张图片,最好是小点的,不然代码要跑半天·····


# 使用Scikit-Image处理图片的读取和输出
img = io.imread('ttt.jpg')
# io.imshow(img)
# io.show()

# 我这张图片是宽高500*300像素,因此行列分别应该是300和500
rows = img.shape[0]
cols = img.shape[1]

构建算法

# 变化图像的形状,分为RGB三个通道
img = img.reshape(img.shape[0] * img.shape[1], 3)
# 因为图片色值范围是0——255,聚类选择创建一半的簇来压缩图片,使用KMeans指定簇就行,还有其他参数在这里不太需要。
k_means = KMeans(n_clusters=128)
k_means.fit(img)

# 簇的数量
clusters = np.asarray(k_means.cluster_centers_, dtype=np.uint8)
# 这里面是所有的样本点,因为每个像素点有RGB三个通道,所以应该是500*300*3=450000个值
labels = np.asarray(k_means
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值