size-constrained-clustering 具有类别数量约束的聚类

文章目录

  • size-constrained-clustering 具有类别数量约束的聚类
  • 前言
  • 一、size-constrained-clustering 0.1.2是什么?
  • 二、安装步骤
    • 方法一
    • 方法二
    • 主函数代码
  • 总结

前言

本文主要介绍由MIT Wang Jing开发的 size-constrained-clustering 0.1.2的包的安装过程。该包主要是具有数量约束的聚类算法,典型算法为:类别严格均衡的K-Means算法(最小费流思路和启发式求解两种求解思路),具有类别数量上界和下界的KM(最小费流求解),子类类别数比例(Deterministic Annealing)方法和Shrinkage Clustering方法。


其主要思想改天再介绍,在这里先挖一个坑,嘻嘻嘻

一、size-constrained-clustering 0.1.2是什么?

这是Wang开发的一个包, 官方网站,其 github仓库为最新代码(不要在官方直接下载)。

二、安装步骤

方法一

官方示例:其实一般情况下行不通,转方法二

pip install size-constrained-clustering

方法二

下载github上的zip文件(size_constrained_clustering-master.zip),解压至特定文件夹,进入size_constrained_clustering-master所在目录,需要配置环境,编译pyx文件生成pyd文件,运行setup即可。
新建Python3.7环境(一定要是3.7)

conda create -n XXX python=3.7

进入主目录

pip install -r requirements.txt

编译pyx文件
因为源码是由c和Python代码混合的,一些函数存放在pyx文件下,如果不进行编译,则一直提示缺少相关的函数,我真的是后知后觉,参见博文。编译时需要新建setup1.py代码如下

from setuptools import setup
from Cython.Build import cythonize
from Cython.Distutils import build_ext
import numpy as np
setup(cmdclass = {'build_ext': build_ext},ext_modules = cythonize("size_constrained_clustering\\k_means_constrained\\mincostflow_vectorized_.pyx"),include_dirs=[np.get_include()],
)

然后在新建环境XXX并进入主目录里,运行

python setup1.py build_ext --inplace

可以得到由pyx生成的pyd文件(似乎我生成路径有些问题,可以生成后移动到相应文件夹),共三个pyx文件,分别为:size_constrained_clustering\sklearn_import\cluster_k_means.pyx,size_constrained_clustering\sklearn_import\metrics\pairwise_fast.pyx,size_constrained_clustering\sklearn_import\utils\sparsefuncs_fast.pyx
生成之后可即为完成编译。

主函数代码

主函数相关介绍在该博文里已详细介绍并配有结果图,在这里不再赘述。

# setup
from size_constrained_clustering import fcm, equal, minmax, shrinkage, da
# by default it is euclidean distance, but can select others
from sklearn.metrics.pairwise import haversine_distances
import numpy as np
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt# Normal FKM
n_samples = 2000
n_clusters = 4
centers = [(-5, -5), (0, 0), (5, 5), (7, 10)]
X, _ = make_blobs(n_samples=n_samples, n_features=2, cluster_std=1.0,centers=centers, shuffle=False, random_state=42)
model = fcm.FCM(n_clusters)
# use other distance function: e.g. haversine distance
# model = fcm.FCM(n_clusters, distance_func=haversine_distances)
model.fit(X)
centers = model.cluster_centers_
labels = model.labels_
# show FCM results
plt.figure(figsize=(10,10))
colors=['red','green','blue','yellow']for i,color in enumerate(colors):color_tmp=np.where(labels==i)[0]plt.scatter(X[color_tmp,0],X[color_tmp,1],c=color,label=i)
plt.legend()
plt.scatter(centers[:,0],centers[:,1],s=1000,c='black')
plt.show()# Equal size constraints FCM
n_samples = 2000
n_clusters = 3
X = np.random.rand(n_samples, 2)
# use minimum cost flow framework to solve
# model = equal.SameSizeKMeansMinCostFlow(n_clusters)
# use heuristics method to solve
model = equal.SameSizeKMeansHeuristics(n_clusters)
model.fit(X)
centers = model.cluster_centers_
labels = model.labels_
for i,color in enumerate(colors):color_tmp=np.where(labels==i)[0]plt.scatter(X[color_tmp,0],X[color_tmp,1],c=color,label=i)
# plt.legend()
plt.scatter(centers[:,0],centers[:,1],s=1000,c='black')
plt.show()# Minimum and Maximum Size Constraint
n_samples = 2000
n_clusters = 2
X = np.random.rand(n_samples, 2)
model = minmax.MinMaxKMeansMinCostFlow(n_clusters, size_min=400,   size_max=1500)
model.fit(X)
centers = model.cluster_centers_
labels = model.labels_
for i,color in enumerate(colors):color_tmp=np.where(labels==i)[0]plt.scatter(X[color_tmp,0],X[color_tmp,1],c=color,label=i)
# plt.legend()
plt.scatter(centers[:,0],centers[:,1],s=1000,c='black')
plt.show()# Deterministic Annealing
n_samples = 2000
n_clusters = 3
X = np.random.rand(n_samples, 2)
# distribution is the distribution of cluster sizes
model = da.DeterministicAnnealing(n_clusters, distribution=[0.1, 0.3, 0.6])
model.fit(X)
centers = model.cluster_centers_
labels = model.labels_
for i,color in enumerate(colors):color_tmp=np.where(labels==i)[0]plt.scatter(X[color_tmp,0],X[color_tmp,1],c=color,label=i)
# plt.legend()
plt.scatter(centers[:,0],centers[:,1],s=1000,c='black')
plt.show()# Shrinkage Clustering
n_samples = 1500
n_clusters = 3
# centers = [(-5, -5), (0, 0), (5, 5), (7, 10)]
centers = [(-5, -5), (0, 0), (5, 5)]
X, _ = make_blobs(n_samples=n_samples, n_features=2, cluster_std=1.0, centers=centers, shuffle=False, random_state=42)
model = shrinkage.Shrinkage(n_clusters, size_min=100)
model.fit(X)
centers = model.cluster_centers_
labels = model.labels_
print(labels)
for i,color in enumerate(colors):color_tmp=np.where(labels==i)[0]plt.scatter(X[color_tmp,0],X[color_tmp,1],c=color,label=i)
# plt.legend()
plt.scatter(centers[:,0],centers[:,1],s=1000,c='black')
plt.show()

