聚类

聚类任务

背景

在无监督学习(密度估计、异常检测等)中,训练样本的标记信息是未知的(即不人为指定),旨在发现数据之间的内在联系和规律,为进一步的数据分析提供基础。
此类学习任务中研究最多、应用最广的是聚类。

定义

聚类将数据集中的样本划分为若干个通常是不相交(有的时候会相交)的子集(簇,也叫类),即将样本分类,但是分类后得到的簇的标记是未指定的,这里需要使用者自行定义。

作用

聚类既能作为一个单独过程,用于寻找数据内在的分布结构,可以作为分类等其他学习任务的前驱过程。
主要概括起来,就是寻找数据内在的规律和联系,进行整合,分类,得到的一些数据集(类)。

性能度量(有效性指标)

类似于监督性学习的性能度量。

聚类理想情况就是,簇内相似度高,簇间相似度低。

聚类的性能度量大致有两类,分为外部指标(具有参考模型)和内部指标(直接考察聚类结果)。

外部指标举例的话,比如给你一群人的特征,一种理想情况就是聚类为男|女。

外部指标

书上根据上面的数据给出了如下四个式子

其中 第一个S 表示C中属于相同簇, D 表示C中不属于相同簇, 第二个S 表示 C∗ C^*中属于相同簇,D表示 C∗ C^*中不属于相同簇。
很明显,只有这四种情况,所有得出 a + b + c + d = m (m - 1) / 2,其中m (m - 1) / 2 为所有数据两两相对的情况数。
基于上面的四个式子可以导出下面这些常用的聚类性能度量外部指标:

  • Jaccard系数(JC)

    JC=aa+b+c

    JC = \frac{a}{a + b + c}

  • FM指数(FMI)
    FMI=aa+b⋅aa+c−−−−−−−−−−√

    FMI = \sqrt{\frac{a}{a + b} · \frac{a}{a + c}}

  • Rand指数(RI)
    RI=2(a+d)m(m−1)

    RI = \frac{2(a + d)}{m(m - 1)}

显然,上述的三个性能度量的结果值均在[0, 1]区间,值越大越好。

内部指标

接着,又能得出下面这四个式子(基于样本之间的距离dist来得出: avg簇内平均,diam簇内最远,min簇间最近,cen簇间中心点间的距离)

基于上面四个式子,我们可以导出下面这些常用的聚类性能度量的内部指标

  • DB指数(DBI)

    DBI=1k∑i=1kmaxj≠i(avg(Ci)+avg(Cj)dcen(ui,uj))

    DBI = \frac{1}{k} \sum\limits_{i=1}^k \max\limits_{j \neq i}(\frac{avg(C_i) + avg(C_j)}{d_{cen}(u_i, u_j)})

分析可知,上式求得的就是簇之间两两比较,计算出二个簇的平均距离之和除以二个簇之间的中心距离,取最大值,并求和,最后得出的结果代表着簇间相似度,为什么呢?
这里就要说一下,dist,是一个函数,能够计算二个样本之间的距离,那么,这个得出的距离是什么呢?就是二者的相似性,距离越大,代表相似性越低,差异性越高,那么,cen就代表着二个簇之间的相似性,越小越相似,即上述式子就越大。
但是为什么是簇间相似度而不是簇内相似度,他计算的是cen簇内中间距离,得出的是二个簇之间的相似度。

  • Dunn指数(DI)

    DI=min1⩽i⩽k{minj≠i(dmin(Ci,Cj)max1⩽l⩽kdiam(Cl))}

    DI = \min\limits_{1 \leqslant i \leqslant k} \{ \min\limits_{j \neq i} (\frac{d_{min}(C_i, C_j)}{\max_{1 \leqslant l \leqslant k}diam(C_l)}) \}

类似于DBI的分析,也可以得出DI代表的是簇内相似度,比较的是diam簇内最远。

综上所述,DBI越小越号,DI越大越好(不懂分子那里为什么)。

距离计算

这里主要说的就是上面说的dist函数,若他是一个距离度量,则需满足一些基本性质

  • 非负性(即算出的差异性不能为负数)

    dist(xi,xj)⩽0

    dist(x_i, x_j) \leqslant 0

  • 同一性(即自己跟自己距离要为0)
    dist(xi,xj)=0当且仅当xi=xj

    dist(x_i, x_j) = 0 当且仅当x_i = x_j

  • 对称性(即二点之间距离从这走和从对面走是一样的)
    dist(xi,xj)=dist(xj,xi)

    dist(x_i, x_j) = dist(x_j, x_i)

  • 直递性(三角不等式)
    dist(xi,xj)⩽dist(xi,xk)+dist(xk,xj)

    dist(x_i, x_j) \leqslant dist(x_i, x_k) + dist(x_k, x_j)

