我有一个数据矩阵,如下所示。
user access matrix..each行代表用户,每一列代表该用户访问的页面类别。
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 我需要在它上面应用双簇技术。这种双聚类技术将首先生成用户集群,然后生成页面clusters.after,它将用户集群和页面集群结合起来生成双集群。现在,我不知道应该使用哪种集群技术来实现此目的。最好的聚类将从该矩阵生成一致的双色图。
发布于 2017-08-27 02:42:03
以下是几种可以帮助回答这个问题的聚类算法的摘要
“我应该使用哪种集群技术?”
没有客观上“正确”的聚类算法Ref
聚类算法可以根据它们的“集群模型”进行分类。为特定类型的模型设计的算法在不同类型的模型上通常会失败。例如,k-means不能找到非凸簇,只能找到圆形簇。
因此,理解这些“集群模型”成为理解如何在各种聚类算法/方法中进行选择的关键。典型的群集模型包括:
1连接模型:基于距离连接构建模型。例如,层次聚类。当我们需要根据树木采伐高度进行不同的分区时使用。R函数:在stats包中的hclust。
2质心模型:通过用单个均值向量表示每个集群来构建模型。当我们需要清晰的分区时使用(与后面描述的模糊聚类相反)。R函数: stats包中的kmeans。
3分布模型:基于统计分布构建模型,例如期望最大化算法使用的多变量正态分布。当簇形状可以是任意的时使用,不像k-means,它假定为圆形簇。R函数: emcluster包中的emcluster。
4密度模型:基于数据空间中连接的密集区域的集群构建模型。例如DBSCAN和光学。当群集形状可以是任意形状时使用,不像k-means算法那样假定为圆形群集。R dbscan包中的函数dbscan。
5个子空间模型:基于集群成员和相关属性构建模型。例如,双聚类(也称为共同聚类或双模式聚类)。当需要同时进行行和列聚类时使用。R函数biclust在biclust包中。
6分组模型:根据分组信息构建模型。例如协同过滤(推荐算法)。推荐实验室包中的R函数推荐器。
7基于图的模型:基于集团构建模型。社区结构检测算法试图在有向图或无向图中找到密集的子图。例如,图形包中的R函数cluster_walktrap。
8 Kohonen自组织特征映射:基于神经网络建立模型。R函数在kohonen包中。
9频谱聚类:基于非凸聚类结构构建模型,或者当中心的度量不是对完整聚类的合适描述时。R函数规范在kernlab包中。
10子空间聚类:对于高维数据,距离函数可能会有问题。集群模型包括集群的相关属性。例如,R包HDclassif中的hddc函数。
11序列聚类:相关的组序列。rBlast包。
12亲和性传播:基于数据点之间的消息传递构建模型。它不需要在运行算法之前确定集群的数量。对于某些计算机视觉和计算生物学任务,例如人脸图片的聚类和识别受调控的转录本,它比k-means,Ref Rpackage APCluster更好。
13流聚类:基于连续到达的数据建立模型,例如电话记录,金融交易等。例如R package BIRCH [https://cran.r-project.org/src/contrib/Archive/birch/]
14文档聚类(或文本聚类):基于奇异值分解构建模型。它已经应用于主题抽取中。例如,Carrot [http://search.carrot2.org]是一个开源的搜索结果聚类引擎,可以将文档聚类到主题类别中。
15潜在类模型:它将一组观察到的多变量与一组潜在变量联系起来。LCA可用于协同过滤。recommenderlab包中的R函数推荐具有协同过滤功能。
16双聚类:用于同时对双模式数据的行和列进行聚类。例如R函数在包中的biclust。
17软聚类(模糊聚类):每个对象在一定程度上属于每个簇。例如Fclust包中的R fclust函数。
发布于 2014-05-07 15:57:16
你不能仅仅通过看矩阵就知道哪种聚类算法是最好的。你必须尝试不同的算法(可能是k-means,贝叶斯,最近邻或你的库中的任何算法)。进行交叉验证(聚类只是将用户归类到聚类中心的一种分类类型)并评估结果。您甚至可以将其打印到图表中。那就做个决定。没有一个决定是完美的,你总会有错误。结果取决于你所期望的。也许错误更多的结果在你个人看来会有更好的结果。
你有没有尝试过任何算法?
https://stackoverflow.com/questions/23510748
复制相似问题