要计算准确率,精确度,召回率,必须首先明白四个基本参数,如下:
a,-True Positive(真正, TP):将正类预测为正类数.
b,-True Negative(真负, TN):将负类预测为负类数.
c,-False Positive(假正, FP):将负类预测为正类数 →→ 误报 (Type I error).
d,-False Negative(假负, FN):将正类预测为负类数 →→ 漏报 (Type II error).
准确率—accuracy:正类和负类预测准确的比例,就是一般意义的准确率,不论正负,预测对的数目和总数目之比。
准确率:accuracy = (TP + TN) / (TP+ FP + TN + FN),
精确率是针对预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本,既将正类预测为正类数与预测结果为正的总数之比
精确率:precision = TP / (TP + FP)
召回率是针对原来的样本而言的,它表示的是样本中的正例有多少被预测正确了,既将正类预测为正类数与原样本为正的总数之比
召回率:recall = TP / (TP + FN)
基于MATLAB编程的代码如下:
clc
clear
close all
%本程序可以预测地质沉降数据的多种数据,但是每次预测两种
num1 = [rand(200,4) ones(200,1)];
num2 = [-0.5+rand(200,4) 2ones(200,1)];
num = [num1;num2];%读取数据
rand(‘state’,0)
n = randperm(size(num,1));
m = (0.8400);
input_train=num(n(1:m),1:4)‘;%训练数据输入
output_train=num(n(1:m),5)’;%训练数据输出数据
input_test=num(n(m+1:400),1:4)‘;%测试数据输入数据
output_test=num(n(m+1:400),5)’; %测试数据输出数据
%选连样本输入输出数据归一化
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);
%% BP网络训练
% %初始化网络结构
%10是中间层神经元个数,可以调整,2是输出层神经元个数,和输出数据的维数相对应,不可调整
%logsig输入层到中间层传递函数
%tansig输入层到中间层传递函数
%tansig自适应学习率动量因子梯度下降训练函数
% net=newff(minmax(inputn),[20,1],{‘logsig’,‘tansig’},‘traingdx’);
net=newff(minmax(inputn),outputn,[10,1],{‘logsig’,‘tansig’},‘traingdx’);
net.trainParam.epochs=5000;%最大迭代次数
net.trainParam.lr=0.1;%学习率
net.trainParam.goal=0.1;%学习目标
%网络训练
net=train(net,inputn,outputn);
% save maydata.mat
% load maydata.mat
%% BP网络预测
%预测数据归一化
inputn_test=mapminmax(‘apply’,input_test,inputps);
%网络预测输出
an=sim(net,inputn_test);
%网络输出反归一化
BPoutput=round(mapminmax(‘reverse’,an,outputps));
jie = abs((output_test-BPoutput)./BPoutput);
% zhunquelv = sum(BPoutput==output_test)/length(output_test)*100
tp =0;
fn = 0;
fp = 0;
tn = 0;
for ii = 1:length(output_test)
if output_test(ii)==BPoutput(ii)
if output_test(ii)==1%负负
tn = tn+1;
else
tp = tp+1;%正正
end
else
if output_test(ii)==1%负正
fp = fp+1;
else
fn = fn+1;%正负
end
end
end
acc = (tp+tn)./(tp+tn+fp+fn)
spec = tn/(tn+fp)
sens = tp/(tp+fn)
%% 结果分析
figure
plot(BPoutput(1,:)',‘r-o’)%预测输出1做图,绿色虚线,圆圈
hold on
plot(output_test(1,:)‘,’-b*');%实际数据做图,蓝色实线,*形
legend(‘预测输出’,‘期望输出’)%标签
title(‘BP预测’,‘fontsize’,12)%标题
ylabel(‘地表沉降量’,‘fontsize’,12)%纵轴
xlabel(‘样本’,‘fontsize’,12)%X轴
%预测误差
error=BPoutput-output_test;
figure
plot(error,‘k-*’)
ylabel(‘误差’,‘fontsize’,12)%纵轴
xlabel(‘样本’,‘fontsize’,12)%X轴