我有一个数据矩阵如下所示..
它是用户访问矩阵。每行代表用户,每列代表该用户访问的页面类别。
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
我需要在其上应用双聚类技术。 这种双聚类技术将首先生成用户群集,然后生成页面群集。之后,它将用户和页面群集组合在一起以生成双向群集。 现在我对我应该为此目的使用哪种聚类技术感到困惑。 最佳聚类将从该矩阵中生成连贯的双聚类。
答案 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,最近邻居或您的图书馆拥有的任何算法)。进行交叉验证(聚类只是一种将用户分类到聚类中心的分类类型)并评估结果。你甚至可以将它打印到图表中。然后做出决定。没有决定是完美的,你总会有错误。结果取决于您的期望。也许更多错误的结果会在您的个人观点中产生更好的结果。
你尝试过任何算法吗?