西瓜书学习。。。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

缺点:

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

ML_Clustering的更多相关文章

随机推荐

  1. IDEA中项目编码格式设置

    自从换成IntelliJ IDEA 之后各种设置就成了问题,这不,在跟另一家公司做对接的时候,他们说我这边的http接口返回的都是乱码, 所有的接口我这边的都是访问过的,这个怎么会,我用360浏览器和 ...

  2. java算法02 - 树

    树是一类重要的非线性结构.而二叉树是一种比较重要的树,接下来我们来了解二叉树的相关内容. 二叉搜索树:每个节点都不比它左子树的任意元素小,而且不比它的右子树的任意元素大. /** * 二叉搜索树 O( ...

  3. JSP学习(2)---四种基本语法与三种编译指令

    JSP的异常可以不处理,即使是checked异常. 四种基本语法: jsp声明,jsp注释,jsp表达式,jsp脚本 三种编译指令: page,include,taglib 下面是具体的练习. sho ...

  4. BluePrism初尝2

    在接近三周的自学中,初步体验到了RPA的甜头. 在对BP这个工具慢慢的深入接触中,从0 到1的探索式学习,从最开始的一个个的小功能模块的用途,每一个的属性的功能,到现在自己能初步尝试组织一些简单的流程 ...

  5. Problem A: 让动物们叫起来吧!

    Description Tom家里养了很多动物,比如有鸭子.火鸡和公鸡.它们的叫声都不相同.现在,请编写类Animal.Cock.Turkey和Duck,根据给出的main()函数及样例分析每个类的属 ...

  6. 移动端click事件无反应或反应慢 touchend事件页面滑动时频繁触发

    H5页面的点击事件click 无论在浏览器 iframe还是小程序里面 都会出现点击无反应或者反应慢的情况出现 所以决定用touchend事件来代替click 但是touchend事件触发比较灵敏 在 ...

  7. 日积月累——java虚拟机内存区域的划分

    看了博主“一杯凉茶”一篇对java内存详解的文章后,虚心学习,并记录下来 ,以便日后再来温故. 一,运行时数据区 1.程序计数器 当前线程所执行的字节码行号指示器,字节码解释器工作依赖计数器控制完成, ...

  8. python编程从入门到实践 alien invasion 项目源码

    现在上传一个 python编程从入门到实践 alien invasion 项目源码 以供大家学习参考 跟官方版本可能不太一样,因为是自己写的 也算是给新手一个参考 我用的环境是pycharm 可能需要 ...

  9. Python 从入门到实践 试一试 参考代码

    这两天学习Python 看了python从入门到实践的书籍,里面有课后题“试一试” 然后就跟着写了,代码在以下地址,如果需要自取 https://files.cnblogs.com/files/fud ...

  10. 微信小程序拒绝授权,反复调起原生授权框。

    最近堕落了,有一阵子没有更新博客园了.一是比较忙,其次也没什么好的题材和工作中的解决方案可以分享的,想想还是把罕见的反复调起原生小程序授权框的方案拿出来说说.   市面上常见的解决方案是第一次拒绝后, ...