1.判别分析问题定义
根据历史上划分类别的有关资料和某种最优准则,确定一种判别方法,判定一个新的样本归属哪一类。
例如:在天气预报中,我们有一段较长时间关于某地区每天气象的记录资料 ( 晴阴雨、气温、气压、湿度等 ) ,现在想建立一种用连续五天的气象资料来预报第六天是什么天气的方法。这些问题都可以应用判别分析方法予以解决。
2.实例问题
设某外贸公司生产一种产品,为正式上市之前,将样品寄往12个国家的进口代理商,并附意见调查表,要求对该产品进行评估。评估的内容有式样,包装,耐久性三个方面。评估的结果采用10分制计分,评估后并被要求说明是否愿意购买,调查结果列入表中,表中的分数,高者表示代理商认为其特性良好,否则即较差。问:
今有第13个国家的进口代理商对该产品的评分分别是:式样9分,包装5分,耐久性4分,要预测该国是否愿意购买该产品。
利用Fisher算法求解本问题共需要6个步骤:
1.计算两组的平均值;
2.计算两组的离差矩阵;
3.解线性方程组;
4.根据计算结果,得出判别函数;
5.求出判别临界值;
6.对新数据进行判别预测。
Matlab程序如下:
%% 利用Fisher线性分类器训练样本
%待分类的数据
new_data = [9 5 4];%未知类别
%训练数据
data = [9 8 7 1;
7 6 6 1;
10 7 8 1;
8 4 5 1;
9 9 3 1;
8 6 7 1;
7 5 6 1;
8 4 4 2;
3 6 6 2;
6 3 3 2;
6 4 5 2;
8 2 2 2];
%1.计算两组的平均值
data1 = data(data(:,4) == 1,1:3);
data2 = data(data(:,4) == 2,1:3);
evg1 = mean(data1);
evg2 = mean(data2);
%2.计算两组的离差矩阵
A = data1 - repmat(evg1,size(data1,1),1);
B = data2 - repmat(evg2,size(data2,1),1);
S1 = A'*A;
S2 = B'*B;
S = S1+S2;
%3.解线性方程组
b = evg1 - evg2;
c = linsolve(S,b');%判别系数
%4.根据计算结果,得出判别函数
sym x;
y = x * c;
%5.求出判别临界值
y1 = evg1 * c;
y2 = evg2 * c;
s = size(data1,1);
t = size(data2,1);
y0 = (s*y1 + t*y2)/(s + t);%临界值
%6.对新数据进行判别预测
y = new_data * c;
if y > y0
type = 1;
else
type = 2;
end
if type == 1
fprintf('购买\n');
elseif type == 2
fprintf('不购买\n');
end