Fisher线性判别方法 matlab
时间: 2023-11-21 20:00:56 浏览: 167
Fisher线性判别方法是一种经典的线性分类方法,它通过寻找最佳投影方向,将高维数据降至一维或二维空间中进行分类。下面是利用MATLAB实现Fisher线性判别方法的一般步骤:
1. 加载数据集:读取数据集的特征向量和标签。
2. 计算各类样本的均值向量:将数据集中属于同一类别的样本均值向量计算出来。
3. 计算类内散度矩阵:用各类样本的均值向量计算每个类别的类内散度矩阵。
4. 计算总类内散度矩阵:将各类样本的类内散度矩阵相加。
5. 计算类间散度矩阵:用各类样本的均值向量计算类间散度矩阵。
6. 计算投影方向:计算投影方向的系数向量,使得投影后的样本类间距离最大、类内距离最小。
7. 投影数据:将数据集投影到投影方向上,得到降维后的数据集。
8. 分类:利用分类器对测试数据进行分类。
下面是一个MATLAB代码示例,实现了基于Fisher线性判别方法的二分类:
```matlab
% 加载数据集
load fisheriris; % 加载鸢尾花数据集
X = meas(1:100,:); % 只取前100个样本
Y = [ones(50,1); -ones(50,1)]; % 前50个样本属于类别1,后50个样本属于类别-1
% 计算各类样本的均值向量
m1 = mean(X(1:50,:));
m2 = mean(X(51:100,:));
% 计算类内散度矩阵
S1 = cov(X(1:50,:));
S2 = cov(X(51:100,:));
% 计算总类内散度矩阵
Sw = S1 + S2;
% 计算类间散度矩阵
Sb = (m1-m2)'*(m1-m2);
% 计算投影方向
[V,D] = eig(inv(Sw)*Sb);
[~,ind] = max(abs(diag(D)));
w = V(:,ind);
% 投影数据
X = X * w;
% 绘制投影后的数据散点图
figure;
plot(X(1:50),zeros(50),'ro',X(51:100),zeros(50),'bx');
title('Fisher Linear Discriminant');
legend('class 1','class 2');
% 分类
x_test = [5.1,3.5,1.4,0.2]; % 测试数据
y_test = sign(x_test*w); % 利用分类器对测试数据进行分类
```
阅读全文