带有度量条件的平面聚类

在我的集合中给定对象的度量,我需要形成满足两个条件的聚类:

  • 聚类中任何对象与其最远邻居之间的距离必须小于t1。
  • 聚类中任何对象与其最近邻居之间的距离必须小于t2。

目前我使用的是具有覆盖度量函数(对于远距离对象为0)的凝聚聚类方法,但感觉不太合适。

enter image description here


回答:

方法1:SAT求解

对于n个对象,所有可能的聚类可以用一个对称的二进制矩阵{0, 1}^{n \times n}来描述。位置(i, j)处的元素描述了对象i是否与对象j在同一个聚类中。这意味着你将有

(n^2 + n)/2 - n = n^2 - n

个二进制变量。在你的情况下将是224 985 000个变量。这很多。然而,如果你能将其简化为SAT求解问题,这仍然是可行的。我猜这取决于满足约束条件但仍不理想的聚类有多少。

现在你可以将其转化为布尔可满足性问题:

聚类中任何对象与其最远邻居之间的距离必须小于t1。

这个约束使得矩阵中的某些元素被设为0,因为它们相距太远。

聚类中任何对象与其最近邻居之间的距离必须小于t2。

我想你指的是聚类中的最近邻居。这意味着要么o不在任何聚类中(例如,如果o的索引为i,则对于所有j,(i, j) = 0),要么一组可预先计算的j中的一个必须为1。因此,对于索引为i的每个对象,你在这里会得到类似这样的约束

((i, 0) = 0 且 (i, 1) = 0 且 ... 且 (i,i)=1 且 ... 且 (i,n)=0) 或 ((i, k1)=1 或 (i, k2)=1 或 (i, k3)=1)

其中dist(i, k_j) < t2。

现在你可以尝试简单地遍历许多解并找到最佳解(例如,轮廓系数),或者你可以尝试更复杂的方法。有关更多信息,请参阅约束优化

方法2:DBSCAN

你可以使用DBSCAN(或该家族的其中一种算法),设置epsilon = t2。然后,如果有必要的话,如果聚类不满足第一个条件,就分割聚类。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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