K-Means||算法

K-Means||算法是为了解决K-Means++算法缺点而产生的一种算法;

主要思路是改变每次遍历时候的取样规则,并非按照K-Means++算法每次遍历只获取一个样本,而是每次获取K个样本,重复该取样操作O(logn)次(n是样本的个数),然后再将这些抽样出来的样本聚类出K个点,最后使用这K个点作为K-Means算法的初始聚簇中心点。实践证明:一般5次重复采用就可以保证一个比较好的聚簇中心点。

整体步骤

  1. 在N个样本中抽K个样本,一共抽log(n)次,形成一个新的样本集,一共有K*log(n)个数据。
  2. 在新数据集中使用K-Means算法,找到K个聚簇中心。
  3. 把这K个聚簇中心放到最初的样本集中,作为初始聚簇中心。
  4. 原数据集根据上述初始聚簇中心,再用K-Means算法计算出最终的聚簇。

伪代码

采用了一个采样因子l,第1步随机初始化一个中心点,第2-6步计算出满足概率条件的多个候选中心点C,候选中心点的个数可能大于k个,所以通过第7-8步来处理。第7步给C中所有点赋予一个权重值

,这个权重值表示距离x点最近的点的个数。第8步使用

k-means算法聚类出这些候选点的k个聚类中心。

Canopy算法

Canopy算法属于一种“粗”聚类算法,速度较快,但精度较低。 与传统的聚类算法(如K-Means)不同,Canopy聚类最大的特点是不需要事先指定k值(即聚类的个数),因此具有很大的实际应用价值。

步骤如下

  1. 给定样本列表

    以及初始距离阈值为
    (T1、T2可自己定义);
  2. 从列表L中任取一点P,计算P到所有聚簇中心点的距离(如果不存在聚簇中心,那么就把点P作为一个新的聚簇),并选出与聚类中心最近的距离
  3. 如果距离D小于T1,表示该节点属于该聚簇,添加到该聚簇列表中。
  4. 如果距离D小于T2,表示该节点不仅仅属于该聚簇,还表示和当前聚簇中心点非常近,所以将P从列表L中删除。
  5. 如果距离D大于T1,那么节点P形成一个新的聚簇。
  6. 重复步骤2-5,直到列表L为空时结束循环。

Canopy算法得到的最终结果的值,聚簇之间是可能存在重叠的,但是不会存在某个对象不属于任何聚簇的情况。

Canopy算法过程图形说明

Canopy+ K-Means聚类算法

由于K-Means算法存在初始聚簇中心点敏感的问题,常用使用Canopy+K-Means算法进行模型构建,这种形式聚类算法聚类效果良好。

步骤

  1. 先使用 Canopy算法进行“粗”聚类得到K个聚类中心点。
  2. 再使用K-Means算法,并用Canopy算法得到的K个聚类中心点作为初始中心点,进行“细”聚类。

优点

  1. 执行速度快(先进行了一次聚簇中心点选择的预处理);
  2. 不需要给定K值,应用场景多;
  3. 能够缓解K-Means算法对于初始聚类中心点敏感的问题。

Mini Batch K-Means算法

Mini Batch K-Means算法是K-Means算法的一种优化变种,采用小规模的数据子集(每次训练使用的数据集是在训练算法的时候随机抽取的数据子集)减少计算时间,同时试图优化目标函数;Mini Batch K-Means算法可以减少K-Means算法的收敛时间,而且产生的结果效果只是略差于标准K-Means算法。

算法步骤如下

  1. 首先抽取部分数据集,使用K-Means算法构建出K个聚簇点的模型;
  2. 继续抽取训练数据集中的部分数据集样本数据,并将其添加到模型中,分配给距离最近的聚簇中心点;
  3. 更新聚簇的中心点值;
  4. 重复2-3步,直到中心点稳定或者达到迭代次数为止。

Python实现

