我有多个数据集,每个数据集中都有一个类似香蕉形状的区域和两个密集的团块区域。我已经使用DBSCAN算法成功地将这些区域与其他数据区分开来,但我想使用监督算法让程序能够识别哪个集群是香蕉,哪两个集群是密集的团块,我不知道该从哪里开始。
由于有三种类别(香蕉、团块、其他),使用两个独立的逻辑回归是否是最佳方法(评估是否为香蕉或非香蕉,以及是否为团块或非团块)?还是有好的方法将所有三个类别整合到一个神经网络中?
这里有三个数据集。在每个数据集中,香蕉是红色的。在第一个数据集中,两个团块是绿色和蓝色;在第二个数据集中,团块是青色和绿色;在第三个数据集中,团块是蓝色和绿色。我希望程序能够(在区分出不同区域后)自动标记香蕉和团块区域,这样我每次运行代码时就不必手动选择它们了。
回答:
由于您使用的是python
,最好的选择之一是从一些大型库开始,这些库提供了许多不同的方法,以便您可以选择最适合自己的方法。这样的库之一是sklearn
http://scikit-learn.org/stable/ 。
回到问题本身。您应该尝试哪些模型?
- 支持向量机 – 这个模型已经存在了一段时间,并且在许多领域成为了黄金标准,主要是因为其优雅的数学解释和易用性(例如,它的参数远少于经典的神经网络)。它是一个二元分类模型,但库会自动创建多分类版本供您使用
- 决策树 – 非常容易理解,但创建的决策边界相当“粗糙”
- 随机森林 – 在更统计学界常用的模型,
- K-最近邻 – 最简单的接近方法,但如果您能轻松定义数据的形状,它将提供非常好的结果,同时保持非常易于理解
当然还有许多其他模型,但我建议从这些开始。它们都支持多类分类,因此您无需担心如何编码三个类的问题,只需创建两个矩阵x
和y
形式的数据,其中x
是输入值,y
是相应类别的向量(例如,从1
到3
的数字)。
来自库的不同分类器的可视化:
因此,问题仍然是如何表示集群的形状 – 我们需要一个固定长度的实值向量,那么特征实际上可以代表什么?
- 质心(如果位置重要)
- 偏度/峰度
- 协方差矩阵(或其特征值)(如果旋转重要)
- 某种局部密度估计
- 某些统计数据的直方图(如形状上点对之间欧几里得距离的直方图)
- 还有很多很多!
这里有一个相当全面的列表和详细的概述(适用于三维对象):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
描述了一些描述符以及如何使它们在尺度/位置/旋转上保持不变(如果在这里相关的话)