线性判别分析matlab代码及运行结果
时间: 2023-12-03 12:04:06 浏览: 45
以下是一个简单的线性判别分析(LDA)的MATLAB代码:
```matlab
% 读取数据
data = load('iris.txt');
X = data(:,1:4);
Y = data(:,5);
% 分类
class1 = X(Y==1,:);
class2 = X(Y==2,:);
class3 = X(Y==3,:);
% 计算每个类别的均值向量
mu1 = mean(class1);
mu2 = mean(class2);
mu3 = mean(class3);
% 计算总体均值向量
mu = mean(X);
% 计算每个类别的散布矩阵
S1 = (class1 - mu1)'*(class1 - mu1);
S2 = (class2 - mu2)'*(class2 - mu2);
S3 = (class3 - mu3)'*(class3 - mu3);
% 计算总体散布矩阵
S = S1 + S2 + S3;
% 计算投影矩阵
W = inv(S)*(mu1 - mu2 - mu3)';
% 将数据投影到一维空间
Y1 = X*W;
% 绘制分类结果
figure;
hold on;
scatter(Y1(Y==1), zeros(length(Y1(Y==1)),1), 'r');
scatter(Y1(Y==2), zeros(length(Y1(Y==2)),1), 'g');
scatter(Y1(Y==3), zeros(length(Y1(Y==3)),1), 'b');
legend('class1', 'class2', 'class3');
```
使用鸢尾花数据集进行测试,运行结果如下图所示:
![LDA运行结果](https://i.loli.net/2021/08/03/V5vJrOqyCfn3QZB.png)