闵可夫斯基距离(MinkovDM)

预备知识:范数

distmk(xi,xj)=(∑u=1n|xui−xju|p)1p

dist_{mk}(x_i, x_j) = (\sum\limits_{u=1}^n |{x_{ui}} - x_{ju}|^p)^{\frac{1}{p}}

上面这个式子就是范数 ||xi−xj||p ||x_i - x_j||_p

当p=2时,计算的就是欧式距离。
当p=1时,计算的就是曼哈顿距离(街区距离)。

属性分为连续属性(数值属性)和离散属性(列名属性),连续属性一般为有序属性,离散属性一般为无序属性,闵可夫斯基距离可用于有序属性的计算, 如果需要对无序属性进行计算,则需要使用VDM。

VDM(不同值的标量)


看到这里,感觉就是在计算二个值(a,b)在不同簇被引用的比例。
接着,我们就可以使用以下这些小连招- -,处理混合属性的时候

有的时候,距离度量可能不满足直递性,这样的距离成为非度量距离。

原型聚类(基于原型的聚类)

此类算法假设聚类结构能通过一组原型刻画,在现实聚类任务中极为常用。

原理

先对原型进行初始化,然后对原型进行迭代更新求解,采用不同的原型表示、不同的求解方式,将产生不同的算法。

k均值算法(kmeans)


算法流程

kmeans(X,k)

idx = kmeans(X,k)
idx = kmeans(X,k,Name,Value)
[idx,C] = kmeans(_)
[idx,C,sumd] = kmeans(_)
[idx,C,sumd,D] = kmeans(_)
X :N*P的数据矩阵
K: 表示将X划分为几类,为整数
Idx :N*1的向量,存储的是每个点的聚类标号
C: K*P的矩阵,存储的是K个聚类质心位置
sumd 1*K的和向量,存储的是类间所有点与该类质心点距离之和
D N*K的矩阵,存储的是每个点与所有质心的距离
[…]=Kmeans(…,’Param1’,Val1,’Param2’,Val2,…)
这其中的参数Param1、Param2等,主要可以设置为如下:

  1. ‘Distance’(距离度量)
    ‘sqEuclidean’ 欧式距离(默认时,采用此距离方式)
    ‘cityblock’ 绝度误差和,又称:L1
    ‘cosine’ 针对向量
    ‘correlation’ 针对有时序关系的值
    ‘Hamming’ 只针对二进制数据
  2. ‘Start’(初始质心位置选择方法)
    ‘sample’ 从X中随机选取K个质心点
    ‘uniform’ 根据X的分布范围均匀的随机生成K个质心
    ‘cluster’ 初始聚类阶段随机选择10%的X的子样本(此方法初始使用’sample’方法)
    matrix 提供一K*P的矩阵,作为初始质心位置集合
  3. ‘Replicates’(聚类重复次数)
    整数
%第一类数据
mu1=[0 0 0];  %均值
S1=[0.3 0 0;0 0.35 0;0 0 0.3];  %协方差
data1=mvnrnd(mu1,S1,100);   %产生高斯分布数据%%第二类数据
mu2=[1.25 1.25 1.25];
S2=[0.3 0 0;0 0.35 0;0 0 0.3];
data2=mvnrnd(mu2,S2,100);%第三个类数据
mu3=[-1.25 1.25 -1.25];
S3=[0.3 0 0;0 0.35 0;0 0 0.3];
data3=mvnrnd(mu3,S3,100);%显示数据
figure, hold on;
plot3(data1(:,1),data1(:,2),data1(:,3),'b+');
hold on;
plot3(data2(:,1),data2(:,2),data2(:,3),'r+');
plot3(data3(:,1),data3(:,2),data3(:,3),'g+');
grid on;%三类数据合成一个不带标号的数据类
data=[data1;data2;data3];   %这里的data是不带标号的,即没有分好类k = 3;
[idx, c] = kmeans(data, k); %分成3份figure, hold on;
for i=1:300if idx(i) == 1plot3(data(i,1),data(i,2),data(i,3), 'b+');elseif idx(i) == 2plot3(data(i,1),data(i,2),data(i,3), 'r+');elseplot3(data(i,1),data(i,2),data(i,3), 'g+');end
end
for i=1:kplot3(c(i, 1), c(i, 2), c(i, 3), 'ko'); % 画出中心点
end
grid on;
  • 输入:
  • 输出:

