请给我写出LDA降维的matlab代码
时间: 2024-05-26 22:12:35 浏览: 16
由于LDA降维需要使用分类标签,因此需要有一个数据集和对应的标签。以下是一个简单的LDA降维的Matlab代码示例:
% 生成示例数据
data = [randn(50,2)+ones(50,2);randn(50,2)-ones(50,2)];
labels = [ones(50,1);-ones(50,1)];
% 计算均值
mu1 = mean(data(labels==1,:));
mu2 = mean(data(labels==-1,:));
% 计算类内散度矩阵
S1 = zeros(2,2);
S2 = zeros(2,2);
for i=1:length(labels)
if labels(i) == 1
S1 = S1 + (data(i,:)-mu1)'*(data(i,:)-mu1);
else
S2 = S2 + (data(i,:)-mu2)'*(data(i,:)-mu2);
end
end
Sw = S1 + S2;
% 计算类间散度矩阵
Sb = (mu1-mu2)'*(mu1-mu2);
% 计算特征值和特征向量
[V,D] = eig(Sb,Sw);
[~,ind] = sort(diag(D),'descend');
V = V(:,ind);
% 选择前k个特征向量
k = 1;
W = V(:,1:k);
% 对数据进行降维
newdata = data*W;
% 绘制结果
figure;
scatter(newdata(labels==1),zeros(sum(labels==1),1),'r');
hold on;
scatter(newdata(labels==-1),zeros(sum(labels==-1),1),'b');
legend('Class 1','Class 2');
xlabel('New feature');