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

  1. D中随机选择K个样本作为初始均值向量
  2. repeat
  3. 计算样本中每一个向量与各个初始向量的距离,并依此分类,得到新的K个簇
  4. 根据新的K个簇计算新的K个均值向量
  5. until 当前均值向量未更新
  6. 输出:簇划分

缺点

学习向量量化LVQ

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

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

  1. InputD = {(X1,y1),(X2,y2),...,(Xm,ym)},
  2. 原型向量个数q,各个原型向量预设的类别标记{t1,t2,t3,..,tq},
  3. 学习率yita属于(0,1)
  4. 初始化一组原型向量(随机)
  5. repeat
  6. 从样本集中选取一个样本并计算与最近的原型向量之间的距离
  7. if yi == ti then
  8. 原型向量P' = Pi + yita * (xj - Pi)
  9. else
  10. 原型向量P' = Pi - yita * (xj - Pi)
  11. 更新PiP
  12. until 满足停止条件(最大迭代次数、原型向量更新小or不更新)
  13. 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.平均相异度(平均距离)

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

缺点:

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

ML_Clustering的更多相关文章

随机推荐

  1. 记录PHP的执行时间

    网上不少误导信息,实际上这个答案在PHP源码中的Zend文件夹下bench.php是有的 在此纠正下网络上复制粘贴造成的错误.希望后来人少踩点坑. function getmicrotime() { ...

  2. spring(spring mvc)整合WebSocket案例(获取请求参数)

    开发环境(最低版本):spring 4.0+java7+tomcat7.0.47+sockjs 前端页面要引入: <script src="http://cdn.jsdelivr.ne ...

  3. 使用Spark进行搜狗日志分析实例——统计每个小时的搜索量

    package sogolog import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  4. spring中基于JDK和CGLIB代理在项目的应用

    一.环境与问题 环境 spring boot的版本是1.2.1.RELEASE.JDK版本是1.7 问题 ​ A服务 PeopleService 调用B服务 HelloService ,其中B服务的方 ...

  5. clusterware启动顺序——CSS

    CSS层面 1.ocssd.bin守护进程 该层面最主要的工作就是启动ocssd.bin守护进程.使本地节点能够成功地加入集群.ocssd.bin守护进程的启动过程可以通过以下的图形进行描述. ::: ...

  6. Python常用数据类型

    一 .列表 name = ['zhangshan', 'lishi', 'wangwu']# 列表赋值 name.append('liujun')# 增,默认增加到最后位置 name.insert(1 ...

  7. Qt5.7.0移植到4412

    搞了几天,终于把Qt5.7移植到4412上,下面是一些自己移植过程中的记录,希望能帮到其他人. 一.需要下载的文件, 下载qt5.7源码qt-everywhere-opensource-src-5.7 ...

  8. cv2.findContours

    Layout of the output array image is incompatible with cv::Mat (step[ndims-1] != elemsize or step[1] ...

  9. oracle 建表默认空间

    oralce 建表后会有默认表空间,如果没有指定表空间会把所有信息放到users表空间内.要改默认空间 ,首先当前用户要有权限,然后按照 alter database 表名 tablespace 表空 ...

  10. centos 7 安装

    一直很喜欢centos,5.6.7三个大版本都有用过. 这次重新在笔记本上安装centos 7. 先是下载了最新的unetbootin,用它来制作了U盘安装.unetbootin很好用,可以自动下载然 ...