一个无监督降维算法取一个矩阵NxC1作为输入,其中N是输入向量的个数,C1是每个向量的分量数(向量的维数)。结果,它返回一个新的矩阵NxC2 (C2 <C1),其中每个向量的分量数较低。>
模糊聚类算法将矩阵N*C1作为输入,这里的N是输入向量的个数,C1是每个向量的分量的个数。结果,它返回一个新的矩阵NxC2 (C2通常低于C1),其中每个向量的每个分量表示该向量属于相应簇的程度。
我注意到两类算法的输入和输出在结构上是相同的,只是对结果的解释发生了变化。此外,scikit-learn中没有模糊聚类实现,因此有以下问题:
使用降维算法执行模糊聚类有意义吗?例如,将FeatureAgglomeration或TruncatedSVD应用于从文本数据中提取的TF-IDF向量构建的数据集,并将结果解释为模糊聚类,这是没有意义的吗?
在某种意义上,是的。这取决于你想如何在下游使用结果。
考虑SVD截断或排除主成分。我们已经投射到一个新的,保持方差的空间,基本上没有对新流形结构的其他限制。原始数据点的新坐标表示对于某些元素可能有很大的负数,这有点奇怪。但是人们可以毫不费力地移动和调整数据。
然后可以将每个维度解释为集群成员权重。但是考虑一下模糊聚类的一个常见用途,即生成硬聚类。请注意,对于模糊聚类权重(例如,取最大值),这是多么容易。考虑新的降维空间中的一组点,例如<0,0,1>、<0,1,0>、<0,100,101>、<5,100,99>。如果有阈值,模糊聚类会给出{p1,p2}, {p3,p4}这样的值,但如果我们取这里的最大值(即将维数减少的轴视为隶属度),我们会得到{p1,p3},{p2,p4},例如k=2。当然,我们可以使用比max更好的算法来推导硬隶属关系(比如通过观察成对距离,这对我的例子很有效);这样的算法被称为聚类算法。
当然,不同的降维算法在这方面可能工作得更好或更差(例如,专注于保持数据点之间的距离而不是方差的MDS更自然地类似于聚类)。但从根本上说,许多降维算法隐式地保留了数据所在的底层流形的数据,而模糊聚类向量只保留了数据点之间关系的信息(这些信息可能隐式地编码其他信息,也可能不隐式地编码其他信息)。
总的来说,目的有点不同。聚类的目的是找到相似的数据组。特征选择和降维的目的是通过改变嵌入空间来减少数据的噪声和/或冗余。我们经常用后者来帮助前者。