我应该使用哪种聚类技术?

时间:2014-05-07 06:52:50

标签: artificial-intelligence categorization

我有一个数据矩阵如下所示..

它是用户访问矩阵。每行代表用户,每列代表该用户访问的页面类别。

0    8    1    0    0    8    0    0    0    0    0    0    0    11    2    2    0  
1    0    7    0    0    0    0    0    1    1    0    0    0    0    0    0    1  
1    0    1    1    0    0    0    0    0    1    0    0    0    1    0    0    0  
6    1    0    0    0    2    6    0    0    0    0    1    0    0    0    0    0  
5    3    2    0    2    0    0    0    0    0    1    0    0    0    1    0    0  
2    3    0    1    0    1    0    0    0    0    0    1    0    3    0    0    0  
9    0    1    1    0    0    5    0    0    0    1    2    0    0    0    0    0  
5    1    4    0    0    0    1    0    0    2    0    0    0    9    0    0    0  
5    5    0    2    0    1    0    0    0    0    1    1    0    0    0    0    0  
1    2    0    0    2    3    3    0    0    1    1    0    0    0    4    0    0  
0    1    0    1    0    2    0    0    1    0    0    0    0    2    0    0    0  
5    4    0    0    1    0    0    0    0    0    1    0    0    2    0    0    0  
0    0    0    2    0    0    2    12    1    0    0    0    2    0    0    0    0  
6    1    0    0    0    0    58    15    7    0    1    0    0    0    0    0    0  
1    0    2    0    0    1    1    0    0    0    2    0    0    0    0    0    0 

我需要在其上应用双聚类技术。 这种双聚类技术将首先生成用户群集,然后生成页面群集。之后,它将用户和页面群集组合在一起以生成双向群集。 现在我对我应该为此目的使用哪种聚类技术感到困惑。 最佳聚类将从该矩阵中生成连贯的双聚类。

2 个答案:

答案 0 :(得分:1)

以下是几个有助于回答问题的聚类算法的摘要

  

"我应该使用哪种聚类技术?"

没有客观的"正确的"聚类算法Ref

聚类算法可以根据他们的"聚类模型进行分类"。针对特定类型的模型设计的算法通常会在不同类型的模型上失败。例如,k-means不能找到非凸簇,它只能找到圆形簇。

因此,了解这些"群集模型"成为理解如何在各种聚类算法/方法中进行选择的关键。典型的集群模型包括:

[1]连接模型:基于距离连接构建模型。例如,层次聚类。当我们需要基于树木切割高度的不同分区时使用。 R函数:统计包中的hclust。

[2]质心模型:通过用单个均值向量表示每个聚类来构建模型。当我们需要清晰的分区时使用(与后面描述的模糊聚类相反)。 R功能:统计包中的kmeans。

[3]分布模型:基于统计分布构建模型,例如期望最大化算法使用的多元正态分布。当簇形状可以是任意的时使用,与假定为圆形簇的k均值不同。 R函数:emcluster包中的emcluster。

[4]密度模型:基于聚类构建模型,作为数据空间中连接的密集区域。例如DBSCAN和OPTICS。当簇形状可以是任意的时使用,不像k-means,它采用圆形簇.R函数dbscan在包dbscan中。

[5]子空间模型:基于集群成员和相关属性构建模型。例如,双聚类(也称为共聚类或双模聚类)。在需要同时进行行和列聚类时使用。 R功能双管道双管道。

[6]组模型:根据分组信息构建模型。例如协同过滤(推荐算法)。 R函数推荐器在推荐器包中。

[7]基于图形的模型:基于集团构建模型。社区结构检测算法试图在有向或无向图中找到密集的子图。例如igraph包中的R函数cluster_walktrap。

[8] Kohonen自组织特征图:基于神经网络构建模型。 R函数som在kohonen包中。

[9]谱聚类:基于非凸簇结构构建模型,或者当中心的度量不是完整聚类的合适描述时。 k功能包中的R函数specc。

[10]子空间聚类:对于高维数据,距离函数可能存在问题。群集模型包括群集的相关属性。例如,h包中的hddc函数HDclassif。

[11]序列聚类:相关的组序列。 rBlast包。

[12]亲和传播:基于数据点之间的消息传递构建模型。在运行算法之前,不需要确定簇的数量。对某些计算机视觉和计算生物学任务更好,例如比k-means,Ref Rpackage APCluster聚集人脸图片和识别受管制的成绩单。

[13]流聚类:根据连续到达的数据构建模型,如电话记录,金融交易等。例如R包BIRCH [https://cran.r-project.org/src/contrib/Archive/birch/]

[14]文档聚类(或文本聚类):基于SVD构建模型。它已用于主题提取。例如,Carrot [http://search.carrot2.org]是一个开源搜索结果聚类引擎,可以将文档聚类到专题类别中。

[15]潜类模型:它将一组观察到的多变量变量与一组潜在变量联系起来。 LCA可用于协同过滤。推荐器包中的R函数推荐器具有协同过滤功能。

[16] Biclustering:用于同时对双模数据的行和列进行聚类。例如,在双层包装中使用R功能双管道。

[17]软聚类(模糊聚类):每个对象在一定程度上属于每个聚类。例如,fclust包中的R Fclust函数。

答案 1 :(得分:0)

通过查看矩阵,您无法分辨哪种聚类算法最佳。您必须尝试不同的算法(可能是k-means,bayes,最近邻居或您的图书馆拥有的任何算法)。进行交叉验证(聚类只是一种将用户分类到聚类中心的分类类型)并评估结果。你甚至可以将它打印到图表中。然后做出决定。没有决定是完美的,你总会有错误。结果取决于您的期望。也许更多错误的结果会在您的个人观点中产生更好的结果。

你尝试过任何算法吗?