我正在试验的数据集的形式是一个表的形式,列有userid和itemid。如果有给定用户和给定项的行,这意味着用户访问该项(类似于在线商店)。我试图根据这些数据对类似的项目进行聚类。如果经常一起访问一对项,那么这些项是相似的。
因为这是一个高维的例子(用户和条目的#将在10,000‘S中),我认为我有理由尝试使用SVD作为聚类前步骤,然后进行一些经典的聚类。当我尝试这样做时,与简单的分层聚类相比,我得到了糟糕的聚类结果。不太相似的东西被放在一个维度中,而可用的维度却没有被使用。结果并不是完全随机的,但它们肯定比分层聚类的输出更糟糕。我用Mahaut和Octave尝试了SVD步骤,结果相似。对于分层聚类,我使用了Jaccard度量。
在这一点上,我开始怀疑SVD作为降低维数的方法的概念。你认为SVD在这种情况下不能有效使用(为什么?)还是你觉得我在路上犯了什么错误?
发布于 2014-10-02 08:58:18
我们使用奇异值分解的方式与您完全相同,除了没有聚类相似的项外,我们使用一个降秩矩阵来驱动基于潜在语义索引中的术语文档矩阵的推荐引擎。
从你的简短描述来看,你的方法似乎足够合理。但是,我强烈建议您阅读贝里,杜迈斯&O‘’Brien的线性代数用于智能信息检索。
使用SVD的关键是为原始稀疏矩阵选择一个可接受的秩k逼近。您应该使用对角线矩阵Sigma中的奇异值进行一些探索性分析,以了解可以解释多少方差。这个问题是在关于越值化的这个问题提出的。
我读过的许多论文都指出,在任何地方,k的等级都是200到300个奇异值。在概念实现的证明中,我们有大约10000行的原始稀疏矩阵(唯一的术语)到大约1000个列(唯一的文档),并且我们仅用300个奇异值捕获了方差的85%以下。
然而,这真的取决于你的数据的性质,所以你的里程可能会有所不同。
https://datascience.stackexchange.com/questions/1191
复制相似问题