二进制数据聚类的bmd算法
bmdcluster的Python项目详细描述
简介
此软件包包含用于对二元矩阵进行聚类的二元矩阵分解(BMD)算法的实现,如li[1]和li&zhu[2]所示。bmd解决了同时对数据和特征进行聚类的双边聚类问题。
实现了bmd算法的两种变体。第一种方法假设数据矩阵是块对角的,即每组点与一组特征相关联,反之亦然。第二种方法是对矩阵结构没有限制的一般方法。有关详细信息,请参见[1]。
数据和特征的集群分配在集群过程开始时随机初始化的指标矩阵中编码。[2]建议引导一小部分数据以获得初始数据集群分配。然后,当在完整数据集上使用它们时,它们用于在聚类过程的开始处为数据指示符矩阵设定种子。bmdcluster
支持这种初始化数据集群和随机初始化的方法。用户还可以选择将功能群集指示符矩阵初始化为标识矩阵,标识矩阵对应于在初始化时将每个功能放入自己的群集。
安装
可以通过调用pip安装bmdcluster
包
pip install bmdcluster
用法
bmdcluster
包的主要入口点是bmd
类,该类的用法是根据sklearn模型的用法建模的。在对要群集的数据调用.fit()方法之前,BMD模型是用一组参数实例化的。bmd模型可以通过从bmdcluster
包导入bmd
模型对象来使用,如下所示:
from bmdcluster import BMD
骨密度等级
bmdcluster.bmd(n_clusters,method,b_ident,use_bootstrap=false,**kwargs)
参数:
- n_群集:要将数据分组到的群集数。
- 方法:要使用的BMD算法的变体。选项有"block_diagonal"和"general"。
- b u ident:逻辑指定是否将功能群集指示符矩阵初始化为标识。这相当于在算法开始时将每个特征放在自己的簇中。如果设置为
false
,则必须通过提供关键字参数f_clusters
- 使用引导:逻辑指定是否引导用于初始化数据集群的数据子集。默认值为
false
。如果设置为true
则关键字参数b
必须设置为用于引导示例的点数。
关键字参数:
- b:可选,引导样本的大小。必须在
使用bootstrap=true
时设置 - f_clusters:可选,要查找的功能群集数。如果
b\u ident=false
- init_ratio:可选,当
use_bootstrap=false
时要随机初始化的部分数据。剩余数据未分配。 - 种子:可选,设置随机数生成器的状态
属性
- a:数据的群集分配指示符矩阵。是一个numpy形状数组(数据点,n_簇)
- b:功能群集分配指标矩阵。是一个numpy形状数组(数据功能,f_群集)
- 成本:成本函数的最终值
方法
安装
在一组数据上拟合bmd聚类模型。
参数:
- w要群集的数据、行中的数据和列中的功能的numpy数组。
- 冗长:按逻辑打印算法进度,默认设置为0。
- 返回结果:将属性作为元组返回。默认值为false。
获取索引
给定集群的数目,返回一个数组,该数组包含该集群中数据点或要素的索引。参数:
- i:群集数
- 哪个:是"数据"还是"功能"
示例
下面是一个典型的用法示例。
from bmdcluster import BMD
model = BMD(n_clusters = 2, method = 'general', B_ident = True)
model.fit(X)
# Print members of the first data cluster and the second feature cluster
print(model.get_indices(0, 'data'))
print(model.get_indices(1, 'features'))
这个例子展示了如何使用20个样本点的引导初始化。由于这只影响数据群集的初始化,因此此设置可用于与功能群集相关的任何设置。
model = BMD(data_clusters = 2, method = 'general', B_ident = True, use_bootstrap = True, b = 20)
下面是一个示例,演示如何使用init_ratio
设置来控制随机初始化为群集的点的分数。
model = BMD(data_clusters = 2, method = 'general', B_ident = True, init_ratio = 0.25)
要访问群集分配矩阵,可以将它们称为bmd
对象的属性,或者在拟合模型时通过设置return_results=true
# assign to variables
cost, A, B = model.fit(X, return_results = True)
# access as attributes
print(model.A)
注释
除非使用算法的块对角变量,否则数据簇和特征簇之间没有关系。也就是说,数据群集1和功能群集1不是指同一群集。
在块对角线的情况下,一个特征有可能与每个簇具有同样强的从属关系。在这种情况下,功能不会分配给群集。作者将这种特性称为"异常值"[2]。
由于算法在很大程度上依赖于初始点的选择,因此可能需要多次运行算法,直到达到足够低的成本或令人满意的簇[1,2]。
如果您不确定有多少个功能集群,或者您只对数据集群感兴趣,我们建议设置b\u ident=true
。这可能会导致空的功能群集。这是正常的,因为将每个特征放在其自己的簇中不会对特征之间的关系进行假设,使算法可以根据需要对特征进行分组,这将导致在特征簇指标矩阵中出现0列。
参考文献
[1]Li,T.(2005年8月)。二元数据聚类的一般模型。在第十一届ACM SIGKDD数据挖掘知识发现国际会议记录(第188-197页)中。ACM.
[2]Li,T.,&Zhu,S.(2005年4月)。二元数据聚类。2005年暹罗国际数据挖掘会议记录(第526-530页)。工业和应用数学学会。