监督机器学习:基于形状和密度对数据簇类型进行分类(Python)

监督机器学习:基于形状和密度对数据簇类型进行分类(Python),python,machine-learning,cluster-analysis,supervised-learning,Python,Machine Learning,Cluster Analysis,Supervised Learning,我有多组数据,在每组数据中有一个区域是香蕉形状的,两个区域是密集的斑点。我已经能够使用DBSCAN算法将这些区域与其他数据区分开,但是我想使用监督算法让程序知道哪个集群是香蕉,哪个两个集群是密集的斑点,我不确定从哪里开始 由于有3个类别(香蕉、blob、两者都不是),进行两个单独的逻辑回归是否是最佳方法(评估是否是香蕉,是否是blob)?或者有没有一个好方法将所有3个类别合并到一个神经网络中 这里有三个数据集。在每一个盒子里,香蕉是红色的。第一个是绿色和蓝色,第二个是青色和绿色,第三个是蓝色和绿

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

由于有3个类别(香蕉、blob、两者都不是),进行两个单独的逻辑回归是否是最佳方法(评估是否是香蕉,是否是blob)?或者有没有一个好方法将所有3个类别合并到一个神经网络中

这里有三个数据集。在每一个盒子里,香蕉是红色的。第一个是绿色和蓝色,第二个是青色和绿色,第三个是蓝色和绿色。我希望程序(现在已经区分了不同的区域),然后标记香蕉区域和斑点区域,这样我就不必每次运行代码时都手工拾取它们


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

你可以把神经网络设置成一个前馈网络。设置它,使你期望数据包含的每一类对象都有一个输出

编辑:如果我完全误解了这个问题,我很抱歉。我假设你有预先存在的数据,可以用来训练网络以区分集群


如果有3个类别,您可能有3个NN输出,或者每个类别可能有一个NN输出一个真值或假值。

当您使用python时,最好的选择之一是从一些大型库开始,提供许多不同的方法,以便您可以选择最适合您的方法图书馆是
sklearn

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

  • 支持向量机——这个模型已经存在了一段时间,并成为许多领域的金标准,主要是因为它优雅的数学解释和易用性(例如,它比经典神经网络的参数要少得多).这是一个二进制分类模型,但库自动为您提供多分类器版本
  • 决策树-非常容易理解,但会创建相当“粗糙”的决策边界
  • 随机森林-统计界常用的模型
  • K-最近邻-最简单的方法,但如果您可以如此轻松地定义数据的形状,它将提供非常好的结果,同时仍然非常容易理解
当然还有很多,但我建议从这些开始。它们都支持多类分类,因此您不需要担心如何将问题编码为三类,只需以两个矩阵的形式创建数据
x
y
,其中
x
是输入值,
y
是对应类的向量(例如从
1
3
的数字)

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

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

  • 重心(如果位置重要)
  • 偏度/峰度
  • 协方差矩阵(或其特征值)(如果旋转很重要)
  • 一类局部密度估计
  • 某些统计数据的直方图(如两个数据之间的成对欧氏距离直方图) 形状上的成对点)
  • 好多好多
这里有非常全面的列表和详细的概述(对于三维对象):

此外,还有内容丰富的演示:


描述一些描述符以及如何使它们具有缩放/位置/旋转不变性(如果与此相关)

我相信您仍然不清楚自己想要实现什么

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

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

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


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

我不确定这种方法对我会起什么作用。我添加了图像来澄清。在监督学习中,你必须创建一个训练集
(X,Y)
其中,
X
是您的输入和
Y
预期类的一些表示,每个建议的方法都可以学习这种映射,并能够为您提供任何新的
X
类。您的问题不清楚您是否要对点或簇进行分类。如果一个点非常简单,
X
是一个简单的点点的trix,如果一个簇需要以某种方式提取簇特征(curtosis?一些其他几何量,以将其表示为固定长度向量-
R^n
空间中的点)我已经知道哪些点在哪些簇中,现在我想根据它的形状来定义一个特定的簇。你必须从当前的簇表示(点集)中定义某种映射固定长度的实向量,因为它是大多数监督学习模型的预期输入。只需定义一组易于计算的几何特征,如质心(如果位置重要)、偏度、协方差矩阵(或其特征值)等,并将它们作为您的输入输入到一个(或全部)建议模型中