clc;clear all;close all;
%训练集
SampleMark={'咳嗽','头晕','体温','流感'}
Sample={
'是','是','正常', '否';....
'是','是','高', '是';....
'是','是','非常高','是';....
'否','是','正常', '否';....
'否','否','高', '否';....
'否','是','非常高','是';....
'是','否','高', '是';....
'否','是','正常', '否';....
}
%流感为 是 的与 否 的两类子集
IsFlu=Sample(strmatch('是',Sample(:,4)),:);
NotFlu=Sample(strmatch('否',Sample(:,4)),:);
%先验概率
N1=size(IsFlu,1);
N2=size(NotFlu,1);
Pw1=N1/(N1+N2);
Pw2=N2/(N1+N2);
%咳嗽似然度
%采用m-估计,计算各属性先验概率
x1=size(strmatch('是',Sample(:,1)),1);
x2=size(strmatch('否',Sample(:,1)),1);
p1=x1/(x1+x2);
p2=x2/(x1+x2);
n1=size(strmatch('是',IsFlu(:,1)),1);
n2=size(strmatch('否',IsFlu(:,1)),1);
PXwi(1,1:2)=[(n1+1)/(n1+n2+p1) (n2+1)/(n1+n2+p2)];
n1=size(strmatch('是',NotFlu(:,1)),1);
n2=size(strmatch('否',NotFlu(:,1)),1);
PXwi(2,1:2)=[(n1+1)/(n1+n2+p1) (n2+1)/(n1+n2+p2)];
%头晕似然度
%采用m-估计,计算各属性先验概率
x1=size(strmatch('是',Sample(:,2)),1);
x2=size(strmatch('否',Sample(:,2)),1);
p1=x1/(x1+x2);
p2=x2/(x1+x2);
n1=size(strmatch('是',IsFlu(:,2)),1);
n2=size(strmatch('否',IsFlu(:,2)),1);
PXwi(1,3:4)=[(n1+1)/(n1+n2+p1) (n2+1)/(n1+n2+p2)];
n1=size(strmatch('是',NotFlu(:,2)),1);
n2=size(strmatch('否',NotFlu(:,2)),1);
PXwi(2,3:4)=[(n1+1)/(n1+n2+p1) (n2+1)/(n1+n2+p2)];
%体温似然度
%采用m-估计,计算各属性先验概率
x1=size(strmatch('正常',Sample(:,3)),1);
x2=size(strmatch('高',Sample(:,3)),1);
x3=size(strmatch('非常高',Sample(:,3)),1);
p1=x1/(x1+x2+x3);
p2=x2/(x1+x2+x3);
p3=x3/(x1+x2+x3);
n1=size(strmatch('正常',IsFlu(:,3)),1);
n2=size(strmatch('高',IsFlu(:,3)),1);
n3=size(strmatch('非常高',IsFlu(:,3)),1);
PXwi(1,5:7)=[(n1+p1)/(n1+n2+n3+p1) (n2+p2)/(n1+n2+n3+p2) (n3+p3)/(n1+n2+n3+p3)];
n1=size(strmatch('正常',NotFlu(:,3)),1);
n2=size(strmatch('高',NotFlu(:,3)),1);
n3=size(strmatch('非常高',NotFlu(:,3)),1);
PXwi(2,5:7)=[(n1+p1)/(n1+n2+n3+p1) (n2+p2)/(n1+n2+n3+p2) (n3+p3)/(n1+n2+n3+p3)];
%似然度矩阵
PXwi_Mark={'是','否','是','否','正常','高','非常高'}
PXwi
%测试样列,预测是否流感
Test={'否','是','非常高'}
%计算后验概率
PwiX=PXwi(:,2).*PXwi(:,3).*PXwi(:,7);
if 1==find(PwiX==max(PwiX))
fprintf('是否流感:是\n');
else
fprintf('是否流感:否\n');
end
%训练集
SampleMark={'咳嗽','头晕','体温','流感'}
Sample={
'是','是','正常', '否';....
'是','是','高', '是';....
'是','是','非常高','是';....
'否','是','正常', '否';....
'否','否','高', '否';....
'否','是','非常高','是';....
'是','否','高', '是';....
'否','是','正常', '否';....
}
%流感为 是 的与 否 的两类子集
IsFlu=Sample(strmatch('是',Sample(:,4)),:);
NotFlu=Sample(strmatch('否',Sample(:,4)),:);
%先验概率
N1=size(IsFlu,1);
N2=size(NotFlu,1);
Pw1=N1/(N1+N2);
Pw2=N2/(N1+N2);
%咳嗽似然度
%采用m-估计,计算各属性先验概率
x1=size(strmatch('是',Sample(:,1)),1);
x2=size(strmatch('否',Sample(:,1)),1);
p1=x1/(x1+x2);
p2=x2/(x1+x2);
n1=size(strmatch('是',IsFlu(:,1)),1);
n2=size(strmatch('否',IsFlu(:,1)),1);
PXwi(1,1:2)=[(n1+1)/(n1+n2+p1) (n2+1)/(n1+n2+p2)];
n1=size(strmatch('是',NotFlu(:,1)),1);
n2=size(strmatch('否',NotFlu(:,1)),1);
PXwi(2,1:2)=[(n1+1)/(n1+n2+p1) (n2+1)/(n1+n2+p2)];
%头晕似然度
%采用m-估计,计算各属性先验概率
x1=size(strmatch('是',Sample(:,2)),1);
x2=size(strmatch('否',Sample(:,2)),1);
p1=x1/(x1+x2);
p2=x2/(x1+x2);
n1=size(strmatch('是',IsFlu(:,2)),1);
n2=size(strmatch('否',IsFlu(:,2)),1);
PXwi(1,3:4)=[(n1+1)/(n1+n2+p1) (n2+1)/(n1+n2+p2)];
n1=size(strmatch('是',NotFlu(:,2)),1);
n2=size(strmatch('否',NotFlu(:,2)),1);
PXwi(2,3:4)=[(n1+1)/(n1+n2+p1) (n2+1)/(n1+n2+p2)];
%体温似然度
%采用m-估计,计算各属性先验概率
x1=size(strmatch('正常',Sample(:,3)),1);
x2=size(strmatch('高',Sample(:,3)),1);
x3=size(strmatch('非常高',Sample(:,3)),1);
p1=x1/(x1+x2+x3);
p2=x2/(x1+x2+x3);
p3=x3/(x1+x2+x3);
n1=size(strmatch('正常',IsFlu(:,3)),1);
n2=size(strmatch('高',IsFlu(:,3)),1);
n3=size(strmatch('非常高',IsFlu(:,3)),1);
PXwi(1,5:7)=[(n1+p1)/(n1+n2+n3+p1) (n2+p2)/(n1+n2+n3+p2) (n3+p3)/(n1+n2+n3+p3)];
n1=size(strmatch('正常',NotFlu(:,3)),1);
n2=size(strmatch('高',NotFlu(:,3)),1);
n3=size(strmatch('非常高',NotFlu(:,3)),1);
PXwi(2,5:7)=[(n1+p1)/(n1+n2+n3+p1) (n2+p2)/(n1+n2+n3+p2) (n3+p3)/(n1+n2+n3+p3)];
%似然度矩阵
PXwi_Mark={'是','否','是','否','正常','高','非常高'}
PXwi
%测试样列,预测是否流感
Test={'否','是','非常高'}
%计算后验概率
PwiX=PXwi(:,2).*PXwi(:,3).*PXwi(:,7);
if 1==find(PwiX==max(PwiX))
fprintf('是否流感:是\n');
else
fprintf('是否流感:否\n');
end