机器学习:聚类

本文详细介绍了无监督机器学习中的聚类方法,包括K-Means的原理、改进版如K-Medoids、二分K-Means和K-Means++,以及DBSCAN等密度聚类算法。通过理解相似性和聚类原则,展示了如何对大量未标注数据进行有效划分。
摘要由CSDN通过智能技术生成

无监督机器学习

有X

没有Y

利用X相似性

聚类

对大量未标注的数据集,按内在相似性划分为多个类别,类别内相似度大,类之间相似度小

相似度

在这里插入图片描述
在这里插入图片描述

聚类

本质上,N个样本,映射到K个簇中

每个簇至少有一个样本

一般情况下,一个样本只属于一个簇(也有一个样样本属于多个簇的)

最基本:

先给定一个初始划分,迭代改变样本和簇的隶属关系,每次都比前一次好

聚类是一种无监督的机器学习任务,它可以自动将数据划分成类cluster。因此聚类分组不需要提前被告知所划分的组应该是什么样子的。因为我们甚至可能都不知道我们再寻找什么,所以聚类是用于知识发现而不是预测
在这里插入图片描述

聚类原则

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

K-Means聚类

K-均值算法是发现给定数据集的k个簇的算法,簇个数是用户给定的,每一个簇通过其质心(centroid)即簇中所有点的中心来描述。
K-均值算法的流程:
(1)对于输入样本集 {x1,x2,…,xm},随机确定k个质心 {μ1,μ2,…,μk};
(2)计算每个样本xj到各个质心μi的欧式距离:dji=||xj-μi||2;
(3)根据距离最近的μ确定样本xj的簇标记:labelj=arg minidji;
(4)循环将数据集中的每个样本分配到各个簇中(染色),每个簇的样本数量为N1,N2,…,Nk;
(5)更新每个簇的质心的位置,为该簇所有样本的均值;
(6)重复上述步骤(染色分配-移动质心-重新染色-再次移动…),直到所有的质心均不再更新;或者达到设定的某个终止条件,如最大迭代次数、最小调整幅度阈值、最小平方误差MSE等。
在这里插入图片描述
举例子
先验知识:
在这里插入图片描述

K-Means 改进

K-Mediods

数组1,2,3,4,100的均值为22, 其实求均值的话,离里面大多数的值还是比较远的

取中位数的话是3, 更好一些, 因为100可能是噪声

二分K-Means

为了克服K-means算法容易收敛于局部极小值的问题,可以使用bisecting K-means算法弱化随机初始质心的影响。

K-means++算法的流程是:
 
 	(1)将所有的样本作为一个簇
 
 	(2)根据某种规则将该簇一分为二
 
 	(3)选择其中一个簇继续划分,直到达到停止条件(聚簇数量、迭代次数、最小SSE等)。

选择划分聚簇的规则一般有两种:

	(1)选择样本量最大的簇进行划分;

	(2)选择SSE值最大的簇进行划分。

在这里插入图片描述

K-Means++

K-means++算法可以解决K-means对初始质心比较敏感的问题,算法的区别主要在于选择的初始k个质心的之间的相互距离要尽可能的远。

K-means++算法的流程是:

    (1)从数据集中随机选择一个样本作为第一个质心;

    (2)对数据集中的每个样本,计算它到所有已有质心的距离的总和D(x);

    (3)采用线性概率选择出下一个聚类中心点,即D(x)较大的点成为新增质心的概率较大;

    (4)重复步骤2直到找到k个聚类中心点

    (5)使用得到的k个质心作为初始化质心运行K-means算法。



K-means++算法的缺点:

    (1)有可能选中离群点作为质心;

    (2)计算距离质心最远的点的开销比较大;

    (3)由于质心的选择过程中的内在有序性(第k个质心的选择依赖前k-1个质心的值),
    	在扩展方面存在着性能问题。

在这里插入图片描述

Mini Batch K-Means

Mini Batch K-means算法是K-means算法的一种优化变种,采用随机抽取的小规模数据子集训练算法,减少计算时间,同时试图优化目标函数。Mini Batch K-means算法可以减少K-means算法的收敛时间,而且产生的结果一般只略差于K-means算法。

算法步骤如下:

    (1)首先抽取数据集部分样本,使用K-means构建出k个质心的模型;

    (2)继续抽取数据集中的部分样本,将其添加到模型中,分别分配给距离最近的质心;

    (3)更新质心的位置;

    (4)循环迭代(2、3)步操作,直到质心稳定或者达到指定迭代次数,停止计算。

效果:
在这里插入图片描述

K-Means可以的优化参数

选择适当的K值

在这里插入图片描述

聚类的“相对误差”

聚类中,error是用MSE算出来的

K均值损失函数

在这里插入图片描述

求偏导

在这里插入图片描述

K的选择

K = N, MSE 为 0

K = 1, MSE就是原始数据的方差

选择一开始下降速度快,后来下降速度慢的

elbow method, 不止于K均值

