C++ 基于非密度的数据聚类算法

C++ 基于非密度的数据聚类算法,c++,c,algorithm,cluster-analysis,data-mining,C++,C,Algorithm,Cluster Analysis,Data Mining,我正在开发一个聚类分析程序,它将一组点S作为输入,并用它所属的聚类索引标记每个点。我已经实现了DBScan和光学算法,它们都按预期工作。 然而,根据MinPts和Epsilon的初始值,这些算法的结果可能会非常不同。我在网上到处搜索,读了很多关于数据挖掘和聚类分析的文章,但是我似乎找不到一种不需要MinPts和Epsilon来确定一个点是否在这样一个聚类中的方法来分析数据。 我猜基于密度的聚类分析在我的案例中不是一种可行的方法 是否有人有想法或知道我可以使用的不需要这种配置的算法? 或者简单地给

我正在开发一个聚类分析程序,它将一组点S作为输入,并用它所属的聚类索引标记每个点。我已经实现了DBScan和光学算法,它们都按预期工作。 然而,根据MinPts和Epsilon的初始值,这些算法的结果可能会非常不同。我在网上到处搜索,读了很多关于数据挖掘和聚类分析的文章,但是我似乎找不到一种不需要MinPts和Epsilon来确定一个点是否在这样一个聚类中的方法来分析数据。 我猜基于密度的聚类分析在我的案例中不是一种可行的方法

是否有人有想法或知道我可以使用的不需要这种配置的算法? 或者简单地给我指出正确的方向。欢迎任何帮助

谢谢

这是我试图完成的一个学校项目,其中我有一组二维坐标表示平面上的点,我必须确定每个点属于哪个簇。现在,我已经使用光学系统完成了这项工作,它运行良好,但我需要调整Eps值,以便我的输出与给定的示例输出匹配。但是,由于我没有描述主体中的簇是什么,或者它的特征是什么,因此我无法仅基于点之间的距离,或者给定区域中点的密度。另外,我事先不知道簇的数量,因此我使用了光学算法。所以在我看来,要么我做得非常错误,要么这个主题中缺少了一条关键信息。 而且,我不想找任何人做我的作业或给我任何源代码,只是一些想法或指导,因为我几乎失去了如何得到正确的结果在数据集的例子(我也不允许得到任何错误的值,如果我认为他们是一个失败的项目,所以错误的算法不能使用)。
再次感谢,并为这篇冗长的文章感到抱歉。

通常,一组点可以以多种方式分配给簇(例如,它们都可以分配给一个大簇,或者分为两个或三个),因此您必须有一些参数

你为什么反对MinPts和Epsilon?如果你不喜欢改变它们时发生的事情,就不要改变它们。真的

编辑:
多么奇怪的任务!你的聚类必须完全匹配他们的,没有其他线索?我将假设他们既不是白痴也不是虐待狂,并做出以下猜测:在这些例子中,有一个“自然”的集群,这是显而易见的。我说得对吗?如果是这样,那么有一种方法可以通过编程设置参数,作为点集中距离的函数。有多少个例子,可以发布一个吗

编辑:

哈!我就知道!这里有一条规则可以正确地将这种情况划分为多个簇:找到从任何点到最近邻点的最大距离,如果任意两点之间的距离小于该距离的两倍,则它们属于同一簇。我敢打赌它在其他情况下也会起作用。

你可以试着调查其他许多情况。您有概率聚类(EM)、分区聚类(KMeans)、层次聚类和许多其他。。。当然,每一种都需要不同的配置

还要确保尝试,这是一个开源工具,包含大量的机器学习算法(分类、聚类、预处理等)。我相信它有一个实现(Java)来实现上面提到的所有内容



编辑:确定哪种聚类最好的问题非常依赖于域。归根结底,集群在应用程序上下文中的使用方式决定了它们的有用性(此外,您的数据可能有多个自然集群).

我不能使用k-means或任何类似的算法,因为我事先不知道我拥有的簇的数量。有一种称为
XMeans
的算法的变体,它不需要预先知道簇的数量(它基于最小描述长度(MDL)的概念,使用BIC等度量)实际上DBSCAN的拼写是DBSCAN。它是一个缩写,例如N代表“噪音”。光学不应该依赖于Epsilon值,如果你没有加速度的指数,你可以忽略它。我不反对使用MinPts和Eps。在我的程序的当前版本中,我已经采用了光学算法,但在我看来,使用基于距离的分析是相当模糊的,你可以使用任何类型的Eps值,得到非常不同的结果,我只是不知道还有什么“类型”我应该/可能使用的算法。你认为会有一种基于输入数据集计算最佳Eps和MinPts值的方法吗?@u dominic:“最佳”在什么意义上?你必须决定你想要达到什么,你想在集群中获得什么品质,你想避免什么问题。你能给我们更多关于这个工具将如何使用的信息吗?我在这里上传了一个例子:总共有5个例子,是的,正如你所看到的,聚类是肉眼可见的,但算法本身无法猜测。我尝试了一些基于你所说的东西,我在运行algo之前绘制了我的点,然后使用实际的映射坐标(从文件中的坐标到绘制点的像素位置),并使用固定的Eps值,虽然我得到了正确的结果,但有时我会有一些错误的值,我需要精确地匹配所有值。多谢你抽出时间来帮助我。@u dominic:每个点都离最近的邻居有一段距离;选择这些距离中的最大距离。Weka没有太多群集支持。那里的DBSCAN和光学系统的实现是不完整的。见鬼,他们连DBSCAN的拼写都不正确。我觉得它非常有用