进行机器学习和分类时的准确度通常是通过将分类器的预测输出与基本事实进行比较来计算的。当您评估分类器的分类准确性时,您已经使用具有已知输入和输出的训练集创建了预测模型。此时,您将拥有一个测试集,其中包含未用于训练分类器的输入和输出。出于本文的目的,我们将其称为 ground truth 数据集。当您向该分类器提供以前从未见过的输入时,此基本事实数据集有助于评估分类器的准确性。您从测试集中获取输入,并通过分类器运行它们。您可以获得每个输入的输出,我们将这些输出的集合称为预测值。
对于每个预测值,您将与相关的真实值进行比较,看看它是否相同。您将所有输出匹配在预测和基本事实之间的实例相加。将所有这些值相加,然后除以测试集中的总点数,得出与基本事实相比,您的模型准确预测结果的实例比例。
在 MATLAB 中,计算起来非常简单。假设您的模型类别从1 枚举到N,其中N 是您分类的标签总数。让groundTruth 成为表示基本事实的标签向量,而predictedLabels 表示从分类器生成的标签。准确率简单计算如下:
accuracy = sum(groundTruth == predictedLabels) / numel(groundTruth);
accuracyPercentage = 100*accuracy;
第一行代码计算模型的准确度作为分数。第二行将其计算为百分比,您只需将第一行代码乘以 100。您可以使用其中一个,也可以在您想要评估准确性时使用。一个只是在[0,1] 之间标准化,而另一个是从 0% 到 100% 的百分比。 groundTruth == predictedLabels 所做的是比较groundTruth 和predictedLabels 之间的每个元素。如果groundTruth 中的第ith 值与predictedLabels 中的ith 值匹配,我们输出1。如果不是,我们输出一个0。这将是一个 0 和 1 的向量,因此我们简单地将所有 1 的值相加,这在 sum 操作中被雄辩地封装了。然后我们除以测试集中的总点数以获得分类器的最终准确度。
举个玩具例子,假设我有 4 个标签,我的 groundTruth 和 predictedLabels 向量是这样的:
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];
使用上述向量的准确度给我们:
>> accuracy
accuracy =
0.4000
>> accuracyPercentage
accuracyPercentage =
40
这意味着我们有 40% 的准确度或 0.40 的准确度。使用此示例,当您将每个测试集输入通过分类器时,预测模型只能准确分类 40% 的测试集。这是有道理的,因为在我们的预测输出和基本事实之间,只有 40% 或 6 个输出匹配。这些是第 1、第 2、第 6、第 7、第 10 和第 15 个元素。还有其他指标可以计算准确率,例如ROC curves,但在机器学习中计算准确率时,通常会这样做。