机器学习中的算法-聚类算法

原创文章,如需转载请保留出处
本博客为唐宇迪老师python数据分析与机器学习实战课程学习笔记

一.聚类
给定一组数据点,我们可以使用聚类算法将每个数据点划分为一个特定的组。理论上,同一组中的数据点应该具有相似的属性和/或特征,而不同组中的数据点应该具有高度不同的属性和/或特征。聚类是一种无监督学习的方法,是许多领域中常用的统计数据分析技术。
1.1 聚类概念

  • 无监督问题:我们手里没有标签
  • 聚类:相似的东西分到一组
  • 难点:如何评估,如何调参

1.2 K-MEANS算法
基本概念

  • 要得到簇的个数,需要指定K值
  • 质心:均值,即向量各维取平均值即可
  • 距离的度量:常用欧几里得距离和余弦相似度(先标准化)
  • 优化目标:机器学习中的算法-聚类算法_第1张图片

二.K-MEANS工作流程
2.1 流程

  • 1.首先我们需要预先给定聚类的数目同时随机初始化聚类中心。我们可以初略的观察数据并给出较为准确的聚类数目;
  • 2.每一个数据点通过计算与聚类中心的距离了来分类到最邻近的一类中;
  • 3.根据分类结果,利用分类后的数据点重新计算聚类中心;
  • 4.重复步骤二三直到聚类中心不再变化。(可以随机初始化不同的聚类中心以选取最好的结果)
    机器学习中的算法-聚类算法_第2张图片
    2.2 优劣势
    优势:
  • 简单、快速、适合常规数据集

劣势:

  • K值难确定
  • 复杂度与样本呈线性关系
  • 很难发现任意形状的簇

三.K-MEANS迭代可视化展示
https://www.naftaliharris.com/blog/visualizing-k-means-clustering/
(自己玩!!!)

四.使用K-MEANS进行图像压缩
现有一张图片进行压缩,原先是0~255,256种可能性。现在通过聚类把图片压缩一半,压缩成128种可能性。

from skimage import io
from sklearn.cluster import KMeans
import numpy as np

image = io.imread('car.jpeg')
io.imshow(image)
io.show()

rows = image.shape[0]
cols = image.shape[1]

image = image.reshape(image.shape[0]*image.shape[1],3)
kmeans = KMeans(n_clusters=128,n_init=10,max_iter=200)
kmeans.fit(image)

clusters = np.asarray(kmeans.cluster_centers_,dtype=np.uint8)
labels = np.asarray(kmeans.labels_,dtype=np.uint8)
labels = labels.reshape(row,cols);

print(clusters.shape)
np.save('codebook_test.npy',clusters)
io.imsave('compressed_test.jpeg',labels)

五. DBSCAN算法
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法。与划分和层次聚类方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在噪声的空间数据库中发现任意形状的聚类。
5.1 基本概念

  • 核心对象:若某个点的密度达到算法设定的阈值则其为核心点
    (即r领域内点的数量不小于minPts(阈值))
  • ∈ - 领域的距离阈值:设定的半径r
  • 直接密度可达:若某点p在点q的r领域内,且q是核心点则p - q直接密度可达
  • 密度可达:若有一个点的序列q0、q1、…、qk,对任意qi ~ qi-1是密度可达的,则称从q0到qk密度可达,这实际上是直接密度可达的“传播”。
  • 密度相连:若从某核心点p出发,点q和点k都是密度可达的,则称点q和点k是密度相连
  • 边界点:属于某一个类的非核心点,不能发展下线了
  • 噪声点:不属于任意一个簇的点,从任何一个核心点出发都是密度不可达的

5.2 图形基本概念

  • A:核心对象
  • B,C:边界点
  • N:离群点
    机器学习中的算法-聚类算法_第3张图片
    六. DBSCAN算法工作流程
    6.1 工作流程
  • 参数D:输入数据集
  • 参数∈:设定的半径r
  • MinPts:密度阈值
    机器学习中的算法-聚类算法_第4张图片
    6.2 参数选择
  • 半径∈,可以根据K距离来设定:找突破点
    K距离:给定数据集P={p(i);i=0,1,…,n}计算点P(i)到集合D的子集S中所有点之间的距离,距离按照从小到大的顺序排序,d(k)就被称为k-距离
  • MinPts:k-距离中k的值,一般取的小一些,多次尝试

6.3 优劣势
优势:

  • 不需要指定簇个数
  • 可以发现任意形状的簇
  • 擅长找到离群点(检测任务)
  • 两个参数就够了

劣势:

  • 高维数据有些困难(可以降维)
  • 参数难以选择(参数对结果的影响非常大)
  • Sklearn中效率很慢(数据削减策略)

机器学习中的算法-聚类算法_第5张图片
6.3 DBSCAN可视化展示
https://www.naftaliharris.com/blog/visualizing-dbscan-clustering/

你可能感兴趣的:(K-MEANS,DBSCAN)