Matlab 如何根据Weka提供的结果绘制DET曲线?

Matlab 如何根据Weka提供的结果绘制DET曲线?,matlab,machine-learning,weka,Matlab,Machine Learning,Weka,我面临4个类别之间的分类问题,我使用Weka进行分类,结果如下表所示: Correctly Classified Instances 3860 96.5 % Incorrectly Classified Instances 140 3.5 % Kappa statistic 0.9533 Mean absolute error

我面临4个类别之间的分类问题,我使用Weka进行分类,结果如下表所示:

Correctly Classified Instances        3860               96.5    %
Incorrectly Classified Instances       140                3.5    %
Kappa statistic                          0.9533
Mean absolute error                      0.0178
Root mean squared error                  0.1235
Relative absolute error                  4.7401 %
Root relative squared error             28.5106 %
Total Number of Instances             4000     

=== Detailed Accuracy By Class ===

               TP Rate   FP Rate   Precision   Recall  F-Measure   ROC Area  Class
                 0.98      0.022      0.936     0.98      0.957      0.998    A
                 0.92      0.009      0.973     0.92      0.946      0.997    B
                 0.991     0.006      0.982     0.991     0.987      1        C
                 0.969     0.01       0.971     0.969     0.97       0.998    D
Weighted Avg.    0.965     0.012      0.965     0.965     0.965      0.998

=== Confusion Matrix ===

   a   b   c   d   <-- classified as
 980  17   1   2 |   a = A
  61 920   1  18 |   b = B
   0   0 991   9 |   c = C
   6   9  16 969 |   d = D
函数
Compute\u DET
的代码为:

[Pmiss, Pfa] = Compute_DET(true_scores, false_scores)
num_true = max(size(true_scores));
num_false = max(size(false_scores));

total=num_true+num_false;

Pmiss = zeros(num_true+num_false+1, 1); %preallocate for speed
Pfa   = zeros(num_true+num_false+1, 1); %preallocate for speed

scores(1:num_false,1) = false_scores;
scores(1:num_false,2) = 0;
scores(num_false+1:total,1) = true_scores;
scores(num_false+1:total,2) = 1;

scores=DETsort(scores);

sumtrue=cumsum(scores(:,2),1);
sumfalse=num_false - ([1:total]'-sumtrue);

Pmiss(1) = 0;
Pfa(1) = 1.0;
Pmiss(2:total+1) = sumtrue  ./ num_true;
Pfa(2:total+1)   = sumfalse ./ num_false;

return

但是我在翻译不同参数的含义时遇到了一个问题。例如,
mean_False
stdv_False
的意义是什么?与Weka参数的对应关系是什么?

为什么标题中都有大写字母?我认为您使用的是NIST DETware。涉及mean_False和stdv_False的代码片段正在合成随机示例数据以供演示(因此,这些是负面示例分数的平均值和标准偏差,当正面分数为零平均值和单位SD时)。您需要为所有测试样本计算分类器的实际分数(预阈值),然后调用Compute_DET(分数(A_示例)、分数([B_示例、C_示例、D_示例])来计算A的DET曲线,等等,其中A_示例是真实类为A的示例的索引向量,等等。
[Pmiss, Pfa] = Compute_DET(true_scores, false_scores)
num_true = max(size(true_scores));
num_false = max(size(false_scores));

total=num_true+num_false;

Pmiss = zeros(num_true+num_false+1, 1); %preallocate for speed
Pfa   = zeros(num_true+num_false+1, 1); %preallocate for speed

scores(1:num_false,1) = false_scores;
scores(1:num_false,2) = 0;
scores(num_false+1:total,1) = true_scores;
scores(num_false+1:total,2) = 1;

scores=DETsort(scores);

sumtrue=cumsum(scores(:,2),1);
sumfalse=num_false - ([1:total]'-sumtrue);

Pmiss(1) = 0;
Pfa(1) = 1.0;
Pmiss(2:total+1) = sumtrue  ./ num_true;
Pfa(2:total+1)   = sumfalse ./ num_false;

return