Matlab 基于交叉验证的KNN分类器

Matlab 基于交叉验证的KNN分类器,matlab,machine-learning,knn,cross-validation,Matlab,Machine Learning,Knn,Cross Validation,我正在尝试使用交叉验证方法实现KNN分类器,其中我有用于训练的特定字符的不同图像(例如5个图像),还有两个用于测试。现在我得到了交叉验证的概念,只需在训练时选择误差最小的K值,然后将其与测试数据一起使用,以发现我的结果有多准确 我的问题是如何在matlab中训练图像以获得我的K值?我是否要比较它们,并试图找出不匹配的情况 任何帮助都将不胜感激 首先,你们需要精确定义你们的任务。F.ex给定R^(MxN)中的图像I,我们希望将I分类为包含面的图像或没有面的图像 我经常使用像素分类器,其任务类似于:

我正在尝试使用交叉验证方法实现KNN分类器,其中我有用于训练的特定字符的不同图像(例如5个图像),还有两个用于测试。现在我得到了交叉验证的概念,只需在训练时选择误差最小的K值,然后将其与测试数据一起使用,以发现我的结果有多准确

我的问题是如何在matlab中训练图像以获得我的K值?我是否要比较它们,并试图找出不匹配的情况


任何帮助都将不胜感激

首先,你们需要精确定义你们的任务。F.ex给定R^(MxN)中的图像I,我们希望将I分类为包含面的图像或没有面的图像

我经常使用像素分类器,其任务类似于:对于图像,我决定每个像素是面部像素还是非面部像素

定义任务的一个重要部分是提出一个假设,该假设可作为训练分类器的基础。我们相信像素强度的分布可以用来区分人脸图像和不包含人脸的图像

然后,您需要选择一些定义图像的特征。这可以通过多种方式完成,您应该搜索其他人在分析您正在处理的同一类型图像时所做的事情

像素分类中一种广泛使用的方法是使用像素强度值并对图像进行多尺度分析。多尺度分析的思想是,在称为尺度的不同模糊程度上,不同的结构最为明显。作为一个例子,考虑一棵树的图像。在不模糊的情况下,我们注意到细微的结构,例如小树枝和树叶。当我们模糊图像时,我们注意到主干和主要分支。这通常被用作分割方法的一部分

当您知道您的任务和特性时,您可以训练分类器。如果使用kNN和交叉验证找到最佳k,则应在训练/测试中拆分数据集,然后在训练/验证集中拆分训练集。然后使用简化的训练集进行训练,并使用验证集来决定哪个k是最好的。在二元分类的情况下,例如人脸与非人脸,错误率通常被用作性能的衡量标准

最后,使用这些参数在完整数据集上训练分类器,并在测试集上估计其性能

分类示例:加牛奶还是不加牛奶?

作为一个完整的例子,考虑从上面拍摄的一杯咖啡的图像,这样它显示杯子的边缘围绕褐色的圆盘。进一步假设所有图像都经过缩放和裁剪,因此磁盘的直径相同,图像的尺寸相同。为了简化任务,我们将彩色图像转换为灰度,并将像素强度调整为[0,1]范围

我们想训练一个分类器,使其能够区分有奶咖啡和无奶咖啡。通过检查一些咖啡图像的直方图,我们可以看到每个图像在直方图中有两个明显分开的“凸起”。我们认为这些凸起对应于前景(咖啡)和背景。现在我们假设前景的平均强度可以用来区分咖啡+牛奶/咖啡

为了找到前景像素,我们观察到,因为前景/背景比率是相同的(通过设计),我们可以找到为每个图像提供该比率的强度值。然后,我们计算前景像素的平均强度,并使用该值作为每个图像的特征

如果我们有N个手动标记的图像,我们将其拆分为训练集和测试集。然后,我们计算训练集中每个图像的平均前景强度,给我们一组(平均前景强度,标签)值。我们希望使用kNN,其中图像被指定为与k个最近图像的大多数类相同的类。我们将距离测量为平均前景像素强度差的绝对值


我们通过交叉验证寻找最优k。我们使用2倍交叉验证(aka holdout)来寻找最佳k。我们测试k={1,3,5},并选择在验证集上给出最小预测误差的k。

@Silas…是的,我已经有了训练和测试数据。正如我从您那里了解到的,我需要在训练时定义一些东西,以便在测试时查找。例如,如果图像包含一定数量/颜色的像素,则将对其进行匹配。问题是,它是否需要完全匹配,或者至少大部分都存在。示例:前3行像素应代表对象像素测试:前3行是对象像素,但一些像素是背景像素…是否匹配?!如果我错了,请纠正我。@omarsafwany我已经添加了一个方法示例。需要注意的一点是,分类的难度与任务的一般性有关。因此,Google streetview中的对象识别/分类比咖啡示例要困难得多。