总结

其中可能会遇到的错误,但我现在也没解决,也不影响代码运行…但在这个错误上面确实花了挺长时间,参考过得博文,但真的屁用没有。主要还是卡在pyx文件的编译上。只有找对思路才能解决问题呀,下次原理再见。

size-constrained-clustering相关推荐

  1. PCL中点云的超体素(SuperVoxel)

    各位小伙伴们,有没有发现PCL库中已经集成了太多我们想实现的算法或者功能呢?所以这里组织一下学习小组针对PCL库中实现的算法进行剖析与论文解读,所以希望更多的小伙伴们参与进来,我们一起吃透PCL,欢迎 ...

  2. SuperVoxel:PCL中点云的超体素

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 标题:Voxel Cloud Connectivity Segmentation - Supervox ...

  3. python 笔记 size-constrained-clustering (对类别大小做限制的聚类问题)

    大小限制的聚类问题 1 主要方法 # 导入库 from size_constrained_clustering import fcm, equal, minmax, shrinkage,da # by ...

  4. (十五:2020.08.28)CVPR 2013 追踪之论文纲要(译)

    讲在前面 论坛很多博客都对论文做了总结和分类,但就医学领域而言,对这些论文的筛选信息显然需要更加精细的把控,所以自己对这200篇的论文做一个大致从名称上的筛选,希望能找到些能解决当前问题的答案. 论文 ...

  5. 阅读笔记之:Multimodal learning in Loosely-organized web images-CVPR2014

    摘要:网络图像数据包含的元数据包含文本,标题,拍摄位置,拍摄器材等信息.这些信息可能具有噪声,可能残全不全,这篇文章主要是利用多模态的信息,如果没有监督信息就对样本进行聚类,如果有少量的监督信息,就可 ...

  6. 数据库可视化库_漂亮的javascript数据可视化库

    数据库可视化库 If you're building a web app using JavaScript, it is inevitable that at some point you'll ne ...

  7. 论文阅读笔记(9):加权稀疏子空间表示——子空间聚类、约束聚类和主动学习的统一框架

    论文阅读笔记(9):WEIGHTED SPARSE SUBSPACE REPRESENTATION--A UNIFIED FRAMEWORK FOR SUBSPACE CLUSTERING, CONS ...

  8. ICML 2017 paper

    参考链接 icml 2017 acceptedPaper Paperlist Relative Fisher Information and Natural Gradient for Learning ...

  9. 论文笔记:Low-Rank Tensor Constrained Multiview Subspace Clustering

    Low-Rank Tensor Constrained Multiview Subspace Clustering Abstract 论文研究多视图子空间聚类的问题,引入低阶张量约束去探索多视图中复杂 ...

  10. Low-Rank Tensor Constrained Multiview Subspace Clustering

    低秩张量限制的多视图子空间聚类 Abstract 2. Relate work 3.The Proposed Approach 3.1张量知识拓展 3.2 Formulation 3.3 Optimi ...

最新文章

  1. 图解系列之JVM运行时数据区
  2. crc错误 modbus poll_Modbus通讯错误检测方法
  3. linux空白屏幕,如何在Linux中的Logitech R400上使空白屏幕键正常工作?
  4. python与办公自动化-用 Python 自动化办公,我与大神之间的差距一下就拉小了
  5. 洛谷 P1918保龄球
  6. python pandas读取文件内容_python pandas读取大型文件
  7. 说说VNode节点(Vue.js实现)
  8. 【渝粤题库】陕西师范大学200061语言学概论作业(高起本、专升本)
  9. 网页制作 网页下拉菜单HTML+CSS制作
  10. python UI自动化自动关闭浏览器学习记录
  11. mutillidae(owasp10)数据库报错
  12. opencv入门—播放AVI视频
  13. Ubuntu16.04LTS安装搜狗拼音
  14. 分享几个在线制作APP应用的网站
  15. P41 引用类型用法总结
  16. 【AI论文精粹】图形化解释工具;神经网络数据质量;LiDAR 语义分割;机器学习的应用
  17. java循环嵌套语句示范_java的三种循环结构与循环嵌套
  18. matlab 0106,MATLAB控制系统仿真与实例详解.pdf
  19. jQuery打印插件jqprint,无法打印select下拉框的值
  20. AI审合同丨可审哪些类型的合同?

热门文章

  1. k620显卡 unreal_nvidia quadro k620是什么显卡
  2. Excel--单元格格式设置
  3. 关于win10笔记本电脑插入耳机后依旧外放的问题(亲测戴尔)
  4. POI Word表格复制行2种方式(copy()、手动复制行)
  5. 如何在word文档使其单页变为横向,教程来啦,怎样把word文档更改为横向
  6. 2021 年最漂亮的 Linux 发行版
  7. 鞍点【C语言】完整可用
  8. matlab 元素 最大值和最小值,[转载]matlab中的最大值和最小值
  9. 从凸函数到Minkowski不等式的推导
  10. TCP和UDP对比的优势和劣势