用于计算精度、准确度和召回率的决策树,分类问题

数据挖掘 深度学习 数据挖掘 数据
2021-09-28 05:07:34

我正在创建看起来像这样的决策树建模数据。

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
1个回答

您计算的指标有两种类型,描述您构建的整个预测模型的指标accuracy在伪代码的两种情况下都是相同的。而其他人喜欢precision你在解释特定的兴趣类别时有多精确accuracy也可以在多类分类中以这种方式表达,见图表)。该分数取决于您选择哪个课程作为正面课程。如果您将正类作为模型的面,则将其称为ppv or precisionand npv,反之亦然。

来到多类分类,核心定义保持不变。现在矩阵将是n x nn是类数)。样本矩阵看起来像这样。

在此处输入图像描述

对角线元素将1 class' 的预测数解释为1现在每个类都有n精度值。类的精度1是真正预测的值1除以预测的值1(包括 FP),这是第一列的总和。

但并非最不重要的一点是,如果您坚决想要整个模型的精度(如指标),那么您将获得micro & macro averaging有助于提供组合指标的方法。这篇博文很好地解释了这一点。希望这能清除一些东西。