kmeans matlab 离散度_聚类算法_层次聚类_密度聚类(dbscan,meanshift)_划分聚类(Kmeans)详解...

97731367c5066edd093b9e77aeaf50d2.png

注: 两整天的成果,谬误之处勿喷

1 聚类概述

样本 - 没有训练的样本 - 没有标注的样本

1.1 相似度度量

1.1.1 距离相似度度量

  • 距离度量 $dist(o_{i},o_{j})$
    • 欧式距离
  • 距离相似度度量 $$sim(o_{i},o_{j})= frac{1}{1+dist(o_{i},o_{j})}$$

1.1.2 密度相似性

  • 体现的内涵:
    • (1)数据结构特性
    • (2)数据结构特性相似
  • 密度: 单位空间内对象的个数
  • 密度相似度定义: 设$c_{i},c_{j}点的密度为d_{i},d_{j}$ $$density(c_{i},c_{j})=|d_{i}-d_{j}|$$

1.1.3 连通相似性

  • 定义:
    • 数据集用图表示, 节点是对象,边线是关系
    • 簇定义为图的连接分支

1.1.4 概念相似性独立

  • 语义的相似性

1.2 质量评价指标

  • 内部质量评价标准
    • CH指标
      • 簇间距离和簇内距离的比值
      • CH指标值越大 效果越高
  • 外部质量评价标准
    • 纯度:取值范围小于1,越大越好

1.3 常用的聚类方法

1.3.1 按照聚类的度量

  • 基于距离的聚类算法
  • 基于密度的聚类算法
  • 基于互连性的聚类算法

1.3.2 基于分析方法的思路

  • 划分法:
  • 层次法:
  • 密度法:
  • 网格法
  • 模型法

2 层次聚类算法

2.1 层次聚类算法概述

- 自顶向下:divisive
- 自底向上:agglomerrative
- 可以用树状图或者嵌套图表示
- 类间距离度量:
    - 最短距离:最大相似度
    - 最长距离:最小相似度
    - 平均距离
    - 中心点距离

2.2 diana算法

2.2.1 diana算法简介

自顶向下分裂

  • 输入: 包含n个点(对象)的数据集,簇的数目k。
  • 输出: k个簇,达到终止条件规定簇数目

度量方法 - 簇的直径:在一个簇中的任意两个数据点的距离中的最大值 - 平均相异度(平均距离)

```伪代码 将所有对象整个当成一个初始簇; 将splinter group和old party两个对象集合置为空; for (i=1; i≠k; i++) { 在所有簇中挑出具有最大直径的簇C; 找出C中与其他点平均相异度最大的一个点p;【离群点】 把p放入splinter group,剩余的点放在old party中; do【离群点的吸引力】 { 在old party里找出到splinter group中点的最近距离不大于到old party 中点的最近距离的点; 将该点加入splinter group; } until (没有新的old party的点被分配给splinter group); splinter group和old party为被选中的簇分裂成的两个簇,与其他簇一起 组成新的簇集合; }

## 2.2 agnes算法
### 2.2.1 agnes算法简介
*自底向上凝聚*

```伪代码
输入: 包含n个点(对象)的数据集,簇的数目k。
输出: k个簇,达到终止条件规定簇数目。
方法: 其过程描述如下:
将每个点当成一个初始簇;
do
{ 根据两个簇中最近的数据点找到最近的两个簇;
合并两个簇,生成新的簇的集合;
} until (达到定义的簇的数目);

2.3 算法优缺点总结

  • 简单,理解容易
  • 合并点/分裂点选择不太容易
  • 合并/分类的操作不能进行撤销
  • 大数据集不太适合
  • 执行效率较低O(t*n2), t为迭代次数, n为样本点数。

3 划分法

指定的聚类的数目和目标,通过反复迭代来进行优化

3.1 K-均值

对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大

3.3.1 K-均值聚类步骤

  • 1.随机的选取K个中心点,代表K个类别;
  • 2.计算N个样本点和K个中心点之间的欧氏距离;
  • 3.将每个样本点划分到最近的(欧氏距离最小的)中心点类别中——迭代1;
  • 4.计算每个类别中样本点的均值,得到K个均值,将K个均值作为新的中心点——迭代2;
  • 5.重复步骤2、3、4;
  • 6.满足收敛条件后,得到收敛后的K个中心点(中心点不再变化)

3.1.2 K值的选择

:引用自易学智能 - 可视化数据,通过观察数据的聚合程度判断K值 - K ≈ sqrt(N/2) - 拐点法:把聚类结果的F-test值(类间Variance和全局Variance的比值)对聚类个数的曲线画出来,选择图中拐点 - Silhouette法 - 交叉验证 - 核方法:构造Kernal矩阵,对其做eigenvalue decomposition,通过结果统计Compactness,获得Compactness—K曲线,选择拐点

3.1.3 代码实现

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.datasets.samples_generator import make_blobs
X, y_true = mak
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值