我正在创建看起来像这样的决策树建模数据。
pelvic_radius degree_spondylolisthesis class
82.45603817 41.6854736 Abnormal
114.365845 -0.421010392 Normal
完成后,我通过我的树运行我的测试数据,并将运行的输出与给定的输出进行比较。这将允许我检查我的准确性、精确度和召回值。
TP = 0; % True Positives
TN = 0; % True Negatives
FP = 0; % False Positives
FN = 0; % False Negatives
然后一旦计算出这些值,我就可以计算以下内容。
precision = TP/(TP+FP);
accuracy = (TP+TN)/(TP+TN+FP+FN);
recall = TP/(TP+FN);
然而,这可以通过两种方式完成。一种将“正常”类视为阳性,一种将“异常”类视为阳性。
这是进一步解释我的意思的 sudo 代码。
for k=1:length(resultsOfTestSet)
if(strcmp(resultsOfTestSet{k},'Normal'))
if (strcmp(testSet{k}, 'Normal'))
% TRUE POSITIVE
TP = TP + 1;
else
% FALSE POSITIVE
FP = FP + 1;
end
elseif(strcmp(resultsOfTestSet{k},'Abnormal'))
if(strcmp(testSet{k},'Abnormal'))
% TRUE NEGATIVE
TN = TN + 1;
else
% FALSE NEGATIVE
FN = FN + 1;
end
end
end
上述情况假定 Normal 作为“正”结果类。但是,只需翻转比较语句,我就可以获得替代值。
for k=1:length(resultsOfTestSet)
if(strcmp(resultsOfTestSet{k},'Abnormal'))
if (strcmp(testSet{k}, 'Abnormal'))
% TRUE POSITIVE
TP = TP + 1;
else
% FALSE POSITIVE
FP = FP + 1;
end
elseif(strcmp(resultsOfTestSet{k},'Normal'))
if(strcmp(testSet{k},'Normal'))
% TRUE NEGATIVE
TN = TN + 1;
else
% FALSE NEGATIVE
FN = FN + 1;
end
end
end
因此,在两种情况下运行它之后,我得到以下值。
因为异常是我的积极案例
precision = 96.5517
accur = 95
recall = 87.5000
对于正常 = 正例
precision = 94.3662
accur = 95
recall = 98.5294
那么如何计算组合结果、prec、accu 和召回?或者,我只是错过了这一点,而您一次只计算一门课,就像您关注的那门课一样。
我问的原因是因为现在可以说我的决策树中有一个包含多个类结果的集合。这就是我意识到我必须选择一个课程来确定我的积极因素,或者只是单独查看课程。
这是一个具有 3 类可能性的类似集合。同样,我如何计算整个数据集?还是个别类的东西?或者您是否计算个人,然后将整个决策树的总数汇总在一起。
pelvic_radius degree_spondylolisthesis class
82.45603817 41.6854736 Abnormal
114.365845 -0.421010392 Normal
95 25 Perfect