如何高效地评估分类器的准确性

即使使用像最近邻这样的简单分类器,我也无法判断其准确性,因此无法进行改进。

例如,以下是我的代码:

IDX = knnsearch(train_image_feats, test_image_feats);    predicted_categories = cell([size(test_image_feats, 1), 1]);    for i=1:size(IDX,1)        predicted_categories{i}=train_labels(IDX(i));    end

这里,train_image_feats 是一个 300 行 256 列的矩阵,每一行代表一张图像。test_image_feats 的结构相同。train_labels 是训练矩阵每行对应的标签。

我所参考的书籍简单地提到上述方法达到了 19% 的准确率。

作者是如何得出这一结论的?有没有什么方法可以评估我的结果的准确性,无论是使用这个分类器还是其他分类器?

作者随后使用了另一种特征提取方法,并称其提高了 30% 的准确率。

我该如何找到准确性?无论是通过图形展示还是简单地用百分比表示。


回答:

在进行机器学习和分类时,准确性通常是通过将分类器的预测输出与真实值进行比较来计算的。在评估分类器的分类准确性时,你已经使用已知输入和输出的训练集创建了一个预测模型。此时,你将有一个测试集,其输入和输出用于训练分类器。为了本文的目的,我们称这个测试集为真实值数据集。这个真实值数据集有助于评估当你向分类器提供它之前未见过的输入时,分类器的准确性。你从测试集中获取输入,并通过分类器运行它们。你会为每个输入得到输出,我们将这些输出的集合称为预测值

对于每个预测值,你将其与相关的真实值进行比较,看是否相同。你将所有预测值与真实值匹配的实例加起来。将所有这些值加起来,并除以测试集中的总点数,就可以得到模型相对于真实值准确预测结果的实例比例。

在 MATLAB 中,这很容易计算。假设你的模型类别是从 1N 编号的,其中 N 是你用于分类的总标签数。让 groundTruth 成为表示真实值的标签向量,而 predictedLabels 表示由分类器生成的标签。准确性简单地计算为:

accuracy = sum(groundTruth == predictedLabels) / numel(groundTruth);accuracyPercentage = 100*accuracy;

第一行代码计算你的模型的准确性作为一个分数。第二行代码将其计算为百分比,你只需将第一行代码乘以 100 即可。你可以根据需要使用其中任何一种来评估准确性。一个是标准化为 [0,1] 之间的值,而另一个是 0% 到 100% 的百分比。groundTruth == predictedLabels 所做的是比较 groundTruthpredictedLabels 之间的每个元素。如果 groundTruth 中的第 i 个值与 predictedLabels 中的第 i 个值匹配,我们输出 1。如果不匹配,我们输出 0。这将是一个由 0 和 1 组成的向量,因此我们只需将所有值为 1 的值加起来,这在 sum 操作中得到了优雅的封装。然后我们除以测试集中的总点数,以获得分类器的最终准确性。

举个简单的例子,假设我有 4 个标签,我的 groundTruthpredictedLabels 向量如下:

groundTruth =     [1 2 3 2 3 4 1 1 2 3 3 4 1 2 3];predictedLabels = [1 2 2 4 4 4 1 2 3 3 4 1 2 3 3];

使用上述向量计算的准确性为:

>> accuracyaccuracy =    0.4000>> accuracyPercentageaccuracyPercentage =    40

这意味着我们有 40% 的准确率或 0.40 的准确性。使用这个例子,预测模型在将每个测试集输入通过分类器时,只能准确分类 40% 的测试集。这是有道理的,因为在我们的预测输出和真实值之间,只有 40%,即 6 个输出是匹配的。这些是第 1、2、6、7、10 和 15 个元素。计算准确性的其他指标,如ROC 曲线,但在机器学习中计算准确性时,通常是这么做的。

Related Posts

L1-L2正则化的不同系数

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

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

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

f1_score metric in lightgbm

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

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

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

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

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

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

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

发表回复

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