正态分布模式的贝叶斯分类

时间:2022-12-14 18:31:34

我不讲两类分类,这次换成三分类,其余多维特征,多分类以此类推,没必要再讲。无非是多几个线性判决。

随机产生三种不同均值方差的三类随机点,可以到资源里面下载(免费)做实验。

可以有下图知道,3类不同的点,需要3个判别函数。下面我只讲蓝色点和红色点得到判别函数的求法,看懂程序就最好了。

假设P(w1)=P(w2)=p(w3).                         


正态分布模式的贝叶斯分类

正态分布模式的贝叶斯分类

<span style="font-family:Times New Roman;font-size:14px;">% Set parameters
%%P = 2; % number of features
%N_train = 3000; % number of training samples
%N_test = 1500; % number of test samples
% Define the two (P) classes (two 2D normal distributions)
%mu1 = [1; -1]; % mean of data1
%sigma1 = [1, .5; .5, 1]; % covariance of data1
%mu2 = [-1; 2]; % mean of data2
%sigma2 = [1, 0.1; 0.1, 1]; % covariance of data2
% Generate training samples from the two distributions
%train_data1 = mvnrnd(mu1,sigma1,N_train);
%train_data2 = mvnrnd(mu2,sigma2,N_train);
load('train_po.mat');
load('train_ne.mat');
load('train_peo.mat');
hold on; box on;
plot(train_data1(1,:), train_data1(2,:), 'ro');
plot(train_data2(1,:), train_data2(2,:), 'b+');
plot(train_data3(1,:), train_data3(2,:), 'g>');
axis([-4 6 -6 10]);
legend({'Class 1 (Training)','Class 2 (Training)', 'Class 3(Training)'});
m1=mean(train_data1,2);
m2=mean(train_data2,2);
m3=mean(train_data3,2);
J1=repmat(m1,1,3000);
J2=repmat(m2,1,3000);
J3=repmat(m3,1,3000);
C1=(1/3000)*(train_data1-J1)*(train_data2-J2)';
C2=(1/3000)*(train_data1-J1)*(train_data3-J3)';
C3=(1/3000)*(train_data3-J3)*(train_data2-J2)';
d1=(m1-m2)'*inv(C1);
d2=(m1-m3)'*inv(C2);
d3=(m3-m2)'*inv(C3);
K1=1/2*m1'*inv(C1)*m1-1/2*m2'*inv(C1)*m2;
K2=1/2*m1'*inv(C2)*m1-1/2*m3'*inv(C2)*m3;
K3=1/2*m3'*inv(C3)*m3-1/2*m2'*inv(C3)*m2;
hold on
x=-4:0.01:1.2;
y=K1/d1(2)-(d1(1)*x)/d1(2);
plot(x,y,'k-','LineWidth', 2);
hold on
x=0.9:0.01:6;
y=K2/d2(2)-(d2(1)*x)/d2(2);
plot(x,y,'k-','LineWidth', 2);
hold on
x=-4:0.01:0.7;
y=K3/d3(2)-(d3(1)*x)/d3(2);
plot(x,y,'k-','LineWidth', 2);</span>

结果图 正态分布模式的贝叶斯分类