赞
踩
T = xlsread('data1.xlsx',1,'A1 : C1628'); x = T(:,1); %横坐标向量 y = T(:,2); %纵坐标向量 c = T(:,3); %类标签向量 data = [x,y]; %训练样本矩阵 k = 1500; %样本数量 T1 = sortrows([x(1:k,1),y(1:k,1),c(1:k,1)],3);%为方便处理按类这一列对样本进行升序排序(整个行的变化会和这一列的变化相同),如果是-3就是降序排列 %T1 temp = zeros(23,5);%用来存储样本中各个属性的均值, 方差和每个类的概率(一共有23类,每一类有两个特征属性,每个属性有均值和方差,那就是四个,再加概率一共五个) %计算出样本中各个属性的均值, 方差和每个类的概率 for i = 1:23 X = []; Y = []; count = 0; for j = 1:k if T1(j,3)==i X = [X;T1(j,1)]; Y = [Y;T1(j,2)]; count = count + 1; end end temp(i,1) = mean(X); %计算第一个属性的均值 temp(i,2) = std(X); %计算第一个属性的方差 temp(i,3) = mean(Y); %计算第二个属性的均值 temp(i,4) = std(Y); %计算第二个属性的方差 temp(i,5) = count/k; %计算第i类别出现的概率 end %计算预测结果 result = []; for m = 1:1628 pre = []; for n = 1:23 PX = 1/temp(n,2)*exp(((data(m,1)-temp(n,1))^2)/-2/(temp(n,2)^2)); %计算P(xi|y=X)(这里省略了分母,并且将样本的概率分布设为正态分布) PY = 1/temp(n,4)*exp(((data(m,2)-temp(n,3))^2)/-2/(temp(n,4)^2)); %计算P(xi|y=Y)同上 pre = [pre;PX*PY*temp(n,5)*10^8]; %为了防止求出来的概率值太小,于是乘以10^8便于比较 end [da,index]=max(pre);%获得这一列的最大值及其索引值 result = [result;index]; %将分类结果添加到result矩阵中 end xlswrite('data1.xlsx',result,'F1:F1628'); %将预测结果写到Excel表格 %画图 for i = 1:1628 rand('seed',result(i,1)); color = rand(1,3); plot(x(i,1),y(i,1),'*','color',color); hold on; end %查看正确率 num = 0; for i = 1:1628 if result(i)==c(i) num = num+1;%正确的个数 end end num, correct_ratio=num/1628,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。