请用matlab代码简单写一个fisher线性判别的例子
时间: 2024-06-03 22:07:20 浏览: 120
Fisher线性判别例子(用MATLAB实现)
假设我们有两个类别的数据,每个类别有两个特征。我们可以通过Fisher线性判别来找到一个投影向量,将这些数据投影到一维空间中,并使得两个类别的投影均值之间的距离最大化,同时使得类别内部的方差最小化。
下面是一个简单的MATLAB代码实现:
% 生成两个类别的数据
class1 = [1, 2; 2, 3; 3, 4; 4, 5];
class2 = [2, 1; 3, 2; 4, 3; 5, 4];
% 计算每个类别的均值和协方差矩阵
mean1 = mean(class1);
mean2 = mean(class2);
cov1 = cov(class1);
cov2 = cov(class2);
% 计算投影向量
sw = cov1 + cov2;
w = inv(sw) * (mean2 - mean1)';
% 投影数据
proj1 = class1 * w;
proj2 = class2 * w;
% 绘制投影后的数据
figure;
hold on;
scatter(proj1, zeros(size(proj1)), 'b');
scatter(proj2, zeros(size(proj2)), 'r');
xlabel('Projection');
legend('Class 1', 'Class 2');
hold off;
% 输出投影向量
disp(['Projection vector: [' num2str(w') ']']);
运行代码后,我们可以得到一个投影向量,将数据投影到这个向量上后,两个类别之间的距离最大化,同时类别内部的方差最小化。我们可以将投影后的数据可视化,可以看到两个类别之间的距离确实被最大化了。
阅读全文