ML_Clustering

西瓜书学习。。。ing

K均值 k-means

给定样本集$ D = {X_1,X_2,...X_n} \(,k-means针对聚类所得簇划分\)C = {C_1,C_2,...,C_k}$最小化平方误差

目标函数$ E = \sum\limits_{i=1}^{k} \sum\limits_{x \in C_i} |x - \mu_i|_2^2 $

其中$ \mu_i = \frac{1}{|C_i|} \sum_{x \in C_i} x $是簇的均值向量可见式(1.1)在一定程度刻画了簇内样本围绕簇均值的紧密程度,E越小簇内样本相似度越高

实现步骤

参数:K

从D中随机选择K个样本作为初始均值向量

repeat

计算样本中每一个向量与各个初始向量的距离,并依此分类,得到新的K个簇

根据新的K个簇计算新的K个均值向量

until 当前均值向量未更新

输出:簇划分

缺点

学习向量量化LVQ

类似K均值,LVQ也是通过试图找到一组原型向量来刻画聚类结构,不同点在于LVQ假设数据样本带有类别标记,因此在学习过程中利用样本的这些监督信息进行辅助聚类

给定$ D = {(X_1,y_1),(X_1,y_1),...,(X_m,y_m)} $,LVQ目标是学得一组n维原型向量,每个原型向量代表一个聚类簇

Input:D = {(X1,y1),(X2,y2),...,(Xm,ym)},
原型向量个数q,各个原型向量预设的类别标记{t1,t2,t3,..,tq},
学习率yita属于(0,1) 初始化一组原型向量(随机)
repeat
从样本集中选取一个样本并计算与最近的原型向量之间的距离
if yi == ti then
原型向量P' = Pi + yita * (xj - Pi)
else
原型向量P' = Pi - yita * (xj - Pi)
更新Pi为P’
until 满足停止条件(最大迭代次数、原型向量更新小or不更新) Output:原型向量

每轮迭代中,随机选取的训练样本若与最近的原型向量同标记,Pi向此样本靠近,反之远离

密度聚类

假设聚类结构能够通过样本分布的紧密程度确定,密度聚类算法从样本密度的角度来考察样本之间的可连接性,基于可连接样本不断扩展聚类簇以获得最终聚类结果

DBSCAN

基于一组邻域的参数(MinPts,\(\epsilon\))来刻画样本分布的紧密程度,给定数据集定义如下概念:

1.\(\epsilon\)-邻域:包括了样本集中与Xj距离不大于epsilon的样本

2.核心对象:Xj的\(\epsilon\)-邻域内至少包括Minpts个样本,则Xj为一个核心对象

3.密度直达:Xj位于Xi的\(\epsilon\)-邻域内则Xj可由Xi密度直达

4.密度可达:存在X1、X2、X3...Xn,X2可有X1密度直达,X3可有X2密度直达......有Xi+1有Xi密度直达,则Xn与X1密度可达

5.密度相连:存在Xk使得Xi、Xj均可由Xk密度可达,称Xi、Xj密度相连

于是DBSCAN将簇定义为:由密度可达得出的最大密度相连样本集合

层次聚类

在不同层次上对数据集进行划分,从而形成树形的聚类结构,可用“自底向上”或“自顶向下”。

AGNES

自底向上局策略的层次聚类算法,先将数据集中的每个样本看作一个初始聚类簇,然后再算法运行的每步中照道距离最近的两个聚类簇进行合并,过程重复直至达到预设的聚类簇的个数。

计算聚类簇之间的距离的方法包括了最小距离(两个簇的最近的样本)(单链接)、最大距离(最远)(全链接)、平均距离(所有样本共同决定)(均链接)等等。

先对仅含一个样本的初始聚类簇和相应的距离矩阵进行初始化,而后不断的合并距离最近的聚类簇,并更新合并得到的聚类簇的距离矩阵,重复直至预设的聚类簇数。

最终可得一个树状图(西瓜书P216 图9.12),每层链接一组聚类簇。

在树状图的特定层次上进行分割,可得到相应的簇划分结果。

缺点:

简单,但遇到合并点选择困难的情况,算法的复杂度为O(n的平方),不适合大数据集计算

DIANA

DIANA(Divisive Analysis)算法属于分裂的层次聚类,首先将所有的对象初始化到一个簇中,然后根据一些原则(比如最邻近的最大欧式距离),将该簇分类。直到到达用户指定的簇数目或者两个簇之间的距离超过了某个阈值

定义:

1.簇的直径:在一个簇中的任意两个数据点都有一个欧氏距离,这些距离中的最大值是簇的直径

2.平均相异度(平均距离)

Input:包含n个对象的数据库,终止条件簇的数目k
Output:k个簇,达到终止条件规定簇数目 将所有对象整个当成一个初始簇
for ( i=1;i<k;i++) Do Begin
在所有簇中挑选出具有最大直径的簇
把这个簇里与其他点平均相异度最大的一个点挑出来放进一个新的簇里
Repeat
在簇中剩余的点中找到 和新簇中点的最近距离 <= 和自身簇的最近距离的点
Until 再也没有会被分出去的点了
分裂成的两个簇,与其他簇一起组成新的簇集合
END

缺点:

已做的分裂操作不能撤销,类之间不能交换对象。如果在某步没有选择好分裂点,可能会导致低质量的聚类结果。大数据集不太适用。

上一篇:Linux----给一个普通用户root权限


下一篇:用 Span 对 C# 进程中三大内存区域进行统一访问