二值图像分类选择啥算法

Posted

技术标签:

【中文标题】二值图像分类选择啥算法【英文标题】:What algorithm to chose for binary image classification二值图像分类选择什么算法 【发布时间】:2017-07-19 12:00:22 【问题描述】:

假设我在数据集中有两个数组:

1) 第一个是数组分类为 (0,1) - [0,1,0,1,1,1,0.....]

2) 灰度图像向量的第二个数组costists,每个元素有2500个元素(数字从0到300)。这些数字是来自 50*50px 图像的像素。 - [[13 160 239 192 219 199 4 60..][....][....][....][....]]

这个数据集的规模非常大(约 12000 个元素)。 我正在尝试构建将给出适当结果的 bery 基本二进制分类器。可以说我想选择非深度学习但有监督的方法。 在这种情况下是否合适?我已经尝试过具有各种参数的 sklearn 的 SVM。但是结果是不恰当的不准确,主要由1组成:[1,1,1,1,1,0,1,1,1,....]

什么是正确的方法?数据集的大小不足以通过监督算法获得好的结果吗?

【问题讨论】:

【参考方案1】:

您可能应该在cross-validated 上发布此内容: 但作为一个直接的答案,您可能应该考虑对学习者进行排序,因为您已经清楚 SVM 不是解决此问题的理想解决方案。

如果您不想走deep learning 路线,您应该查看Markov models 进行顺序学习,但是,Neural Networks 在图像分类问题上有着非常好的记录。

理想情况下,对于顺序学习,您应该尝试查看Long Short Term Memory Recurrent Neural Networks,并针对您当前的数据集查看是否在现有数据语料库(例如CIFAR-10)上对其进行预训练可能会有所帮助。

所以我的建议是尝试使用高级库,例如 Keras/SKFlow。 神经网络只是您机器学习库中的另一个工具,您不妨给它们一个真正的机会。

编辑以解决您的评论: 您的问题是 SVM 不缺少数据, 对于小型数据集,SVM 可以很好地工作,因为它更容易在该数据集上过拟合/拟合分离超平面。 当您增加数据维度时,请记住,使用分离超平面将其分离变得越来越困难[看看维度的诅咒]。 但是,如果您打算这样做,请尝试一些降维 比如 PCA。

虽然在这里您一定会发现神经网络的另一个障碍, 由于 Kohonen 自组织地图完美地完成了这项任务,您可以尝试 将您的数据投影到较低的维度,从而使 SVM 能够以更高的准确度对其进行分离。 我仍然不得不说你可能使用了不正确的方法。

【讨论】:

SVM 在我的例子中适用于减少的数据集。假设最多 3000 个元素(12000 个)最终得分为 ~0.7 。但是如果我想提高准确性,我需要更多的数据来训练。在这种情况下,SVM 变得太慢了 我还是这个领域的新手,有时会导致“使用正则表达式解析 html”。这就是我发布这个问题的原因。如果 SVM(即使使用 PCA)不好,那么我会将其作为默认值,更好地专注于构建 NN 如果你还想尝试 SVM,看看 isomap(sklearn 有一个实现)可能就足够了。祝你探索顺利

以上是关于二值图像分类选择啥算法的主要内容,如果未能解决你的问题,请参考以下文章

opencv 我想给分割出来的数字二值化图片去噪。请问可以用啥方式?

图像处理之积分图应用四(基于局部均值的图像二值化算法)

图像类型分类

准确的二值图像分类

图像灰度化、二值化理解

二值图像连通域标记算法优化