机器学习:聚类

无监督机器学习

有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)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值