监督机器学习:根据形状和密度对数据集群进行分类(Python)

我有多个数据集,每个数据集中都有一个类似香蕉形状的区域和两个密集的团块区域。我已经使用DBSCAN算法成功地将这些区域与其他数据区分开来,但我想使用监督算法让程序能够识别哪个集群是香蕉,哪两个集群是密集的团块,我不知道该从哪里开始。

由于有三种类别(香蕉、团块、其他),使用两个独立的逻辑回归是否是最佳方法(评估是否为香蕉或非香蕉,以及是否为团块或非团块)?还是有好的方法将所有三个类别整合到一个神经网络中?

这里有三个数据集。在每个数据集中,香蕉是红色的。在第一个数据集中,两个团块是绿色和蓝色;在第二个数据集中,团块是青色和绿色;在第三个数据集中,团块是蓝色和绿色。我希望程序能够(在区分出不同区域后)自动标记香蕉和团块区域,这样我每次运行代码时就不必手动选择它们了。

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


回答:

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

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

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

当然还有许多其他模型,但我建议从这些开始。它们都支持多类分类,因此您无需担心如何编码三个类的问题,只需创建两个矩阵xy形式的数据,其中x是输入值,y是相应类别的向量(例如,从13的数字)。

来自库的不同分类器的可视化:

分类器比较

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

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

这里有一个相当全面的列表和详细的概述(适用于三维对象):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

描述了一些描述符以及如何使它们在尺度/位置/旋转上保持不变(如果在这里相关的话)

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

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