
%%用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
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)