如何在R中进行降维


28

我有一个矩阵,其中a(i,j)告诉我我浏览过页面j的次数。有27K个人和95K页。我想在页面空间中有一些“尺寸”或“方面”,它们对应于经常一起查看的页面集。我的最终目标是能够计算出个人浏览过1维,2维等页面的频率。

我已经阅读了有关主成分分析单值分解的R文档,并执行了这些命令,但是我不确定如何继续。

如何使用降维方法来做到这一点?还是这确实是一个聚类问题,而我应该研究聚类算法?

非常感谢您的见解〜l

Answers:


10

假设mat_pages []包含列中的页面(要集群)和行中的个人。您可以使用以下命令根据Rby中的单个数据对页面进行聚类:

  pc <- prcomp(x=mat_pages,center=TRUE,scale=TRUE)

加载矩阵是数据的SVD分解的特征向量矩阵。他们给出了分数计算中每个PAGE的相对权重。绝对值较大的载荷在确定相应主成分的分数时会产生更大的影响。

但是,我还应该指出使用PCA对页面进行群集的短期性。这样做的原因是,负载赋予PAGES较大的权重,且具有较高的变异性,而不管此变异性实际上是由于PAGE含量还是其他原因(可能是技术变异或个别变异)。负载不一定反映组之间的真正差异,这(可能是您的主要兴趣)。但是,在所有页面具有相同方差的假设下,这种聚类确实反映了组中的差异(我不知道这是否是有效的假设)。

如果您拥有强大的计算功能(在给定数据大小的情况下可能实现)-使用分层模型可能是个好主意。在R中,可以使用lme4包来完成。


取得分数后该怎么办?

这是一个粗略的建议,分析很大程度上取决于数据的外观。另外,我想这个过程将很难对您拥有的数量级数据进行分组。

pc.col <- paste("page", 1:27000, sep=".")

pdf("principle-components.pdf")
plot(pc$x[,1:2]) ## Just look at the 1st two loadings (as you can see the groupings in a plane)
dev.off()

希望这可以使您了解如何将数据分组。

警告:这不是我所建议的。


我的建议:

这样的问题在基因组学中经常出现。在您的案例中,页面对应于基因,个体对应于患者(基本上,个体与基因组学具有相同的含义)

您要基于数据对页面进行聚类。

您可以在R中使用很多群集程序包,并且在其他答案中已指出。软件包的基本问题就像hclust是如何确定群集的数量。我最喜欢的一些是:

  • pvclust(为您提供聚类,并为每个聚类提供p值。使用p值,您可以确定统计上显着的聚类。问题:需要大量的计算能力,而且我不确定它是否可以与您的数据一起使用尺寸)
  • Hopach(为您提供估计的群集数量以及群集)
  • Bioconductor中还有其他可用的软件包,请在任务视图中检出它们。

您也可以使用k-means等聚类算法。我敢肯定,我在这个论坛上看到一个有关聚类的话题。答案非常详细。Tal Galili询问我是否记得正确。


@suncoolsu:非常感谢!我刚刚按照您的建议运行了prcomp。我还存储了它产生的载荷矩阵。但是,如何使用此矩阵将页面分组在一起?
laramichaels

您好Laramichaels,请在下面找到我的答案。
suncoolsu

@suncoolsu:我正在处理类似的问题,但是我想“聚类”具有相同“动力学”的个体(实际上,每个区域都有大量的时间序列,我想对它们进行建模)。我当时在想使用相关距离为(1-rho)的pam。这是推荐的方法吗?您能否建议一些探索的途径?
teucer

@Musa ..你能说清楚一点吗?我认为我不理解您提到的“动力”。绝对可以pam进行群集。但是您也可以尝试我提到的R包pvclust和hopach。同样,SOM(自组织图)是查看聚类的另一种方式。有关更多详细信息,请参阅Ripley和Venable(2002)的书籍-MASS。这本书对集群进行了详尽的论述。
suncoolsu

@suncoolsu:对不起,糟糕的公式!我有200个要建模(即模拟)的时间序列。我认为我可以将“相似”(即随时间具有相同的行为:直接的方法是使用相关性)时间序列进行聚类,并且仅模拟聚类时间序列...
teucer 2010年

4

这肯定是一个集群问题。签出Rs cluster包以获得算法选项的概述(pam并且agnes是开始的最佳选择;它们代表聚类中的两个主要流- 质心分层)。
在数据上使用聚类的主要问题是在页面之间定义良好的相似性度量。一个简单的方法就是使用曼哈顿距离;比方说,计算普通观众的数量并对其进行归一化处理要稍微复杂一点,比如说第一页和第二页的观众数量的平均值,这应该会使受欢迎程度的影响保持沉默。

页数×页数


我赞成你的回答。但是,请您在最后一句中提供报告的新链接。旧的已经死了。
discipulus 2015年

1
恐怕它会永远丢失...通常,它是关于聚类方法的实现的,该方法不会显式构建每个相似度矩阵,而是根据需要调查对象。

1

降维基本上是将聚类算法应用于属性(列)。由于数据集的维数很大,因此您可以尝试使用SOM(自组织地图/ Kohonen网络)为个人或页面创建地图。然后,您可以查看模式是否有意义(可解释)。


1

如果您进行PCA,我的建议是简短地筛选除前两个组件以外的其他组件。一旦有了prcomp对象pc(请参见suncoolsu的文章),就plot(pc)可以看到归因于不同主要成分的差异量。您也可以轻松地查看他们几个(通常是三或四个)用pairs(pc$x[,1:3])或使用latticesplom(pc$x[,1:3])

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.