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

我想将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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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