1 Star 10 Fork 11

张亚飞/聚类算法

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

聚类算法

1. K-menas聚类

  • kmeans.py
  • kmeans-dbscan.ipynb

聚类概念: 无监督学习:无标签 聚类:相似的东西分到一组 难点:如何评估(没有目标值比较),如何调参(没有标准答案)

K-means算法:

  • K值:要得到簇的个数,需要指定

  • 质心:均值,即向量各维取平均即可

  • 距离的度量:常用欧几里得距离和余弦相似度(先标准化)

  • 优化目标:min(sum1,k:(sum(dis(ci,x)^2)) 每个样本点到簇中心点的距离之和最短

  • 工作流程:

    1.随机初始化K个点
    2.算样本中各个点到这K个点的距离,与距离最近者归为一类,共K类
    3.找出这K类中心点(质心:各维平均值)的位置
    4.重复第二步,直到计算得出的新中心点与原中心点的位置一样,结束

  • 优点:简单,快速,适合常规数据集
  • 劣势:K值难确定,复杂度与样本呈线性关系,很难发现任意形状的簇

k-means迭代可视化:https://www.naftaliharris.com/blog/visualizing-k-means-clustering/

2. DBscan聚类

  • DBscan聚类.py
  • DBscan聚类2.py
  • DBscan聚类3.py

dbscan(Density-Based Spatial Clustering of Applications with Noise)算法:

  • 核心对象:若某个点的密度达到算法设定的阈值则其为核心点*即r领域内点的数量不小于minPts)

  • 领域的距离阈值:设定的半径r

  • 直接密度可达:若某个点p在点q的r领域内,且q是核心点则p-q直接密度可达

  • 密度可达:若有一个点的序列q0,q1,...qk,对任意qi-qi-1是直接密度可达的,则称q0到qk密度可达,这实际上是直接密度可达的‘传播'.

  • 密度相连:若从某核心点P出发,点q和点k都是密度可达的,则称点q和点k是密度相连的

  • 边界点:属于某一个类的非核心点,不能发展下线了

  • 噪声点(离群点):不属于任何一个类簇的点,从任何一个核心点出发都是密度不可达的

  • 工作流程:参数D:输入数据集 参数r:指定半径 MinPts:密度阈值 > 1.标记所有对象为unvisited
    2.随机选择一个unvisted对象p
    3.标记p为visited
    4.如果p的r邻域至少有MinPts个对象,执行第五步,否则执行第6步
    5.创建一个新簇C,并把p添加到C;令N为p的r邻域中的对象集合;遍历N中每个点p,如果点p是unvisited,标记p为visited;如果p的r邻域至少有MinPts个对象,把这些对象添加到N;如果p还不是任何簇的成员,把p添加到C
    6.标记p为噪声
    7.重复执行步骤2,直到没有标记为unvisited对象

  • 参数选择:半径r:可以根据K距离设定;找突变点
    K距离:给定数据集P={p(i);i=0,1,..n},计算点p(i)到集合D的子集S中所有点之间的距离,距离按照从小到大的顺序排序,d(k)就被称为k-距离 MinPts:k-距离中k的值,一般取的小一些,多次尝试

  • 优势:不需要指定簇的个数
    可以发现任意形状的簇
    擅长找到离群点(检测任务)
    两个参数就够了
  • 劣势:高维数据有些困难(可以做降维) 参数难以选择(参数对结果的影响比较大) sklearn中效率很慢(数据削减策略)

dbscan可视化:https://www.naftaliharris.com/blog/visualizing-dbscan-clustering/

  • 注:若找离群点epsilon和minPoints可以小一些

3. AP聚类

  • AP聚类.py
  • sklearn_AP.py

https://www.cnblogs.com/zhangyafei/p/10630688.html

4. LPA聚类

  • LPA.py

标签传播聚类算法, 典型的半监督学习算法 - 核心思想:相似的数据应该具有相同的标签,构建节点间的相似性矩阵(边的权重)

5. 谱聚类算法

  • spectrual_clustering.py

核心思想:构建样本点的图,切分图,使得子图内权重最大,子图间权重最小

6. meanshift聚类算法

  • meanshify.py

核心思想: - 寻找核密度极值点并作为簇的质心,然后根据最近邻原则将样本点赋予质心

7. 高斯混合模型+EM算法

  • Gmm_em.py

核心思想: 以alpha(k)的概率选择第k个高斯模型,再以该高斯模型概率分布产生数据。其中alpha(k)就是隐变量

空文件

简介

取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/zhangyafeii/clustering_algorithm.git
git@gitee.com:zhangyafeii/clustering_algorithm.git
zhangyafeii
clustering_algorithm
聚类算法
master

搜索帮助