10. 混淆矩阵、总体分类精度、Kappa系数
一、前言
表征分类精度的指标有很多,其中最常用的就是利用混淆矩阵、总体分类精度以及Kappa系数。
其中混淆矩阵能够很清楚的看到每个地物正确分类的个数以及被错分的类别和个数。但是,混淆矩阵并不能一眼就看出类别分类精度的好坏,为此从混淆矩阵衍生出来各种分类精度指标,其中总体分类精度(OA)和卡帕系数(Kappa)应用最为广泛。
总体分类精度(OA):指被正确分类的类别像元数与总的类别个数的比值;OA值虽然能很好的表征分类精度,但是对类别像元个数极度不平衡的多类地物来说,其值收到像元数据较多类别的影响较大,不能很好的表征每个类别地物。
Kappa系数(Kappa):Kappa系数是一种比例,代表着分类与完全随机的分类产生错误减少的比例,其计算过程可用如下公式表示:
二、计算和代码
以下部分代码主要实现,如何获得混淆矩阵,对于OA和Kappa系数则是很容易从混淆矩阵计算可得
1 int tolCount = 0; 2 for(int i = 0;i<row;i++) 3 { 4 float *oriPtr = oriClassMap.ptr<float>(0); 5 float *stdPtr = stdClassMap.ptr<float>(0); 6 for(int j = 0;j<col;j++) 7 { 8 int curStdIndex = int(stdPtr[j]); 9 if(curStdIndex == 0) 10 continue; 11 int curOriIndex = int(oriPtr[j]); 12 13 if(curStdIndex == curOriIndex) 14 conf.at<int>(curStdIndex-1,curStdIndex-1) = conf.at<int>(curStdIndex-1,curStdIndex-1)+1; 15 else 16 { 17 conf.at<int>(curStdIndex-1,curOriIndex-1) = conf.at<int>(curStdIndex-1,curOriIndex-1)+1; 18 } 19 tolCount++; 20 } 21 }
三、计算结果显示