Skip to main content

通用反集群

项目描述

反集群

用于解决反集群问题的通用 Python 库。虽然聚类算法会在一个簇内实现高相似度,而在簇之间实现低相似度,但反聚类算法会实现相反的效果;即最小化集群内的相似性并最大化集群之间的相似性。目前,在这个库中实现了一些算法:

  • 使用 BIP 公式的精确方法。
  • 枚举交换启发式。
  • 模拟退火启发式。

请记住,反集群是一个计算困难的问题,即使对于小实例大小也可能运行缓慢。在对 Iris 数据集(150 个数据点)进行反聚类时,当前的 ILP 没有在合理的时间内完成。

前两种方法的实施如以下论文所述:
Papenberg, M., & Klau, GW (2021)。使用反聚类将数据集划分为等效部分。心理方法,26(2),161-174。内政部预印本
论文附有 R 编程语言库:anticlust

antilust R 包不同,这个库目前只有一个目标函数。在这个库中,目标将最大化簇内距离:数值列的欧几里德距离和分类列的汉明距离。

用例

在软件测试中,反聚类可用于在 AB 测试中生成测试组和控制组。示例:您有一个拥有许多用户的网上商店。网上商店正在积极开发中,您将推出一项新功能。此功能应针对尽可能多的不同用户进行测试,而无需针对整个用户群进行测试。为此,您可以创建用户群的最大多样性子集以进行测试(A 组)。其余用户(B 组)将不会测试此功能。为了划分用户群,您可以使用反聚类算法。A 组和 B 组应尽可能相似,以便有可靠的比较基础,但在 A(和 B)组内部,元素应尽可能不同。

这只是一个用例,可能还有更多。

安装

反集群包在PyPI上可用。要安装它,请运行以下命令:

pip install anti-clustering

该包目前支持 Python 3.8 及更高版本。

用法

该算法的输入是一个 Pandas 数据帧,每一行代表一个数据点。输出是相同的数据帧,带有一个包含整数编码集群标签的额外列。下面是一个基于 Iris 数据集的示例:

from anti_clustering import ExactClusterEditingAntiClustering
from sklearn import datasets
import pandas as pd

iris_data = datasets.load_iris(as_frame=True)
iris_df = pd.DataFrame(data=iris_data.data, columns=iris_data.feature_names)

algorithm = ExactClusterEditingAntiClustering()

df = algorithm.run(
    df=iris_df,
    numerical_columns=list(iris_df.columns),
    categorical_columns=None,
    num_groups=2,
    destination_column='Cluster'
)

贡献

如果您有任何建议或发现错误,请随时打开问题。如果您实施了新算法或知道如何调整现有算法;非常感谢 PR。

执照

该库在 Apache 2.0 许可下获得许可。

项目详情


下载文件

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

源分布

anti-clustering-0.2.1.tar.gz (13.4 kB 查看哈希

已上传 source

内置分布

anti_clustering-0.2.1-py3-none-any.whl (18.4 kB 查看哈希

已上传 py3