import time
import matplotlib.pyplot as plt
import matplotlib
from sklearn.cluster import MiniBatchKMeans
from sklearn.datasets import make_blobs  # 导入产生模拟数据的方法
matplotlib.rcParams['font.sans-serif'] = [u'SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False# 生成模拟数据
k = 5  # 给定聚类数量
X, Y = make_blobs(n_samples=1000, n_features=2, centers=k, random_state=1)
s = time.time()
km = MiniBatchKMeans(n_clusters = k, batch_size = 100)
km.fit(X)
print("用sklearn内置的Mini Batch K-Means算法聚类耗时:", time.time() - s)label_pred = km.labels_  # 获取聚类后的样本所属簇对应值
centroids = km.cluster_centers_  # 获取簇心# 绘制Mini Batch K-Means结果
# 未聚类前的数据分布
plt.subplot(121)
plt.scatter(X[:, 0], X[:, 1], s=50)
plt.title("未聚类前的数据分布")
plt.subplots_adjust(wspace=0.5)plt.subplot(122)
plt.scatter(X[:, 0], X[:, 1], c=label_pred, s=50, cmap='viridis')
plt.scatter(centroids[:, 0], centroids[:, 1], c='red', marker='o', s=100)
plt.title("Mini Batch K-Means算法聚类结果")
plt.show()

运行结果

总结: Mini Batch K-Means 算法比 K-Means 算法运行的时间大大减少,并且效果也差不多。

相关链接

K-Means算法python代码

聚类算法总结

Canopy聚类算法

K-Means||算法

k中心点聚类算法伪代码_聚类算法之——K-Means、Canopy、Mini Batch K-Means相关推荐

  1. 排序中减治法算法伪代码_【算法与数据结构】伪代码与流程图

    js难的是抽象概念 编程语言也能抽象 JS Python java PHP 根本就没区别 这些语言都有 声名 if...else while 循环 for 循环 函数 对象 这意味着 你没有必要过分关 ...

  2. k均值聚类算法优缺点_聚类算法之——K-Means算法

    聚类算法属于无监督学习,它将相似的对象归到同一个簇中.K-Means算法是聚类算法中最常用到算法: 1. 预备知识点 距离计算 闵可夫斯基距离 点 之间的闵可夫斯基距离为 欧式距离 点 之间的欧氏距离 ...

  3. 层次聚类 matlab代码_聚类算法解析一

    01 概述 本次针对聚类算法进行讲解,因为内容较多,会分多篇文章进行讲解,主要的内容包括聚类算法的整体介绍,针对不同类别的聚类算法比如划分聚类.层次聚类.密度聚类等算法进行介绍,在讲解每类算法时会结合 ...

  4. c均值聚类matlab程序_聚类算法之kmeans算法

    一.k-means算法介绍 k-means最早是由James MacQueen在1967年提出的,这一观点能够追溯到1957年Hugo Steinhaus所提出的想法.1957年,斯图亚特最先提出这一 ...

  5. mysql聚类函数排序_聚类算法大盘点 - 如鱼饮水,冷暖自知 - OSCHINA - 中文开源技术交流社区...

    最近在关注聚类分析,了解了之后才发现,原来聚类分析里已经有这么丰富的成果,因此希望对其做个较全面的总结. 本文涉及到的聚类算法较多,请允许我慢慢更新. 1 层次聚类 (Agglomerative Cl ...

  6. 聚类dbi指数_聚类算法

    1 聚类任务 在无监督学习中,获取的数据集是没有label信息的,无监督学习的目的是对无label的数据集进行学习以揭示数据内部的性质及规律,为进一步的数据分析提供基础. 聚类是最常见的无监督学习任务 ...

  7. 层次聚类python实现_聚类算法之层次聚类(Python实现)

    起步 层次聚类( Hierarchical Clustering )是聚类算法的一种,通过计算不同类别的相似度类创建一个有层次的嵌套的树. 层次聚类算法介绍 假设有 n 个待聚类的样本,对于层次聚类算 ...

  8. 聚类dbi指数_聚类-K-Means

    1.什么是K-Means? K均值算法聚类 关键词:K个种子,均值 聚类的概念:一种无监督的学习,事先不知道类别,自动将相似的对象归到同一个簇中 K-Means算法是一种聚类分析(cluster an ...

  9. 正确率能很好的评估分类算法吗_机器学习算法优缺点对比及选择(汇总篇)

    转自:机器学习与统计学 本文的目的,是务实.简洁地盘点一番当前机器学习算法.文中内容结合了个人在查阅资料过程中收集到的前人总结,同时添加了部分自身总结,在这里,依据实际使用中的经验,将对此模型优缺点及 ...

最新文章

  1. html中item属性,项目id(属性) | itemid (attribute)
  2. 2014第12周二学习记
  3. 安卓键盘加上数字_HHKB Professional HYBRID静电容键盘图赏
  4. 英特尔、联发科、展讯等开始支持开源的物联网轻量化操作系统AliOS Lite
  5. 学生签到系统c代码_C语言实现简单学生学籍管理系统
  6. “阳光天使”2007全国小姐大赛北京赛区决赛
  7. azkaban的操作指南
  8. 数据自治开放的软件开发和运行环境
  9. java商品名称_Java统计商品信息
  10. 应用程序委托协议栈发送消息
  11. 读书笔记-《人为什么活着》
  12. 生产车间仿真软件flexSIM
  13. C10K、C10M问题
  14. java 文档注释生成_Java的文档注释之生成帮助文档的实例
  15. 19年1月尔雅移动互联网时代的信息安全与防护考试答案(96分)
  16. malloc用户态内存分配
  17. 给Android新手的六条建议,听说安卓不火了?
  18. 转载一个手机RPG游戏制作工具,仿造RPGXP写的
  19. c#调用windows虚拟键盘
  20. 【开发记录】DirectX Custom Graphics Engine(1)

热门文章

  1. SAP系统中的银行主数据FI12
  2. 七种在BIM实施过程中减少浪费的方法
  3. SAP 移动类型详解
  4. 新会计科目的编号及内容
  5. SAP销售发票同步产生会计凭证的两种做法
  6. SAP HR信息类型
  7. smartforms如何调用自定义内表
  8. Funtion:POPUP_TO_DECIDE_LIST
  9. ABAP--一个不错的函数模块的文档生成程序
  10. 释放数据价值,大数据分析如何助力电商获客又增收?