k中心点聚类算法伪代码_聚类算法之——K-Means、Canopy、Mini Batch K-Means
K-Means||算法
K-Means||
算法是为了解决K-Means++
算法缺点而产生的一种算法;
主要思路是改变每次遍历时候的取样规则,并非按照K-Means++
算法每次遍历只获取一个样本,而是每次获取K个样本,重复该取样操作O(logn)次(n是样本的个数),然后再将这些抽样出来的样本聚类出K个点,最后使用这K个点作为K-Means算法的初始聚簇中心点。实践证明:一般5次重复采用就可以保证一个比较好的聚簇中心点。
整体步骤
- 在N个样本中抽K个样本,一共抽log(n)次,形成一个新的样本集,一共有K*log(n)个数据。
- 在新数据集中使用
K-Means
算法,找到K个聚簇中心。 - 把这K个聚簇中心放到最初的样本集中,作为初始聚簇中心。
- 原数据集根据上述初始聚簇中心,再用
K-Means
算法计算出最终的聚簇。
伪代码
采用了一个采样因子l,第1步随机初始化一个中心点,第2-6步计算出满足概率条件的多个候选中心点C,候选中心点的个数可能大于k个,所以通过第7-8步来处理。第7步给C中所有点赋予一个权重值
k-means
算法聚类出这些候选点的k个聚类中心。
Canopy算法
Canopy算法属于一种“粗”聚类算法,速度较快,但精度较低。 与传统的聚类算法(如K-Means)不同,Canopy聚类最大的特点是不需要事先指定k值(即聚类的个数),因此具有很大的实际应用价值。
步骤如下:
- 给定样本列表
以及初始距离阈值为(T1、T2可自己定义);
- 从列表L中任取一点P,计算P到所有聚簇中心点的距离(如果不存在聚簇中心,那么就把点P作为一个新的聚簇),并选出与聚类中心最近的距离
;
- 如果距离D小于T1,表示该节点属于该聚簇,添加到该聚簇列表中。
- 如果距离D小于T2,表示该节点不仅仅属于该聚簇,还表示和当前聚簇中心点非常近,所以将P从列表L中删除。
- 如果距离D大于T1,那么节点P形成一个新的聚簇。
- 重复步骤2-5,直到列表L为空时结束循环。
Canopy算法得到的最终结果的值,聚簇之间是可能存在重叠的,但是不会存在某个对象不属于任何聚簇的情况。
Canopy算法过程图形说明
Canopy+ K-Means聚类算法
由于K-Means
算法存在初始聚簇中心点敏感的问题,常用使用Canopy+K-Means
算法进行模型构建,这种形式聚类算法聚类效果良好。
步骤
- 先使用
Canopy
算法进行“粗”聚类得到K个聚类中心点。 - 再使用
K-Means
算法,并用Canopy
算法得到的K
个聚类中心点作为初始中心点,进行“细”聚类。
优点
- 执行速度快(先进行了一次聚簇中心点选择的预处理);
- 不需要给定
K
值,应用场景多; - 能够缓解
K-Means
算法对于初始聚类中心点敏感的问题。
Mini Batch K-Means算法
Mini Batch K-Means
算法是K-Means
算法的一种优化变种,采用小规模的数据子集(每次训练使用的数据集是在训练算法的时候随机抽取的数据子集)减少计算时间,同时试图优化目标函数;Mini Batch K-Means
算法可以减少K-Means
算法的收敛时间,而且产生的结果效果只是略差于标准K-Means
算法。
算法步骤如下
- 首先抽取部分数据集,使用
K-Means
算法构建出K个聚簇点的模型; - 继续抽取训练数据集中的部分数据集样本数据,并将其添加到模型中,分配给距离最近的聚簇中心点;
- 更新聚簇的中心点值;
- 重复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相关推荐
- 排序中减治法算法伪代码_【算法与数据结构】伪代码与流程图
js难的是抽象概念 编程语言也能抽象 JS Python java PHP 根本就没区别 这些语言都有 声名 if...else while 循环 for 循环 函数 对象 这意味着 你没有必要过分关 ...
- k均值聚类算法优缺点_聚类算法之——K-Means算法
聚类算法属于无监督学习,它将相似的对象归到同一个簇中.K-Means算法是聚类算法中最常用到算法: 1. 预备知识点 距离计算 闵可夫斯基距离 点 之间的闵可夫斯基距离为 欧式距离 点 之间的欧氏距离 ...
- 层次聚类 matlab代码_聚类算法解析一
01 概述 本次针对聚类算法进行讲解,因为内容较多,会分多篇文章进行讲解,主要的内容包括聚类算法的整体介绍,针对不同类别的聚类算法比如划分聚类.层次聚类.密度聚类等算法进行介绍,在讲解每类算法时会结合 ...
- c均值聚类matlab程序_聚类算法之kmeans算法
一.k-means算法介绍 k-means最早是由James MacQueen在1967年提出的,这一观点能够追溯到1957年Hugo Steinhaus所提出的想法.1957年,斯图亚特最先提出这一 ...
- mysql聚类函数排序_聚类算法大盘点 - 如鱼饮水,冷暖自知 - OSCHINA - 中文开源技术交流社区...
最近在关注聚类分析,了解了之后才发现,原来聚类分析里已经有这么丰富的成果,因此希望对其做个较全面的总结. 本文涉及到的聚类算法较多,请允许我慢慢更新. 1 层次聚类 (Agglomerative Cl ...
- 聚类dbi指数_聚类算法
1 聚类任务 在无监督学习中,获取的数据集是没有label信息的,无监督学习的目的是对无label的数据集进行学习以揭示数据内部的性质及规律,为进一步的数据分析提供基础. 聚类是最常见的无监督学习任务 ...
- 层次聚类python实现_聚类算法之层次聚类(Python实现)
起步 层次聚类( Hierarchical Clustering )是聚类算法的一种,通过计算不同类别的相似度类创建一个有层次的嵌套的树. 层次聚类算法介绍 假设有 n 个待聚类的样本,对于层次聚类算 ...
- 聚类dbi指数_聚类-K-Means
1.什么是K-Means? K均值算法聚类 关键词:K个种子,均值 聚类的概念:一种无监督的学习,事先不知道类别,自动将相似的对象归到同一个簇中 K-Means算法是一种聚类分析(cluster an ...
- 正确率能很好的评估分类算法吗_机器学习算法优缺点对比及选择(汇总篇)
转自:机器学习与统计学 本文的目的,是务实.简洁地盘点一番当前机器学习算法.文中内容结合了个人在查阅资料过程中收集到的前人总结,同时添加了部分自身总结,在这里,依据实际使用中的经验,将对此模型优缺点及 ...
最新文章
- html中item属性,项目id(属性) | itemid (attribute)
- 2014第12周二学习记
- 安卓键盘加上数字_HHKB Professional HYBRID静电容键盘图赏
- 英特尔、联发科、展讯等开始支持开源的物联网轻量化操作系统AliOS Lite
- 学生签到系统c代码_C语言实现简单学生学籍管理系统
- “阳光天使”2007全国小姐大赛北京赛区决赛
- azkaban的操作指南
- 数据自治开放的软件开发和运行环境
- java商品名称_Java统计商品信息
- 应用程序委托协议栈发送消息
- 读书笔记-《人为什么活着》
- 生产车间仿真软件flexSIM
- C10K、C10M问题
- java 文档注释生成_Java的文档注释之生成帮助文档的实例
- 19年1月尔雅移动互联网时代的信息安全与防护考试答案(96分)
- malloc用户态内存分配
- 给Android新手的六条建议,听说安卓不火了?
- 转载一个手机RPG游戏制作工具,仿造RPGXP写的
- c#调用windows虚拟键盘
- 【开发记录】DirectX Custom Graphics Engine(1)