0

我有一个如下给出的数据矩阵..

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

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 

我需要对其应用双聚类技术。这种双集群技术将首先生成用户集群,然后生成页面集群。然后将用户集群和页面集群结合起来生成双集群。现在我很困惑我应该为此目的使用哪种聚类技术。最好的聚类将从该矩阵生成连贯的双聚类。

4

2 回答 2

1

这里总结了几种可以帮助回答问题的聚类算法

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

没有客观上“正确”的聚类算法Ref

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

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

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

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

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

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

[5] 子空间模型:基于集群成员和相关属性构建模型。例如双聚类(也称为共同聚类或双模式聚类)。在需要同时进行行和列聚类时使用。biclust 包中的 R 函数 biclust。

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

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

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

[9] Spectral Clustering:基于非凸集群结构构建模型,或者当中心的度量不适合描述完整集群时。kernlab 包中的 R 函数规范。

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

[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 可用于协同过滤。Recommendationerlab 包中的 R 函数 Recommender 具有协同过滤功能。

[16] 双聚类:用于同时聚类双模式数据的行和列。例如,包 biclust 中的 R 函数 biclust。

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

于 2017-08-26T18:42:03.207 回答
0

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

您是否尝试过任何算法?

于 2014-05-07T07:57:15.540 回答