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

你那个fisher的lda的matlab程序还有吗。能不能给我一个,,谢谢啦,第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.653.16 5.472.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.653.16 5.472.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=[UIdata(pos(i,1),:)]

    else

        UI=[UImean(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.632.53 7.793.57 5.653.16 5.472.58 4.462.16 6.223.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=[UIdata(pos(i,1),:)]

else

UI=[UImean(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=[UIdata(pos(i,1),:)]

    else

        UI=[UImean(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

matlab用randn生成(-inf,inf)区间内的标准

高斯分布

=

0,σ

=

1)的

随机数

,而且,一般来说,这样生成的随机数不会超出区间[-3,3],因为随机数在区间[-3,3]的概率为99.8%。那么在[-90,90]之间的概率呢?我没有算,想来应该会超过0.99999


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11947974.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存