Skip to main content

用于聚类分类数据的 k-modes 和 k-prototypes 聚类算法的 Python 实现。

项目描述

版本 康达锻造页面 构建状态 测试覆盖率 码字 每月下载量 支持的 Python 版本 执照

公里模式

描述

k-modes 和 k-prototypes 聚类算法的 Python 实现。很多繁重的工作都依赖于 numpy。

k-modes 用于聚类分类变量。它根据数据点之间匹配类别的数量定义集群。(这与更知名的 k-means 算法形成对比,后者基于欧几里德距离对数值数据进行聚类。)k-prototypes 算法结合了 k-modes 和 k-means,能够对混合的数值/分类数据进行聚类。

实现的有:

代码仿照中的聚类算法scikit-learn 并具有相同的熟悉界面。

我希望有更多的人参与其中,并就我的实施向我提供反馈。如果您在运行或安装 kmode 时遇到任何问题, 请提交错误报告

享受!

安装

kmodes可以使用pip安装:

pip install kmodes

要升级到最新版本(推荐),请像这样运行它:

pip install --upgrade kmodes

kmodes也可以通过conda-forge 频道的conda方便地安装:

conda install -c conda-forge kmodes

或者,您可以从源代码构建最新的开发版本:

git clone https://github.com/nicodv/kmodes.git
cd kmodes
python setup.py install

用法

import numpy as np
from kmodes.kmodes import KModes

# random categorical data
data = np.random.choice(20, (100, 10))

km = KModes(n_clusters=4, init='Huang', n_init=5, verbose=1)

clusters = km.fit_predict(data)

# Print the cluster centroids
print(km.cluster_centroids_)

示例目录展示了 k-modes ('soybean.py') 和 k-prototypes ('stocks.py') 的简单用例。

并行执行

k-modes 和 k-prototypes 实现都通过joblib 库提供对多处理的支持 ,类似于 scikit-learn 的 k-means 实现,使用 n_jobs参数。设置比系统上可用的处理器内核更多的作业通常没有意义。

这可能会加速任何一次以上初始化尝试 n_init > 1的执行,这可能有助于减少更大问题的执行时间。请注意,多处理是否真的有帮助取决于您的问题,因此请务必先尝试一下。您可以查看一些基准的示例。

常问问题

问:使用 kprototypes 算法时,我看到诸如“TypeError: '<' not supported between 'str' and 'float'”之类的错误。

答:您的一个或多个数字特征列中包含字符串值。确保所有列都具有一致的数据类型。


问:k-protypes 如何知道我的哪些特征是数字的,哪些是分类的?

答:您使用参数告诉它哪些列索引是分类的categorical。所有其他都假定为数字。例如,clusters = KPrototypes().fit_predict(X, categorical=[1, 2])


问:我收到以下错误,是什么原因?“ModuleNotFoundError:没有名为‘kmodes.kmodes’的模块;'kmodes' 不是一个包”。

答:确保您的工作文件不是名为“kmodes.py”,因为它可能会否决kmodes软件包。


问:我收到以下错误:“ValueError:聚类算法无法初始化。考虑手动分配初始集群。”

答:这是一个功能,而不是错误。kmodes告诉您它无法理解您提供的数据。至少,不是使用您设置算法的参数。数据科学家需要找出原因。一些可能的解决方案的提示:

  • 使用较少的集群运行,因为数据可能不支持大量集群

  • 探索和可视化您的数据,检查奇怪的分布、异常值等。

  • 清理和规范化数据

  • 增加行列比例


问:我收到以下错误:“ValueError: Input contains NaN, infinity, or a value too large for dtype('float64').”

A:在 scikit-learn 之后,k-modes 算法不接受矩阵np.NaN 中的值X。建议用户以对手头的问题有意义的方式填写缺失的数据。


问:希望您的图书馆如何被引用?

答:沿着这些思路做一些事情会很好:

@Misc{devos2015,
  author = {Nelis J. de Vos},
  title = {kmodes categorical clustering library},
  howpublished = {\url{https://github.com/nicodv/kmodes}},
  year = {2015--2021}
}

参考

[黄97 ] ( 1 , 2 )

Huang, Z.:使用混合数值和分类值对大型数据集进行聚类,第一届亚太地区知识发现和数据挖掘会议论文集,新加坡,第 21-34 页,1997 年。

[黄98 ]

Huang, Z.:扩展具有分类值的大型数据集的 k 模式算法,数据挖掘和知识发现 2(3),第 283-304 页,1998 年。

[ CAO09 ]

Cao, F., Liang, J, Bai, L.:一种新的分类数据聚类初始化方法,Expert Systems with Applications 36(7), pp. 10223-10228., 2009。

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

kmodes-0.12.2.tar.gz (18.9 kB 查看哈希

已上传 source

内置分布

kmodes-0.12.2-py2.py3-none-any.whl (20.4 kB 查看哈希

已上传 py2 py3