前言
本科过程中学习或多或少涉及到分类的基础知识,分类过程中肯定回涉及到精度检验。这里就涉及到混淆矩阵的知识。
原理介绍
记混淆矩阵如下图所示:
矩阵
中主对交线表示分类正确的数目,记
为所有点对数量
其中有三个评价指标如下
总体精度
期望精度
kappa系数
案例实践
数据集:
随机产生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;
第二个公式主要是复杂在分子部分
其实对公式进行展开会发现其实就是矩阵
其中
为对应混淆矩阵的行和,
为对应混淆矩阵的列和,将矩阵进行叉乘(这里不是点乘要注意,矩阵规模不一样)
代码如下:
pe=sum(result,1)*sum(result,2)/(m^2);
对应的kappa系数如下:
kappa=(p0-pe)/(1-pe);
结果如下: