使用基于距离的方法对分类数据集进行聚类

我想将ROCK聚类算法与基于距离的算法进行比较。假设我们有(m)个训练样本和(n)个特征

ROCK:

据我所知,ROCK所做的是

1. 它使用Jaccard系数计算一个(m*m)的相似性矩阵。2. 然后用户提供一个阈值。3. 根据阈值,它连接数据点,具有更多共同邻居的数据点被认为在同一个聚类中。例如,让我们看下面的png文件,

enter image description here

   上图显示了相似性矩阵,并假设阈值为0.2。4. 算法然后计算点之间的链接,如下所示。   对于A- A   (只有A超过阈值)     B- BCD (因为bb, bc和bd超过阈值)    C- BCD    D- BCD现在由于B, C和D每个都有3个共同的邻居,它们被分组到同一个聚类中。因此我们得到两个聚类{A}, {BCD}

基于距离的方法:

1. 我采取了一种不同的方法,但像ROCK一样,我也创建了相似性矩阵。2. 我也计算了初始链接,如下所示,   对于A- A   (只有A超过阈值)        B- BCD (因为bb, bc和bd超过阈值)       C- BCD       D- BCD3. 现在不是寻找邻居,我进行了一些操作并找到最佳的中心点。4. 找到中心点后,我在相似性矩阵(m*m)上运行k-means聚类算法。5. 由于我事先找到了中心点,算法所需的时间减少了,因为不需要多次运行k-means算法来选择随机的中心点。

问题陈述:

我看到的问题是空间复杂度,因为相似性矩阵是一个(m*m)矩阵,如果m的值太大,比如100万,存储这么大的矩阵会很困难,而且由于矩阵的大小,欧几里得距离计算需要时间。

然而,我认为在ROCK中,完全没有必要存储矩阵,因为当计算数据集之间的Jaccard系数时,可以即时构建链接。

我对蘑菇数据集(可在uci.org获得)使用了基于距离的算法方法,输出结果与ROCK非常相似,对于其他一些数据集甚至更好。

问题:

1. 我对ROCK的理解是否正确。2. 是否值得考虑创建如此大的相似性矩阵并存储在磁盘上,然后稍后使用它来计算距离。3. 如果有人能提供基于距离方法的大O复杂度,我将不胜感激。

谢谢:)


回答:

据我所知,随着数据规模的增加,聚类变得非常耗费内存,你需要想办法降低数据的维度。

我不熟悉ROCK,但我之前处理过聚类问题,其中我需要对数百万份文档进行聚类。

距离计算度量:levenshtein距离聚类算法:DBSCAN

回到你的问题

问题2:是否值得考虑创建如此大的相似性矩阵并存储在磁盘上,然后稍后使用它来计算距离。

我从不建议构建大型矩阵。例如,构建100万个单词的距离矩阵将需要4TB的空间。你需要使用某种分块技术来将相似文档分组,然后在其上应用聚类算法。

3. 如果有人能提供基于距离方法的大O复杂度,我将不胜感激。

通常,计算两个单词之间的距离的时间复杂度是微不足道的,因为单词不是太长。你的复杂度将是比较的数量,所以如果你有n个单词,那么时间复杂度将是O(n*n)

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注