使用交叉验证的KNN分类器

我正在尝试使用交叉验证方法实现KNN分类器,其中我有不同字符的图像用于训练(例如5张图像),另外两张用于测试。现在我通过在训练时简单地选择错误值最小的K来理解交叉验证的概念,然后使用它来测试数据以找出我的结果有多准确。

如何在MATLAB中训练图像以获得我的K值?我应该比较它们并尝试找出不匹配的地方,还是其他什么?


回答:

首先,您需要精确定义您的任务。例如,给定图像I在R^(MxN)中,我们希望将I分类为包含人脸的图像或不包含人脸的图像。

我经常使用像素分类器,其任务类似于:对于图像I,决定每个像素是否为人脸像素或非人脸像素。

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

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

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

当您了解了您的任务和特征后,您可以训练分类器。如果您使用kNN和交叉验证来找到最佳的k,您应该将数据集分为训练/测试集,然后将训练集分为训练/验证集。然后使用减少的训练集进行训练,并使用验证集来决定哪个k是最佳的。在二元分类的情况下,例如人脸与非人脸,错误率通常用作性能的衡量标准。

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

分类示例:有无牛奶?

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

我们希望训练一个分类器,以便它可以区分带牛奶的咖啡和不带牛奶的咖啡。通过检查一些咖啡图像的直方图,我们发现每个图像在直方图中有两个明显分离的“凸起”。我们认为这些凸起对应于前景(咖啡)和背景。现在我们提出一个假设,即前景的平均强度可以用来区分带牛奶的咖啡和不带牛奶的咖啡。

为了找到前景像素,我们观察到因为前景/背景比例相同(设计使然),我们可以为每张图像找到给出该比例的强度值。然后我们计算前景像素的平均强度,并将此值用作每张图像的特征。

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

我们使用交叉验证来寻找最佳的k。我们使用2折交叉验证(也称为holdout)来找到最佳的k。我们测试k = {1,3,5},并选择在验证集上给出最低预测错误的k。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注