matlab计算混淆矩阵及kappa系数

前言

本科过程中学习或多或少涉及到分类的基础知识,分类过程中肯定回涉及到精度检验。这里就涉及到混淆矩阵的知识。

原理介绍

记混淆矩阵如下图所示:
在这里插入图片描述
矩阵 x i j x_{ij} 中主对交线表示分类正确的数目,记 N N 为所有点对数量
其中有三个评价指标如下
总体精度
p 0 = x i i N p_0=\frac{\sum x_{ii}}{N}
期望精度
p e = i = 1 n ( j = 1 n x i j + i = 1 n x j i ) N 2 p_e=\frac{\sum_{i=1}^n(\prod_{j=1}^{n}x_{ij}+\prod_{i=1}^{n}x_{ji})}{N^2}
kappa系数
k a p p a = p 0 p e 1 p e kappa=\frac{p_0-p_e}{1-p_e}

案例实践

数据集:
随机产生0-5之间的两列数据,第一列为预测数据(类别),第二列为真实数据(类别)
首先生成混淆矩阵如下

A=round(rand(100,2)*5);
class=[0,1,2,3,4,5];
num_class=length(class);
class_prection=A(:,1);%第一列为预测类别
class_true=A(:,2);%第二列为真实类别
[m,n]=size(A);
result=zeros(num_class,num_class);%初始化结果数据
for k=1:m
    for i=1:num_class
        for j=1:num_class
            if sum(A(k,:)==[class(i),(j)])==2
                result(i,j)=result(i,j)+1;
            end
        end
    end
end

其结果显示如下:
在这里插入图片描述
运用上述三个公式计算相应的指标:
第一个公式主要是计算对角线元素求和,matlab有自带函数trace计算代码如下:

p0=trace(result)/m;

第二个公式主要是复杂在分子部分
i = 1 n ( j = 1 n x i j + i = 1 n x j i ) {\sum_{i=1}^n(\prod_{j=1}^{n}x_{ij}+\prod_{i=1}^{n}x_{ji})}
其实对公式进行展开会发现其实就是矩阵 A B A\cdot B
其中 A A 为对应混淆矩阵的行和, B B 为对应混淆矩阵的列和,将矩阵进行叉乘(这里不是点乘要注意,矩阵规模不一样)
代码如下:

pe=sum(result,1)*sum(result,2)/(m^2);

对应的kappa系数如下:

kappa=(p0-pe)/(1-pe);

结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44589327/article/details/105824483
今日推荐