图中原点就是簇的中心。

附赠一个plot的point style 图

学习向量量化(LVQ)

与k均值算法类似,LVQ也是基于原型的聚类,但与一般的不同,LVQ假设数据样本带有类别标记,学习过程利用样本的这些监督信息来辅助聚类。
这个是用来建立神经网络的- -。

算法描述

newlvq(P,S1,PC,LR,LF) 建立LVQ向量化神经网络

P为一个Rx2维的网络输入向量取值范围的矩阵[Pmin Pmax];
Sl表示隐含层神经元的数目;
PC表示在第二层的权值中列所属类别的百分比;
LR表示学习速率,默认值为0.01;
Lf表示学习函数,默认值为learnlv1。

P = [-3 -2 -2  0  0  0  0 +2 +2 +3; ...0 +1 -1 +2 +1 -1 -2 +1 -1  0];
Tc = [1 1 1 2 2 2 2 1 1 1];
T = ind2vec(Tc);
net = newlvq(P,4,[.6 .4]);
net = train(net,P,T);
  • 输入:
  • 输出:

高斯混合聚类(EM算法)

利用概率模型来表达聚类原型。

这个算法会算法每个样本可能在每个簇的概率。

算法流程

%第一类数据
mu1=[0 0 0];  %均值
S1=[0.3 0 0;0 0.35 0;0 0 0.3];  %协方差
data1=mvnrnd(mu1,S1,100);   %产生高斯分布数据%%第二类数据
mu2=[1.25 1.25 1.25];
S2=[0.3 0 0;0 0.35 0;0 0 0.3];
data2=mvnrnd(mu2,S2,100);%第三个类数据
mu3=[-1.25 1.25 -1.25];
S3=[0.3 0 0;0 0.35 0;0 0 0.3];
data3=mvnrnd(mu3,S3,100);%显示数据
figure, hold on;
plot3(data1(:,1),data1(:,2),data1(:,3),'b+');
hold on;
plot3(data2(:,1),data2(:,2),data2(:,3),'r+');
plot3(data3(:,1),data3(:,2),data3(:,3),'g+');
grid on;%三类数据合成一个不带标号的数据类
data=[data1;data2;data3];   %这里的data是不带标号的,即没有分好类k = 3;
[px, model] = gmm(data, k); %分成3份figure, hold on;
for i=1:300[m, idx] = max(px(i, :));if idx == 1plot3(data(i,1),data(i,2),data(i,3), 'b+');elseif idx == 2plot3(data(i,1),data(i,2),data(i,3), 'r+');elseplot3(data(i,1),data(i,2),data(i,3), 'g+');end
end
c = model.Miu;
for i=1:kplot3(c(i, 1), c(i, 2), c(i, 3), 'ko'); % 画出中心点
end
grid on;
  • 输入:
  • 输出:

密度聚类(基于密度的聚类)

此类算法假设聚类结构能通过样本分布的紧密程度确定。

原理

从样本密度的角度来考察样本之间的可连接性,并基于可连接样本不断扩展聚类簇以获得最终的聚类结果。

DBSCAN


基于上面的条件,这个算法给出了下面几个概念

算法流程

层次聚类

层次聚类视图在不同层次对数据集进行划分,从而形成属性的聚类结构。
数据集的划分可以采用自底向上的聚合策略,也可采用自顶向下的分拆策略。

AGNES

AGNES是采用自底向上聚合策略的层次聚类算法。
算法流程

clusterdata(X, cutoff)
X = [gallery('uniformdata',[10 3],12);...gallery('uniformdata',[10 3],13)+1.2;...gallery('uniformdata',[10 3],14)+2.5];
subplot(1, 2, 1), plot3(X(:, 1), X(:, 2), X(:, 3), '*');
grid on;
T = clusterdata(X,'maxclust',3);
subplot(1, 2, 2), scatter3(X(:,1),X(:,2),X(:,3),100,T,'filled');
  • 输入:
  • 输出:

