📄 vrc.m
字号:
function v=VRC(filename,chrom,len,fcode) % 给出染色体代表分类的VRC标准,需要最大化=[trace(B)*(n-g)]/[trace(W)/(g-1)];
% filename基金的属性文件(xls)
% chrom染色体 len每个属性编码长度 fcode编码类型 0 grey 1 binary
%
a=xlsread(filename);
[n q]=size(a);
[cx cy]=size(chrom);
g=cy/len/q;
v=zeros(cx,1); % 给出cx个然色体的VRC值
madoid=ones(g,q); % g个组重心的实值属性矩阵
%for i=1:g
% mad
for s=1:cx
madoidtemp=reshape(chrom(s,:),q*len,g);
madoid=bs2rv(madoidtemp',[repmat(len,1,q);min(a);max(a);repmat(fcode,1,q);repmat(0,1,q);repmat(1,2,q)]);% 代码转为实值
t=zeros(1,n);% 基金分类编号
for i=1:n
[temp t(i)]=min(sum((repmat(a(i,:),g,1)-madoid).^2,2));% 找到每个基金离重心最近的组
end
w=zeros(q,q,g);groupm=zeros(g,q);nk=zeros(1,g); % w代表每组方差-协方差阵,groupm代表每组平均属性值,nk代表每组基金个数
for i=1:g
ti=find(t==i);nk(i)=length(ti);
if ti
x=a(ti,:); % 第i组基金属性矩阵
groupm(i,:)=mean(x);
x=x-repmat(groupm(i,:),length(ti),1); % 中心化
end
for j=1:length(ti)
w(:,:,i)=w(:,:,i)+x(j,:)'*x(j,:);
end
end
w0=sum(w,3);% W
b=zeros(q,q);% B
groupm=groupm-repmat(mean(a),g,1);
for i=1:g
b=b+groupm(i,:)'*groupm(i,:)*nk(i);
end
% T=b+w0;
v(s)=trace(b)*(n-g)/trace(w0)/(g-1);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -