-8.7000 9.9000 15.0000 错误个数e = 0
迭代次数K = 200
从输出的图形结果可以看到生成的权向量构造的线性判别函数能够将所有的训练样本正确分类。
第二组输出结果: 权向量W = -30.0000 25.9000 38.0000 错误个数e = 2
迭代次数K = 1000
从输出的图形结果可以看到生成的权向量构造的线性判别函数能够尽可能将训练样本正确分类。
附录:
1.感知器准则算法文件perceptron.m
function [W, e, K] = perceptron(w1, w2, max) % The perceptron algorithm % w1 : N1*d维输入数据clc % w2 : N2*d维输入数据 % w : [w0 w1 w2 ...] % e : 错误分类数据点数 % k : 迭代次数 [N1, d] = size(w1); N2 = size(w2, 1); N = N1+N2;
X_aug = [w1, ones(N1, 1); -1.*w2, -1.*ones(N2, 1)]; W = ones(d+1, 1);%w = [w0 w1 w2 ...]' e = 0; K = 0;
for k = 1:floor(max/N) e = 0; for i = 1:N K = K+1;
y = W'*X_aug(i, :)'; if y <= 0
W = W+X_aug(i, :)'; e = e+1;
end end
if(e == 0) return; end end
disp(['达到最大迭代次数' num2str(max)])
2.例程文件parzen_sample.m
w1 = [0.1, 6.8, -3.5, 2.0, 4.1, 3.1, -0.8, 0.9, 5.0, 3.9; 1.1, 7.1, -4.1, 2.7, 2.8, 5.0, -1.3, 1.2, 6.4, 4.0]; w2 = [7.1, -1.4, 4.5, 6.3, 4.2, 1.4, 2.4, 2.5, 8.4, 4.1;
4.2, -4.3, 0.0, 1.6, 1.9, -3.2, -4.0, -6.1, 3.7, -2.2]; [W, e, K] = perceptron(w1', w2', 1000) X = [w1, w2];
x = min(X(1, :)):0.01:max(X(1, :)); y = (W(1, 1).*x+W(3, 1))/(-W(2, 1));
figure('Name', '感知器准则算法'); subplot(2, 1, 1);
plot(w1(1, :), w1(2, :), 'o', w2(1, :), w2(2, :), 's', x, y); title('感知器准则算法,第一组')
w1 = [0.1, 6.8, -3.5, 2.0, 4.1, 3.1, -0.8, 0.9, 5.0, 3.9; 1.1, 7.1, -4.1, 2.7, 2.8, 5.0, -1.3, 1.2, 6.4, 4.0]; w2 = [7.1, -1.4, 4.5, 6.3, 4.2, 1.4, 2.4, 2.5, 8.4, 4.1; 4.2, -4.3, 0.0, 1.6, 3, -3.2, -4.0, -6.1, 3.7, -2.2]; [W, e, K] = perceptron(w1', w2', 1000) X = [w1, w2];
x = min(X(1, :)):0.01:max(X(1, :)); y = (W(1, 1).*x+W(3, 1))/(-W(2, 1)); subplot(2, 1, 2);
plot(w1(1, :), w1(2, :), 'o', w2(1, :), w2(2, :), 's', x, y); title('感知器准则算法,第二组')
姓名: 班级: 学号:
实验三 Fisher 线性判别实验
一、实验目的
1.了解Fisher 线性判别算法的原理及其推导过程。 2.掌握Fisher 线性判别算法并用Matlab实现。
3.使用Matlab分析Fisher 线性判别算法生成的判别函数的分类效果
二、实验数据
本实验数据来自Fisher's Iris Data.xls https://en.wikipedia.org/wiki/Iris_flower_data_set 第一组选取萼片长度和花瓣长度作为变量,青风藤和云芝各50个样本(见附录) 第二组选取萼片长度和萼片宽度作为变量,青风藤和云芝各50个样本(见附录)三、三、
实验结果
第一组输出结果: 权向量W = 0.1134 -0.3175
阈值w0 = 0. 2882
第二组输出结果: 权向量W = -0.1167 0.1443 阈值w0 = 0. 1912
从输出的图形结果可以看到生成的权向量构造的判别函数能够尽可能将训练样本正确分类。
附录:
1.感知器准则算法文件FisherLinearDiscriminat.m function [W, w0] = FisherLinearDiscriminat(w1, w2) % FLD Fisher Linear Discriminant. % w1 : D*r1 data % w2 : D*r2 data
% W : [w0 w1 w2 ...] % w0 : Threshold
%计算类1和类2的样本数 r1=size(w1,1); r2=size(w2,1);
%计算类1和类2的均值(矩阵) m1=mean(w1); m2=mean(w2);
%各类类内离散度矩阵(协方差矩阵) s1=cov(w1)*(r1-1); s2=cov(w2)*(r2-1); %总类内离散度矩阵 sw=s1+s2;
%投影向量的计算公式 W=inv(sw)*(m1-m2)';
%计算投影后的一位空间内,各类的均值 y1=W'*m1'; y2=W'*m2';
%计算阈值
w0=-1/2*(y1+y2); %和类相同符号被归为同类
2.例程文件FisherLinearDiscriminat_sample.m
w1 = [xlsread('Iris', 'A3:A52')'; xlsread('Iris', 'C3:C52')'];
w2 = [xlsread('Iris', 'A53:A102')'; xlsread('Iris', 'C53:C102')']; [W, w0] = FisherLinearDiscriminat(w1', w2') X = [w1, w2];
x = min(X(1, :)):0.01:max(X(1, :)); y = (W(1, 1).*x+w0)/(-W(2, 1)); figure('Name', 'Fisher 线性判别'); subplot(2, 1, 1);
plot(w1(1, :), w1(2, :), 'o', w2(1, :), w2(2, :), 's', x, y); title('Fisher 线性判别,第一组');
w1 = [xlsread('Iris', 'A3:A52')'; xlsread('Iris', 'B3:B52')'];
w2 = [xlsread('Iris', 'A53:A102')'; xlsread('Iris', 'B53:B102')']; [W, w0] = FisherLinearDiscriminat(w1', w2') X = [w1, w2];
x = min(X(1, :)):0.01:max(X(1, :)); y = (W(1, 1).*x+w0)/(-W(2, 1)); subplot(2, 1, 2);
plot(w1(1, :), w1(2, :), 'o', w2(1, :), w2(2, :), 's', x, y); title('Fisher 线性判别,第二组');
3.实验数据Iris.xls Fisher's Iris Data 萼片长度 萼片宽度 花瓣长度 花瓣宽度 物种编号 物种