function F1=PlotConfusion(confusion_matrix)
%输入混淆矩阵,绘制混淆矩阵图
%列的方向是真实值,行的方向是预测值
%或者说是x轴为真实标签,y轴是预测标签,原点在左上角
%返回值F1是每个类别的recall和precision的调和平均值,按行排列
%例如:f1=PlotConfusion([12,3;15,2]);
[label_num,~]=size(confusion_matrix);
sum_lable=sum(confusion_matrix);
sum_pre_lable=sum((confusion_matrix'));
precision=zeros(1,label_num);
recall=zeros(1,label_num);
F1=zeros(1,label_num);
%构造plotconfusion函数的输入
labels=[];
predicted_labels=[];
for col=1:label_num
for row=1:label_num
num=confusion_matrix(row,col);
%计算recall和precision
if(row==col)
recall(row)=num/sum_lable(row);
precision(row)=num/sum_pre_lable(row);
end
%构造过程
temp=zeros(label_num,num);
temp_pre=temp;
one_row=ones(1,num);
temp(col,:)=one_row;
temp_pre(row,:)=one_row;
labels=[labels,temp];
predicted_labels=[predicted_labels,temp_pre];
end
end
%绘制混淆矩阵
plotconfusion(labels,predicted_labels);
%计算各类F1指标
for i=1:label_num
F1(i)=2*recall(i)*precision(i)/(recall(i)+precision(i));
end
end