📄 classify.m
字号:
%定标集与预测集的划分程序
m=0;
while m<100
m=m+1;
[num,txt,raw]=xlsread('tm','sheet1','B2:C97');%读取的工作表第一列为样品编号,第二列为相应的化学值
num2=num;raw2=raw;
[x,y]=size(raw);
ny=floor(x/3);nd=x-ny; %x为总的样品数,ny为预测集样品数,nd为定标集样品数
Nc=zeros(nd,1);Np=zeros(ny,1);%Nc为定标集样品的编号,Np为预测集样品的编号
Bx=sort(num);
t(1)=max(find(Bx(1)==num));%求出化学值的最大值最小值,次大值次小值
t(2)=min(find(Bx(2)==num));
t(3)=max(find(Bx(x-1)==num));
t(4)=min(find(Bx(x)==num));
for i=1:4 %删除最大值最小值,次大值次小值
raw2(t(i),:)=[];
num2(t(i),:)=[];
end
index=rand(x-4,1);
a=sort(index);
for i=1:nd-2
temp=find(a(i)==index);
Nc(i)=find(strcmp(raw2(temp),raw));
end
for i=nd-1:x-4
temp=find(a(i)==index);
Np(i+2-nd)=find(strcmp(raw2(temp),raw));
end
Nc(nd-1)=t(1);Nc(nd)=t(4);Np(ny-1)=t(2);Np(ny)=t(3);%最大值最小值分到定标集中,次大值次小值分到预测集中
avec=mean(num(Nc));
avep=mean(num(Np));
ave=mean(num);
if abs(avec-avep)/ave<0.0015 %设定误差小于0.15%
break;
end
end
m
Nc2=sort(Nc);Np2=sort(Np);
abs(avec-avep)/ave,avec,avep,ave
d=cat(1,'定标样品编号:',raw(Nc2))
y=cat(1,'预测样品编号:',raw(Np2))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -