分类/细分技术

机器算法验证 分类
2022-03-10 03:25:57

首先,让我说我在这里有点超出我的深度,所以如果这个问题需要重新措辞或关闭为重复,请告诉我。可能只是因为我没有合适的词汇来表达我的问题。

我正在从事一项图像处理任务,在该任务中我识别图像中的特征,然后根据它们的属性对它们进行分类,包括形状、大小、暗度等。我对图像处理部分非常有经验,但认为我可以改进用于特征分类的方法。

现在,我为每个测量的参数设置阈值,然后根据一些简单的逻辑对特征进行分类,即特征跨越了哪些阈值。例如(实际的属性和分组更复杂,但我试图简化我项目中与这个问题无关的部分),假设我将功能分组到“大与暗”、“大与轻”组中和“小”。然后是一个特征A将在“大而黑暗”iff(大小(A)>sizeThreshold) & (黑暗度(A)>黑暗阈值)。

目标是使分类与专家级人类所做的分类一致,因此我可以设置阈值以在某些测试集上产生人类和计算机进行的分组之间的最佳匹配,然后希望分类有效新数据很好。

这已经很好地工作了,但是我看到了一种我认为可以修复的特定故障模式。让我们说功能A已知属于“Big and Dark”。人类之所以这样分类,是因为虽然只是勉强够大,但它非常非常暗,这在一定程度上弥补了“大”的不足。我的算法无法正确分类这个特征,因为分类是基于严格的二进制逻辑,并且需要跨越所有阈值。

我想通过使我的算法更好地模仿人类引导过程来改善这种失败,其中一个参数的不足可以通过另一个参数的丰富来补偿。为此,我想获取我的特征的每个基本属性,并将它们转换为某种分数,这将是该特征所属组的预测因子。我已经想到了很多方法来做到这一点,但它们大多是临时的想法,基于我在向量微积分和物理学方面的背景。例如,我考虑将每个特征视为特征属性的 ND 空间中的一个向量,并计算每个特征沿某些向量的投影,每个向量都将衡量一个特征属于该组的程度。

我确信有一种更严格和更成熟的技术来做这类事情,但我的统计分析背景相对较弱,所以我正在寻找一个正确的方向。即使是技术的名称,或教科书的链接也会有所帮助。

TL;DR: 在基于大量描述性参数对对象进行分类时,哪些技术很有用?

1个回答

听起来任何线性分类器都可以满足您的需求。假设你有N特征和特征的价值ifi. 然后线性分类器将计算一个分数

s=iwifi+o
(在哪里o是偏移量)。那么,如果s>t(在哪里t是某个阈值),那么该特征属于一个类(一个组),如果s<t,那么它不会。请注意,对整个分数(而不是单个特征值)应用了一个阈值,因此确实可以通过另一个参数的丰度来弥补一个参数的不足。权重可以直观地解释,从某种意义上说,权重越高,该特征越重要(或更具决定性)。

有很多现成的线性分类器可以做到这一点,包括 SVM、LDA(线性判别分析)、线性神经网络等等。我会从运行线性 SVM 开始,因为它在很多情况下都能很好地工作,并且可以容忍有限的训练数据。很多环境下也有很多包(比如Matlab和R),大家可以轻松试用。SVM 的缺点是计算量很大,所以如果你需要学习很多类,它可能不太合适。

如果您想保留您当前拥有的一些阈值行为,您可以通过一个 sigmoid 传递特征值,阈值在正确的位置。例如对于一个功能i您当前使用的阈值ti,首先计算

gi=11+exp(fiti),
然后使用学习线性分类器g的而不是f的。这样,补偿行为只会发生在阈值附近,而距离阈值太远的东西无法得到补偿(这有时是可取的)。

您可以尝试的另一件事是使用概率分类器,例如朴素贝叶斯或 TAN。朴素贝叶斯几乎就像一个线性分类器,除了它计算

s=iwfii.
所以仍然有一个权重之和。这些权重取决于特征值fi,但不是像通常的线性分类器那样通过乘法运算。在这种情况下,分数是对数概率,权重是各个特征对该对数概率的贡献。在您的情况下使用它的缺点是您将需要许多箱来存储您的特征值,然后学习可能会变得困难。有一些方法可以解决这个问题(例如,使用先验),但是由于您没有这方面的经验,因此可能会更加困难。

关于术语:在这种情况下,您所谓的“测试集”通常称为“训练集”,而您所说的“新数据”则称为“测试集”。

对于一本书,我会阅读 Duda、Hart 和 Stork 的“模式识别”。第一章对初学者来说是一个很好的介绍。