【问题标题】:How can I efficiently find the accuracy of a classifier如何有效地找到分类器的准确性
【发布时间】:2014-10-21 12:06:08
【问题描述】:

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

例如下面的代码:

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 x 256 的矩阵,其中每一行代表一个图像。 test_image_feats 的结构也是如此。 train_labels是训练矩阵每一行对应的标签。

我在看的那本书简单的说,上面的方法达到了19%的准确率。

作者是如何得出这个结论的?有没有办法判断我的结果的准确性是用这个分类器还是其他的?

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

我怎样才能找到准确度?无论是图形还是简单的百分比。

【问题讨论】:

    标签: matlab image-processing machine-learning classification knn


    【解决方案1】:

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

    对于每个预测值,您将与相关的真实值进行比较,看看它是否相同。您将所有输出匹配在预测和基本事实之间的实例相加。将所有这些值相加,然后除以测试集中的总点数,得出与基本事实相比,您的模型准确预测结果的实例比例。

    在 MATLAB 中,计算起来非常简单。假设您的模型类别从1 枚举到N,其中N 是您分类的标签总数。让groundTruth 成为表示基本事实的标签向量,而predictedLabels 表示从分类器生成的标签。准确率简单计算如下:

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

    第一行代码计算模型的准确度作为分数。第二行将其计算为百分比,您只需将第一行代码乘以 100。您可以使用其中一个,也可以在您想要评估准确性时使用。一个只是在[0,1] 之间标准化,而另一个是从 0% 到 100% 的百分比。 groundTruth == predictedLabels 所做的是比较groundTruthpredictedLabels 之间的每个元素。如果groundTruth 中的第ith 值与predictedLabels 中的ith 值匹配,我们输出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];
    

    使用上述向量的准确度给我们:

    >> accuracy
    
    accuracy =
    
        0.4000
    
    >> accuracyPercentage
    
    accuracyPercentage =
    
        40
    

    这意味着我们有 40% 的准确度或 0.40 的准确度。使用此示例,当您将每个测试集输入通过分类器时,预测模型只能准确分类 40% 的测试集。这是有道理的,因为在我们的预测输出和基本事实之间,只有 40% 或 6 个输出匹配。这些是第 1、第 2、第 6、第 7、第 10 和第 15 个元素。还有其他指标可以计算准确率,例如ROC curves,但在机器学习中计算准确率时,通常会这样做。

    【讨论】:

    • @FarazKhan - 我的荣幸 :) 一切顺利!
    猜你喜欢
    • 2012-02-14
    • 2020-08-14
    • 2012-11-14
    • 2020-08-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 2020-07-11
    • 2015-04-14
    相关资源
    最近更新 更多