2

我有多组数据,在每组数据中都有一个有点香蕉形的区域和两个密集的斑点区域。我已经能够使用 DBSCAN 算法将这些区域与其余数据区分开来,但我想使用监督算法让程序知道哪个簇是香蕉,哪两个簇是密集的斑点,我不知道从哪里开始。

由于有 3 个类别(香蕉、斑点,两者都不是),做两个单独的逻辑回归是否是最好的方法(评估它是香蕉还是非香蕉,以及它是 Blob 还是非 Blob)?还是有一种将所有 3 个类别合并到一个神经网络中的好方法?

这是三个数据集。在每一个中,香蕉都是红色的。第一个,两个斑点是绿色和蓝色,第二个斑点是青色和绿色,第三个斑点是蓝色和绿色。我希望程序能够(现在已经区分了不同的区域,然后标记香蕉和 blob 区域,这样我就不必每次运行代码时都手动选择它们。

数据集 1 数据集 2 数据集 3

4

3 回答 3

2

在您使用python时,最好的选择之一是从一些大型库开始,提供许多不同的方法,以便您可以选择最适合您的方法。此类库之一是sklearn http://scikit-learn.org/stable/

回到问题本身。您应该尝试哪些模型?

  • 支持向量机——这个模型已经存在了一段时间,并成为许多领域的黄金标准,主要是由于其优雅的数学解释和易用性(例如,它比经典神经网络要担心的参数要少得多)。它是一个二元分类模型,但库会自动为您创建一个多分类器版本
  • 决策树 - 非常容易理解,但创建了相当“粗略”的决策边界
  • 随机森林 - 经常在更多统计社区中使用的模型,
  • K-nearest neighours - 最简单的方法,但如果您可以如此轻松地定义数据的形状,它将提供非常好的结果,同时保持非常容易理解

当然还有很多其他的,但我建议从这些开始。它们都支持多类分类,因此您不必担心如何对三个类的问题进行编码,只需以两个矩阵的形式创建数据,x输入值y在哪里,并且是对应类的向量(例如数字从到)。xy13

库中不同分类器的可视化:

分类器比较

所以如何表示一个簇的形状仍然是一个问题——我们需要一个固定长度的实值向量,那么特征实际上可以表示什么?

  • 质心(如果位置很重要)
  • 偏度/峰度
  • 协方差矩阵(或其特征值)(如果旋转很重要)
  • 某种局部密度估计
  • 一些统计数据的直方图(如形状上成对点之间的成对欧几里德距离的直方图)
  • 很多很多!

这里有相当全面的列表和详细的概述(对于三维对象): http ://web.ist.utl.pt/alfredo.ferreira/publications/DecorAR-Surveyon3DShapedescriptors.pdf

还有相当丰富的介绍: http ://www.global-edge.titech.ac.jp/faculty/hamid/courses/shapeAnalysis/files/3.A.ShapeRepresentation.pdf

描述一些描述符以及如何使它们缩放/位置/旋转不变(如果在这里相关)

于 2013-08-16T18:44:00.883 回答
0

我相信你仍然不清楚你想要实现什么

这当然很难给你一个好的答案。

您的数据似乎是 3D 的。例如,在 3D 中,您可以计算集群的 alpha 形状,并检查它是否是的。因为你的“香蕉”可能不是凸的,而你的斑点是。

您还可以测量例如集群中心是否真的在您的集群内。如果不是,则集群不是 blob。您可以测量沿三个轴的延伸是否相同。

但最后,你需要一些“香蕉”的概念。

于 2013-08-17T10:01:09.837 回答
0

如果神经网络有帮助,“pybrain”库可能是最好的。

您可以将神经网络设置为前馈网络。设置它,以便为您希望数据包含的每一类对象都有一个输出。

编辑:对不起,如果我完全误解了这个问题。我假设您有预先存在的数据,您可以提供这些数据来训练网络以区分集群。

如果有 3 个类别,您可以为 NN 提供 3 个输出,或者每个类别可能只有一个 NN,仅输出真值或假值。

于 2013-08-16T18:30:29.563 回答