不同的K:
在这里插入图片描述

Canopy聚类

Canopy属于一种‘粗’聚类算法,即使用一种简单、快捷的距离计算方法将数据集分为若干可重叠的子集canopy,这种算法不需要指定k值、但精度较低,可以结合K-means算法一起使用:先由Canopy算法进行粗聚类得到k个质心,再使用K-means算法进行聚类。

Canopy算法步骤如下:

    (1)将原始样本集随机排列成样本列表L=[x1,x2,...,xm](排列好后不再更改),根据先验知识或
    		交叉验证调参设定初始距离阈值T1、T2,且T1>T2 。

    (2)从列表L中随机选取一个样本P作为第一个canopy的质心,并将P从列表中删除。

    (3)从列表L中随机选取一个样本Q,计算Q到所有质心的距离,考察其中最小的距离D:

                如果D≤T1,则给Q一个弱标记,表示Q属于该canopy,并将Q加入其中;

                如果D≤T2,则给Q一个强标记,表示Q属于该canopy,且和质心非常接近,
                所以将该canopy的质心设为所有强标记样本的中心位置,并将Q从列表L中删除;

                如果D>T1,则Q形成一个新的聚簇,并将Q从列表L中删除。

    (4)重复第三步直到列表L中元素个数为零。

在这里插入图片描述

注意:

   (1)‘粗’距离计算的选择对canopy的分布非常重要,如选择其中某个属性、其他外部属性、欧式距离等。

   (2)当T2<D≤T1时,样本不会从列表中被删除,而是继续参与下一轮迭代,直到成为新的质心
   		或者某个canopy的强标记成员。

   (3)T1、T2的取值影响canopy的重叠率及粒度:当T1过大时,会使样本属于多个canopy,
   		各个canopy间区别不明显;当T2过大时,会减少canopy个数,而当T2过小时,会增加
   		canopy个数,同时增加计算时间。

   (4)canopy之间可能存在重叠的情况,但是不会存在某个样本不属于任何canopy的情况。

   (5)Canopy算法可以消除孤立点,即删除包含样本数目较少的canopy,往往这些canopy包含的是
   		孤立点或噪音点。

层次聚类

理解起来有点像无监督的决策树

分裂的层次聚类: DIANA

步骤:
    (1)把原始数据集去不断的分裂
    (2)然后去计算每个子数据集里面的相似性
    (3)再不断的分裂,把数据集分为很多的类别

凝聚的层次聚类: AGNES

步骤:
    (1)把一个个样本,不断的自底向上的聚类
    (2)然后一层一层的来聚
    (3)最后聚成一个完整的数据集

如果我们只关心结果的话,那么在某一时刻是要停止聚类的,在一些数据集中做层次聚类是合适的,包含层次的数据集! 地域!
在这里插入图片描述
如果两个样本,可以很好的度量距离,如果已经聚了一层,如何度量簇之间的相似性

最小距离:两个簇中,最接近样本的距离,城市和城市边界最短距离,成链状一条直线了

最大距离:两个簇中,最远的样本的距离,某一个簇存在异常值就很麻烦,簇本身比较狭长

平均距离:

两两样本距离的平均

两两样本距离的平方和

密度聚类

统计样本周边的密度,把密度给定一个阈值,不断的把样本添加到最近的簇

人口密度,根据密度,聚类出城市

解决类似圆形的K-Means聚类的缺点,密度聚类缺点计算复杂度大,空间索引来降低计算时间,降低查找速度
在这里插入图片描述

DBSCAN

在这里插入图片描述

密度可达

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

谱和谱聚类

谱: Y = A*X, 矩阵X乘以A等于对矩阵X做了空间线性变换,那么Y=map[X], A就是map这个线性算子,它的所有特征值的全体,称之为方阵的谱

方阵的谱半径为最大的特征值

谱聚类是一种基于图论的聚类方式,通过对样本数据的拉普拉斯矩阵的特征向量进行聚类,从而达到对样本数据进行聚类的目的

谱聚类

在这里插入图片描述

L矩阵是N*N的,N是样本个数,实数形成的对数矩阵,求特征值和特征向量

L*ui = lambda i*ui, lambda是特征值,ui是特征向量,一组lambda有从大到小可以排序

每个对应的lambda都对应一个ui,每个ui是一个个的列向量,比如u11, u21, u31, un1

根据排序默认从小到大,逆序之后我们就取前面的几个ui列向量就可以了,其实这是一种降维

然后我们的前面的这几个列向量ui就成了新的对应每个样本的几个重要的特征

最后我们用K-Means聚类算法对样本进行聚类就好了

谱聚类和PCA的关系

就是Laplace矩阵做了一个主成分分析PCA,然后做K均值聚类

PCA降维

在这里插入图片描述

效果图

在这里插入图片描述

代码实现

DBSCAN - 基于密度的噪声应用空间聚类

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
import sklearn.datasets as ds
import matplotlib.colors
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler


def expand(a, b)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值