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

来源:互联网 发布:miui免费网络短信 编辑:程序博客网 时间:2024/05/17 03:23

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

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

可以有下图知道,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 onx=-4:0.01:1.2;y=K1/d1(2)-(d1(1)*x)/d1(2);plot(x,y,'k-','LineWidth', 2);hold onx=0.9:0.01:6;y=K2/d2(2)-(d2(1)*x)/d2(2);plot(x,y,'k-','LineWidth', 2);hold onx=-4:0.01:0.7;y=K3/d3(2)-(d3(1)*x)/d3(2);plot(x,y,'k-','LineWidth', 2);</span>

结果图




0 0