COP-kMeans限制性--kMeans变体算法研究
简述
最近发现一篇有趣的论文。关于限制性的kMeans. 主要思想是基于boosting principle的COP-kMeans。所以,我就先研究了下COP-kMeans。
COP-kMeans
是一种限制性聚类算法。限制性的含义很简单,就是需要考虑到有些节点在聚类前,我们就知道了这个两个节点是应该放在一起,还是应该分开。
所以,这里有两类。最简单的想法,就是这里用一个二维矩阵来存储这个信息。
COP-kMeans,从名字上看,就知道这是一个基于kMeans的算法。
Python实现
- 比较奇怪的点,这里我使用了一个函数内的函数定义。主要是考虑到了封闭性所以这样实现~
- 关于使用: 在策略上,我用了最简单的策略。而且还存在有病态初始化的可能。所以,可能会出现一只被报错的情况~ 不用担心,多进行几次测试就好了,或者,你也可以直接改我的代码~
- 代码实现上,基于我之前写过的k-Means. 只是加了一个验证的部分而已~
- 耗时上也比kMeans要高,毕竟每次都需要检查两个表~
补充说明
在评论区的小哥提示下,我做了con的补充。意外发现代码有些小问题。这里补充下。
- Con1和Con2是两个限制矩阵,大小规模为n*n,n为X的长度,即元素数量。
- Con1是要保证在一个组的限制,Con2是要保证不在一个组的限制
- 没有限制就为0,存在限制就非0.
def COP_K_means(X, n_clusters=3, Con1=None, Con2=None):clusters = np.random.choice(len(X), n_clusters)clusters = X[clusters]labels = np.array([-1 for i in range(len(X))])def validata_constrained(d, c, Con1, Con2):for dm, value in enumerate(Con1[d]): # should in the same groupif value == 0: continueif labels[dm] == -1 or labels[dm] == c: # has not allocated or ...continueif labels[dm] != -1 and labels[dm] != c: # has allocatedreturn Falsefor dm, value in enumerate(Con2[d]): # cannot in the same groupif value == 0: continueif labels[dm] == -1 or labels[dm] != c: # has not allocated or ...continueif labels[dm] != -1 and labels[dm] == c: # has allocatedreturn Falsereturn Truewhile True:labels_new = np.array([-1 for i in range(len(X))])for i, xi in enumerate(X):close_list = np.argsort([np.linalg.norm(xi - cj) for cj in clusters])unexpect = Truefor index in close_list:if validata_constrained(i,index, Con1, Con2):unexpect = Falselabels_new[i] = indexbreakif unexpect:raise Exception("Can not utilize COP-k-Means algorithm inside the dataset.")if sum(labels != labels_new) == 0:breakfor j in range(n_clusters):clusters[j] = np.mean(X[np.where(labels_new == j)], axis=0)labels = labels_new.copy()return labels
- 效果~ 可以跟之前的kMeans进行对比
COP-kMeans限制性--kMeans变体算法研究相关推荐
- 照片美妆--人像变老算法研究
人像变老技术可以把一张小孩子的照片或者年轻人的照片转换为变老以后的样子,目前市面上已有相应的应用,这里本人先放两张效果,然后分析算法: 这个效果是本人算法的效果,现在我们来分析一下人像变老的技术情况. ...
- 关于寻路算法的一些思考(4):A* 算法的变体
定向搜索 在A*算法的循环中,OPEN集合用来保存所有用于寻找路径的被搜索节点.定向搜索是在A*算法基础上,通过对OPEN集合大小设置约束条件而得到的变体算法.当集合太大的时候,最不可能出现在最优路径 ...
- 鲸鱼优化算法(WOA)及其优秀变体(含MATLAB代码)
先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论.我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出 ...
- 灰狼优化(GWO)算法的8种中文变体(含MATLAB代码)
先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论.我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出 ...
- ABR算法研究综述 | A Survey on Bitrate Adaptation Schemes for Streaming Media Over HTTP(IEEE COMST‘18)阅读笔记
原文链接:A Survey on Bitrate Adaptation Schemes for Streaming Media Over HTTP | IEEE Journals & Maga ...
- Transformer变体为何无法应用于多种任务?谷歌:这些架构更改不能有效迁移
来自 Google Research 的研究人员探索了多个 transformer 变体,发现它们无法在多个实现和应用中实现很好地迁移,大多数架构更改无法有效提升性能. Transformer 诞生短 ...
- 如何写出正确的二分查找?——利用循环不变式理解二分查找及其变体的正确性以及构造方式...
序言 本文以经典的二分查找为例,介绍如何使用循环不变式来理解算法并利用循环不变式在原始算法的基础上根据需要产生算法的变体.谨以本文献给在理解算法思路时没有头绪而又不甘心于死记硬背的人. 二分查找究竟有 ...
- ReviewForJob——快速排序(基于插入排序)+快速选择(快速排序变体)
[0]README 0)本文旨在给出 快速排序 的 源码实现和源码分析(分析它的坑): 2)要知道 在 元素个数小于10的时候,快速排序不如插入排序:注意快速排序选取枢纽元 时 所使用的方法是 三数中 ...
- K-means算法研究综述
欢迎关注"程序杂货铺"公众号,里面有精彩内容,欢迎大家收看^_^ K-means算法研究综述 聚类被认为是机器学习中最常使用的技术之一, 它历史悠久.应用广泛,几乎应用于环境学.医 ...
最新文章
- android 读取json数据(遍历JSONObject和JSONArray)
- asp.net 页面刷新后,滚动条仍保持在原来的位置
- 《Linux From Scratch》第一部分:介绍 第一章:介绍-1.3. 更新日志
- [python] Kmeans文本聚类算法+PAC降维+Matplotlib显示聚类图像
- Caused by: java.lang.ClassCastException: weblogic.xml.jaxp.RegistryXMLReader
- CSS(一) 引入方式 选择器 权重
- 共享数据库、独立 Schema
- 如何处理Java注释
- 广州技术沙龙第 2、3 期参会者twitter、blog、兴趣大合集
- python笔记小白入门_Python 笔记:全网最详细最小白的Class类和实例详解
- Qt qtextstream读取文件
- 从图嵌入算法到图神经网络
- python人员管理系统_python实例_员工管理系统
- 安卓模拟ibeacon_android iBeacon开发模拟实例
- 解决外网下载速度过慢问题
- 淘宝校园笔试题鸡蛋与篮子
- 服务器管理软件LuManager2.0.99发布,含智能优化
- Ruoyi框架学习--Vue前端配置文件详解
- 哈尔滨工业大学(深圳)本科毕业设计(论文)LaTeX模板:hitszthesis
- 如何激活移动物联网卡