【问题标题】:plot ROC curve for neural network classifier using perfcurve使用 perfcurve 绘制神经网络分类器的 ROC 曲线
【发布时间】:2016-07-22 11:45:09
【问题描述】:

我一直在使用 patternnet 分类器在 2 个不同的类别之间进行分类 - 标记为 0、1。 我正在尝试使用 MATLAB 为使用 patternnet 生成的一些数据生成 Roc 曲线图,但我无法理解它需要运行的参数。

[xTr, yTr, TTr, aucTr] = perfcurve(t, results.Data.y, 1);

我假设: t 是生成的标签向量,表明我的数据属于哪个类(我的由 0 和 1 组成,大小为 2x834) score 是由 patternnet 创建的变量,称为“results.Data.y”(大小为 2x834) posclass 为 1。 但是scores应该是一个向量(1x834大小),不知道选哪一行?

【问题讨论】:

    标签: matlab neural-network roc


    【解决方案1】:

    有关 perfcurve 函数的详细信息可在此处获得: http://in.mathworks.com/help/stats/perfcurve.html 这些例子很有帮助。

    关于您的具体情况,t 不是预测向量,而是您自己创建的用于标记测试数据的向量,这显然是 1xn(对于您的情况,其中 n = 834。)

    您的分数矩阵将是 m*n,其中 m 是您数据中的类别数(对于您的情况为 2)。 由于您说 1 是您的正类,因此您将选择包含正类分数的列。 类似的东西:

    [xTr, yTr, TTr, aucTr] = perfcurve(t, results.Data.y(:,1), 1);
    plot(xTr, yTr);
    

    【讨论】:

    • 谢谢。然后,如果能解释一下以下代码的某些部分,我将不胜感激:(lamda.nju.edu.cn/code_CSNN.ashx) 在 LableFormatConvertion.m 文件的第 50 行:'prediction=ClassType(id);'。 @ArchitTaneja
    • @ebrahimi 我不确定输入中的“标签”到底是什么,但要回答您的问题:当您使用 max(Label) 找到“id”时,您会得到标签的行索引,其中出现最大元素:例如:for A = [1 9 -2; 8 4 -5],id 将是 [2, 1, 1] 表示在第一列中,8 是最大值,它的行索引是 2。现在你有一个元组作为 'id'。使用 'id' 中的值可以访问 ClassType 的数组元素。例如:如果您的 'id' 是 [2,1,1] 并且 ClassType 是 [0,1] 'prediction' 将是 [1,0,0] 。即 id(1) =2 获取 ClassType(2) =1,id(2)=1 将获取 ClassType(1) = 0 等等。
    • 谢谢。实际上,有六种算法可以处理不平衡分类。例如,考虑过采样,然后请查看 sample_oversampling。 m 文件,所以很清楚标签是什么。它是测试数据的模拟输出。我的问题是,如果我们将 ClassType 更改为 [1,0],那么结果将是相反的,以及如何知道哪个是正确的 [0, 1] 或 [1, 0]。 @ArchitTaneja
    • 抱歉来晚了。 [0,1] 或 [1,0] 都没有错,只是哪个类被标记为 1,哪个被标记为 0。例如:您有 A 类和 B 类,而您可以选择其中任何一个用1表示,然后选择。
    猜你喜欢
    • 2017-08-27
    • 2018-12-19
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 2019-07-06
    • 2020-07-20
    • 2019-05-29
    相关资源
    最近更新 更多