永发信息网

你那个fisher的lda的matlab程序还有吗。能不能给我一个,,谢谢啦

答案:1  悬赏:30  手机版
解决时间 2021-11-25 13:00
  • 提问者网友:战魂
  • 2021-11-24 15:26
你那个fisher的lda的matlab程序还有吗。能不能给我一个,,谢谢啦
最佳答案
  • 五星知识达人网友:酒者煙囻
  • 2021-11-24 16:27
%%用LDA将数据降维
% 输入参数
% data:m*n的原始数据,m为样本个数,n为维数
% N:各个类别的样本总数,与data中的数据对应
% reduced_dim:新的数据维数
% 输出参数
% reduced_data:经过LDA处理后的m*reduced_dim的新数据
% 示例
% data=[2.95 6.63; 2.53 7.79; 3.57 5.65;3.16 5.47;2.58 4.46; 2.16 6.22; 3.27 3.52];
% N=[4 3];
function reduced_data=LDA(data,N,reduced_dim)
C=length(N);
dim=size(data',1);%%用LDA将数据降维
% 输入参数
% data:m*n的原始数据,m为样本个数,n为维数
% N:各个类别的样本总数,与data中的数据对应
% reduced_dim:新的数据维数
% 输出参数
% reduced_data:经过LDA处理后的m*reduced_dim的新数据
% 示例
% data=[2.95 6.63; 2.53 7.79; 3.57 5.65;3.16 5.47;2.58 4.46; 2.16 6.22; 3.27 3.52];
% N=[4 3];
function reduced_data=LDA(data,N,reduced_dim)
C=length(N);
dim=size(data',1);% 计算每类样本在data中的起始、终止行数
pos=zeros(C,2);
for i=1:C
    START=1;
    if i>1
        START=START+sum(N(1:i-1));
    end
    END=sum(N(1:i));
    pos(i,:)=[START END];
end% 每类样本均值
UI=[];
for i=1:C
    if pos(i,1)==pos(i,2)
        % pos(i,1)==pos(i,2)时,mean函数不能工作
        UI=[UI;data(pos(i,1),:)];
    else
        UI=[UI;mean(data(pos(i,1):pos(i,2),:))];
    end
end
% 总体均值
U=mean(data);% 类间散度矩阵
SB=zeros(dim,dim);
for i=1:C
    SB=SB+N(i)*(UI(i,:)-U)'*(UI(i,:)-U);
end% 类内散度矩阵
SW=zeros(dim,dim);
for i=1:C
    for j=pos(i,1):pos(i,2)
        SW=SW+(data(j,:)-UI(i,:))'*(data(j,:)-UI(i,:));
    end
end% 该部分可以要,也可以不要
SW=SW/sum(N);
SB=SB/sum(N);% 计算特征值与特征向量
matrix=pinv(SW)*SB;
[V,D]=eig(matrix);
condition=dim-reduced_dim+1:dim;
V=V(:,condition);% 根据新的特征向量,将数据映射到新空间
reduced_data=data*V
%%用LDA将数据降维
% 输入参数
% data:m*n的原始数据,m为样本个数,n为维数
% N:各个类别的样本总数,与data中的数据对应
% reduced_dim:新的数据维数
% 输出参数
% reduced_data:经过LDA处理后的m*reduced_dim的新数据
% 示例
% data=[2.95 6.63; 2.53 7.79; 3.57 5.65;3.16 5.47;2.58 4.46; 2.16 6.22; 3.27 3.52];
% N=[4 3];
function reduced_data=LDA(data,N,reduced_dim)
C=length(N);
dim=size(data",1);
% 计算每类样本在data中的起始、终止行数
pos=zeros(C,2);
for i=1:C
START=1;
if i>1
START=START+sum(N(1:i-1));
end
END=sum(N(1:i));
pos(i,:)=[START END];
end
% 每类样本均值
UI=[];
for i=1:C
if pos(i,1)==pos(i,2)
% pos(i,1)==pos(i,2)时,mean函数不能工作
UI=[UI;data(pos(i,1),:)];
else
UI=[UI;mean(data(pos(i,1):pos(i,2),:))];
end
end
% 总体均值
U=mean(data);
% 类间散度矩阵
SB=zeros(dim,dim);
for i=1:C
SB=SB+N(i)*(UI(i,:)-U)"*(UI(i,:)-U);
end
% 类内散度矩阵
SW=zeros(dim,dim);
for i=1:C
for j=pos(i,1):pos(i,2)
SW=SW+(data(j,:)-UI(i,:))"*(data(j,:)-UI(i,:));
end
end
% 该部分可以要,也可以不要
SW=SW/sum(N);
SB=SB/sum(N);
% 计算特征值与特征向量
matrix=pinv(SW)*SB;
[V,D]=eig(matrix);
condition=dim-reduced_dim+1:dim;
V=V(:,condition);
% 根据新的特征向量,将数据映射到新空间
reduced_data=data*V;
end运行环境为matlab2011a,低版本的运行也应该没问题,可以作为你的参考。
% 计算每类样本在data中的起始、终止行数
pos=zeros(C,2);
for i=1:C
    START=1;
    if i>1
        START=START+sum(N(1:i-1));
    end
    END=sum(N(1:i));
    pos(i,:)=[START END];
end程序程
% 每类样本均值
UI=[];
for i=1:C
    if pos(i,1)==pos(i,2)
        % pos(i,1)==pos(i,2)时,mean函数不能工作
        UI=[UI;data(pos(i,1),:)];
    else
        UI=[UI;mean(data(pos(i,1):pos(i,2),:))];
    end
end
% 总体均值
U=mean(data);
% 类间散度矩阵
SB=zeros(dim,dim);
for i=1:C
    SB=SB+N(i)*(UI(i,:)-U)'*(UI(i,:)-
% 类内散度矩阵
SW=zeros(dim,dim);
for i=1:C
    for j=pos(i,1):pos(i,2)
        SW=SW+(data(j,:)-UI(i,:))'*(data(j,:)-UI(i,:));
    end
end
% 该部分可以要,也可以不要
SW=SW/sum(N);
SB=SB/su
% 计算特征值与特征向量
matrix=pinv(SW)*SB;
[V,D]=eig(matrix);
condition=dim-reduced_dim+1:dim;
V=V(:,condition);
% 根据新的特征向量,将数据映射到新空间
reduced_data=data
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