我正在尝试创建一个Document Clustering项目(用Java编写)。最多可以有100万个文档,我想制作无监督的集群。为此,我试图用高斯混合模型实现EM算法。
但是,我不知道如何制作文档向量。
我正在考虑这样的事情,首先我将为文档中的每个单词计算TF / IDF(在删除停用词和完成后)。
然后我会规范化每个向量。在这个阶段,问题出现了,我该如何通过一个点来表示一个向量?可能吗?
我从这个(https://www.youtube.com/watch?v=iQoXFmbXRJA)视频中了解了EM算法,其中1-D点用于GMM并用于EM。
任何人都可以解释如何在一维点转换矢量以实现GMM的EM吗?
如果我的方法有误,你能解释一下如何用简单的话来做整件事吗?对不起我的长话题。谢谢你的帮助!
答案 0 :(得分:0)
对于GMM,我会从比EM更简单的事情开始。如果您事先知道群集的数量,请使用K-Means。否则,请使用Mean Shift。
如果您必须学习GMM,请注意它可以使用N-D特征向量。如果必须将功能减少到单个维度,则可以使用PCA(或其他一些数据维数减少)算法来执行此操作。
在任何情况下,您都可以在网上找到这些算法的实现,而不必自己实现,这会降低您的项目速度。
答案 1 :(得分:0)
如果您要聚集那么多文档,您也可以考虑使用K-Medoids,它会使用随机化(基本上)创建初始质心。至于将矢量表示为一个点,在我的经验中,这是非常粗略的。我过去所做的是在SortedMap中存储术语向量,删除你想要的无关项,将向量标准化为稀疏表示,然后你可以使用余弦相似度或欧几里德距离(倒置)来衡量相似度。我使用过JavaML,Weka,并推出了自己的无监督聚类。 JavaML中的KMedoid非常好,你必须将你的向量减少到double []数据结构(当然是规范化的)并使用它们的数据集对象。 HTH