机器学习-学习笔记 聚类相关推荐

  1. 机器学习学习笔记(一)绪论

    机器学习学习笔记(一)绪论 声明在开头:本篇文章主要是针对周志华教授的<机器学习>的学习心得. A. 机器学习初见 ArthurArthurArthur SamuelSamuelSamue ...

  2. 吴恩达机器学习学习笔记第七章:逻辑回归

    分类Classification分为正类和负类 (规定谁是正谁是负无所谓) 吴恩达老师举例几个例子:判断邮箱是否是垃圾邮箱 一个在线交易是否是诈骗 一个肿瘤是良性的还是恶性 如果我们用之前学习的lin ...

  3. R语言与机器学习学习笔记(分类算法)

    转载自:http://www.itongji.cn/article/0P534092014.html 人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经 ...

  4. 【机器学习笔记】可解释机器学习-学习笔记 Interpretable Machine Learning (Deep Learning)

    [机器学习笔记]可解释机器学习-学习笔记 Interpretable Machine Learning (Deep Learning) 目录 [机器学习笔记]可解释机器学习-学习笔记 Interpre ...

  5. 天池龙珠训练营-机器学习学习笔记-03 LightGBM 分类

    天池龙珠训练营-机器学习学习笔记-03 LightGBM 分类 本学习笔记为阿里云天池龙珠计划机器学习训练营的学习内容,学习链接为:训练营 一 原理简介: 它是一款基于GBDT(梯度提升决策树)算法的 ...

  6. 机器学习学习笔记(13)----岭回归(Ridge回归)

    在<机器学习学习笔记(4)----线性回归的数学解析>,我们通过计算线性模型的损失函数的梯度,得到使得损失函数为最小值的的解析解,被称之为普通最小二乘法:    (1) 公式(1)能够求得 ...

  7. 【机器学习-学习笔记】吴恩达老师机器学习课的笔记(黄海广博士)

    吴恩达老师机器学习课的笔记github地址:https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes,黄海广博士原创,黄海广博士也是这门课的最初翻译 ...

  8. 在.NET Core下的机器学习--学习笔记

    摘要 .NET Core 在机器学习的应用场景,除了 ML .NET 还会介绍一个非常棒的開源技術 TensorFlow .NET , Keras .NET. 讲师介绍 本课内容 人工智能介绍 ML ...

  9. “张量网络压缩感知(TNCS)与无监督机器学习”学习笔记

    TNCS学习笔记 一.前情小故事 二.张量网络压缩感知(TNCS) 如何构造和优化∣ψ⟩\left| \psi \right\rangle∣ψ⟩ 如何通过在∣ψ⟩\left| \psi \right\ ...

最新文章

  1. MySQL语句第二高的薪水查询
  2. LeetCode OJ -Happy Number
  3. [SAP PI]ECC系统接收财务凭证IDoc的配置步骤(总账 应收 应付)
  4. HR--上载信息类型的长文本的样例代码
  5. 小红书重拳治理虚假种草 再起诉3家通告平台、MCN机构
  6. 计算机九大核心课程,九大变化,透析IB(国际文凭)课程发展趋势
  7. Python安装以及简单使用
  8. OpenCV4学习笔记(27)——轮廓的最大内接圆
  9. 2023北京邮电大学计算机考研信息汇总
  10. HDU - 3966 树链刨分
  11. 上知天文,下知地理,还能替人写脚本!人工智能的进阶ChatGPT
  12. 为什么iPhone 12 中国版不支持5G毫米波?
  13. 用技术赋能城市管理,景联文科技提供城市治理多场景数据采集服务!
  14. 定时轮播Echarts造成内存泄漏致使浏览器崩溃问题
  15. ipad文件APP连接服务器,是时候认识一下 iPad 的文件管理了
  16. 群晖 使用SMB3进行局域网传输双倍叠加网速下踩的一些坑
  17. 使用易语言实现远程CALL调用
  18. linux下使用代理加速下载方案集合
  19. 计算机程序的灵魂,如何理解算法是程序设计的灵魂
  20. 程序员500字年终总结

热门文章

  1. 天梯赛 L2 列车调度
  2. 电骡(eMule)中文版 - NAT原理简介及各种路由器的端口映射方法
  3. 一个C语言源程序是如何到一个可执行程序的
  4. 网易狼人杀维护服务器,《狼人杀-官方正版》06月10日维护公告
  5. 笔记-7:文件和数据格式化
  6. 【NOIP模拟】玛雅文字
  7. js判断鼠标双击单击
  8. 1.工厂模式获取服务实例
  9. 系统设计——操作日志
  10. csdn 怎么 找到 草稿箱