搜档网
当前位置:搜档网 › 判别分析的MATLAB实现案例

判别分析的MATLAB实现案例

判别分析的MATLAB实现案例
判别分析的MATLAB实现案例

%--------------------------------------------------------------------------

% 读取examp10_01.xls中数据,进行距离判别

%--------------------------------------------------------------------------

%********************************读取数据***********************************

% 读取文件examp10_01.xls的第1个工作表中C2:F51范围的数据,即全部样本数据,包括未判企业

sample = xlsread('examp10_01.xls','','C2:F51');

% 读取文件examp10_01.xls的第1个工作表中C2:F47范围的数据,即已知组别的样本数据,training = xlsread('examp10_01.xls','','C2:F47');

% 读取文件examp10_01.xls的第1个工作表中B2:B47范围的数据,即样本的分组信息数据,group = xlsread('examp10_01.xls','','B2:B47');

obs = [1 : 50]'; % 企业的编号

%**********************************距离判别*********************************

% 距离判别,判别函数类型为mahalanobis,返回判别结果向量C和误判概率err

[C,err] = classify(sample,training,group,'mahalanobis');

[obs, C] % 查看判别结果

err % 查看误判概率

%--------------------------------------------------------------------------

% 加载fisheriris.mat中数据,进行贝叶斯判别

%--------------------------------------------------------------------------

%********************************加载数据*********************************** load fisheriris % 把文件fisheriris.mat中数据导入MA TLAB工作空间

%**********************************查看数据********************************* head0 = {'Obj', 'x1', 'x2', 'x3', 'x4', 'Class'}; % 设置表头

[head0; num2cell([[1:150]', meas]), species] % 以元胞数组形式查看数据

%*********************************贝叶斯判别********************************

% 用meas和species作为训练样本,创建一个朴素贝叶斯分类器对象ObjBayes

ObjBayes = NaiveBayes.fit(meas, species);

% 利用所创建的朴素贝叶斯分类器对象对训练样本进行判别,返回判别结果pre0,pre0也是字符串元胞向量

pre0 = ObjBayes.predict(meas);

% 利用confusionmat函数,并根据species和pre0创建混淆矩阵(包含总的分类信息的矩阵)[CLMat, order] = confusionmat(species, pre0);

% 以元胞数组形式查看混淆矩阵

[[{'From/To'},order'];order, num2cell(CLMat)]

% 查看误判样品编号

gindex1 = grp2idx(pre0); % 根据分组变量pre0生成一个索引向量gindex1

gindex2 = grp2idx(species); % 根据分组变量species生成一个索引向量gindex2

errid = find(gindex1 ~= gindex2) % 通过对比两个索引向量,返回误判样品的观测序号向量

% 查看误判样品的误判情况

head1 = {'Obj', 'From', 'To'}; % 设置表头

% 用num2cell函数将误判样品的观测序号向量errid转为元胞向量,然后以元胞数组形式查看误判结果

[head1; num2cell(errid), species(errid), pre0(errid)]

% 对未知类别样品进行判别

% 定义未判样品观测值矩阵x

x = [5.8 2.7 1.8 0.73

5.6 3.1 3.8 1.8

6.1 2.5 4.7 1.1

6.1 2.6 5.7 1.9

5.1 3.1

6.5 0.62

5.8 3.7 3.9 0.13

5.7 2.7 1.1 0.12

6.4 3.2 2.4 1.6

6.7 3 1.9 1.1

6.8 3.5

7.9 1

];

% 利用所创建的朴素贝叶斯分类器对象对未判样品进行判别,返回判别结果pre1,pre1也是字符串元胞向量

pre1 = ObjBayes.predict(x)

%--------------------------------------------------------------------------

% 加载fisheriris.mat中数据,进行Fisher判别

%--------------------------------------------------------------------------

%********************************加载数据*********************************** load fisheriris % 把文件fisheriris.mat中数据导入MA TLAB工作空间

%**********************************待判样品********************************* % 定义待判样品观测值矩阵x

x = [5.8 2.7 1.8 0.73

5.6 3.1 3.8 1.8

6.1 2.5 4.7 1.1

6.1 2.6 5.7 1.9

5.1 3.1

6.5 0.62

5.8 3.7 3.9 0.13

5.7 2.7 1.1 0.12

6.4 3.2 2.4 1.6

6.7 3 1.9 1.1

6.8 3.5

7.9 1

];

%*********************************Fisher判别********************************

% 利用fisher函数进行判别,返回各种结果(见fisher函数的注释)

[outclass,TabCan,TabL,TabCon,TabM,TabG] = fisher(x,meas,species)

%************************绘制两个判别式得分的散点图************************** % 利用fisher函数进行判别,返回各种结果,其中ts为判别式得分

[outclass,TabCan,TabL,TabCon,TabM,TabG,ts] = fisher(x,meas,species);

% 提取各类的判别式得分

ts1 = ts(ts(:,1) == 1,:); % setosa类的判别式得分

ts2 = ts(ts(:,1) == 2,:); % versicolor类的判别式得分

ts3 = ts(ts(:,1) == 3,:); % virginica类的判别式得分

plot(ts1(:,2),ts1(:,3),'ko') % setosa类的判别式得分的散点图

hold on

plot(ts2(:,2),ts2(:,3),'k*') % versicolor类的判别式得分的散点图

plot(ts3(:,2),ts3(:,3),'kp') % virginica类的判别式得分的散点图

legend('setosa类','versicolor类','virginica类'); %加标注框

xlabel('第一判别式得分'); %给X轴加标签

ylabel('第二判别式得分'); %给Y轴加标签

%************************只用一个判别式进行Fisher判别************************ % 令fisher函数的第4个输入为0.5,就可以只用一个判别式进行判别

[outclass,TabCan,TabL,TabCon,TabM,TabG] = fisher(x,meas,species,0.5)

function [outclass,TabCan,TabL,TabCon,TabM,TabG,trainscore] = fisher(sampledata,training,group,contri)

%FISHER 判别分析.

% class = fisher(sampledata,training,group) 根据训练样本training构造判别式,

% 利用所有判别式对待判样品sampledata进行判别. sampledata和training是具有相同

% 列数的矩阵,它们的每一行对应一个观测,每一列对应一个变量. group是training对

% 应的分组变量,它的每一个元素定义了training中相应观测所属的类. group可以是一% 个分类变量,数值向量,字符串数组或字符串元胞数组. training和group必须具有相% 同的行数. fisher函数把group中的NaN或空字符串作为缺失数据,从而忽略training % 中相应的观测. class中的每个元素指定了sampledata中的相应观测所判归的类,它和

% group具有相同的数据类型.

%

% class = fisher(sampledata,training,group,contri) 根据累积贡献率不低于

% contri,确定需要使用的判别式个数,默认情况下,使用所有判别式进行判别. contri % 是一个在(0, 1]区间内取值的标量,用来指定累积贡献率的下限.

%

% [class, TabCan] = fisher(...)以表格形式返回所用判别式的系数向量,若contri

% 取值为1,则返回所有判别式的系数向量. TabCan是一个元胞数组,形如

% 'V ariable' 'can1' 'can2'

% 'x1' [-0.2087] [ 0.0065]

% 'x2' [-0.3862] [ 0.5866]

% 'x3' [ 0.5540] [-0.2526]

% 'x4' [ 0.7074] [ 0.7695]

% [class, TabCan, TabL] = fisher(...)以表格形式返回所有特征值,贡献率,累积

% 贡献率等. TabL是一个元胞数组,形如

% 'Eigenvalue' 'Difference' 'Proportion' 'Cumulative'

% [ 32.1919] [ 31.9065] [ 0.9912] [ 0.9912]

% [ 0.2854] [] [ 0.0088] [ 1]

%

% [class, TabCan, TabL, TabCon] = fisher(...)以表格形式返回混淆矩阵(包含总

% 的分类信息的矩阵). TabCon是一个元胞数组,形如

% 'From/To' 'setosa' 'versicolor' 'virginica'

% 'setosa' [ 50] [ 0] [ 0]

% 'versicolor' [ 0] [ 48] [ 2]

% 'virginica' [ 0] [ 1] [ 49]

%

% [class, TabCan, TabL, TabCon, TabM] = fisher(...)以表格形式返回误判矩阵.

% TabM是一个元胞数组,形如

% 'Obj' 'From' 'To'

% [ 71] 'versicolor' 'virginica'

% [ 84] 'versicolor' 'virginica'

% [134] 'virginica' 'versicolor'

%

% [class, TabCan, TabL, TabCon, TabM, TabG] = fisher(...)将所用判别式作用

% 在各组的组均值上,得到组均值投影矩阵,以表格形式返回这个矩阵. TabG是一个元胞

% 数组,形如

% 'Group' 'can1' 'can2'

% 'setosa' [-1.3849] [1.8636]

% 'versicolor' [ 0.9892] [1.6081]

% 'virginica' [ 1.9852] [1.9443]

% [class, TabCan, TabL, TabCon, TabM, TabG, trainscore] = fisher(...)返回

% 训练样品所对应的判别式得分trainscore. trainscore的第一列为各训练样品原本所

% 属类的类序号,第i+1列为第i个判别式得分.

%

% Copyright 2009 xiezhh.

% $Revision: 1.0.0.0 $ $Date: 2009/10/03 10:40:34 $

if nargin < 3

error('错误:输入参数太少,至少需要3个输入.');

end

% 根据分组变量生成索引向量gindex,组名元胞向量groups,组水平向量glevels [gindex,groups,glevels] = grp2idx(group);

% 忽略缺失数据

nans = find(isnan(gindex));

if ~isempty(nans)

training(nans,:) = [];

gindex(nans) = [];

end

ngroups = length(groups);

gsize = hist(gindex,1:ngroups);

nonemptygroups = find(gsize>0);

nusedgroups = length(nonemptygroups);

% 判断是否有空的组

if ngroups > nusedgroups

warning('警告: 有空的组.');

end

[n,d] = size(training);

if size(gindex,1) ~= n

error('错误: 输入参数大小不匹配,GROUP与TRAINING必须具有相同的行数.'); elseif isempty(sampledata)

sampledata = zeros(0,d,class(sampledata));

elseif size(sampledata,2) ~= d

error('错误: 输入参数大小不匹配,SAMPLEDA TA与TRAINING必须具有相同的列数.'); end

% 设置contri的默认值为1,并限定contri在(0, 1]内取值

if nargin < 4 || isempty(contri)

contri = 1;

end

if ~isscalar(contri) || contri > 1 || contri <= 0

error('错误: contri必须是一个在(0, 1]内取值的标量.');

end

if any(gsize == 1)

error('错误: TRAINING中的每个组至少应有两个观测.');

end

% 计算各组的组均值

gmeans = NaN(ngroups, d);

for k = nonemptygroups

gmeans(k,:) = mean(training(gindex==k,:),1);

end

% 计算总均值

totalmean = mean(training,1);

% 计算组内离差平方和矩阵E和组间离差平方和矩阵B

E = zeros(d);

B = E;

for k = nonemptygroups

% 分别估计各组的组内离差平方和矩阵.

[Q,Rk] = qr(bsxfun(@minus,training(gindex==k,:),gmeans(k,:)), 0);

% 各组的组内离差平方和矩阵:AkHat = Rk'*Rk

% 判断各组的组内离差平方和矩阵的正定性

s = svd(Rk);

if any(s <= max(gsize(k),d) * eps(max(s)))

error('错误: TRAINING中各组的组内离差平方和矩阵必须是正定矩阵.');

end

E = E + Rk'*Rk; % 计算总的组内离差平方和矩阵E

% 计算组间离差平方和矩阵B

B = B + (gmeans(k,:) - totalmean)'*(gmeans(k,:) - totalmean)*gsize(k);

end

% 求inv(E)*B的正特征值与相应的特征向量

EB = E\B;

[V, D] = eig(EB);

D = diag(D);

[D, idD] = sort(D,'descend'); %将特征值按降序排列

V = V(:,idD);

NumPosi = min(ngroups-1, d); %确定正特征值个数

D = D(1:NumPosi, :);

CumCont = cumsum(D/sum(D)); %计算累积贡献率

% 以表格形式返回所有特征值,贡献率,累积贡献率等. TabL是一个元胞数组head = {'Eigenvalue', 'Difference', 'Proportion', 'Cumulative'};

TabL = cell(NumPosi+1, 4);

TabL(1,:) = head;

TabL(2:end,1) = num2cell(D);

if NumPosi == 1

TabL(2:end-1,2) = {0};

else

TabL(2:end-1,2) = num2cell(-diff(D));

end

TabL(2:end,3) = num2cell(D/sum(D));

TabL(2:end,4) = num2cell(CumCont);

% 根据累积贡献率的下限contri确定需要使用的判别式个数CumContGeCon CumContGeCon = find(CumCont >= contri);

CumContGeCon = CumContGeCon(1);

V = V(:, 1:CumContGeCon); %需要使用的判别式系数矩阵

% 以表格形式返回所用判别式的系数向量,若contri取值为1,

% 则返回所有判别式的系数向量. TabCan是一个元胞数组

TabCan = cell(d+1, CumContGeCon+1);

TabCan(1, 1) = {'V ariable'};

TabCan(2:end, 1) = strcat('x',cellstr(num2str((1:d)')));

TabCan(1, 2:end) = strcat('can',cellstr(num2str((1:CumContGeCon)')));

TabCan(2:end, 2:end) = num2cell(V);

% 将训练样品与待判样品放在一起进行判别

m = size(sampledata,1);

gv = gmeans*V;

stv = [sampledata; training]*V;

nstv = size(stv, 1);

message = '';

outclass = NaN(nstv, 1);

for i = 1:nstv

obji = bsxfun(@minus,stv(i,:),gv);

obji = sum(obji.^2, 2);

idclass = find(obji == min(obji));

if length(idclass) > 1

idclass = idclass(1);

message = '警告: 出现了一个或多个结';

end

outclass(i) = idclass;

end

warning(message);

trclass = outclass(m+(1:n)); %训练样品的判别结果(由类序号构成的向量)

outclass = outclass(1:m); %待判样品的判别结果(由类序号构成的向量)

outclass = glevels(outclass,:); %将待判样品的判别结果进行一个类型转换

trg1 = groups(gindex); %训练样品的初始类名称

trg2 = groups(trclass); %训练样品经判别后的类名称

% 以表格形式返回混淆矩阵(包含总的分类信息的矩阵). TabCon是一个元胞数组[CLMat, order] = confusionmat(trg1,trg2);

TabCon = [[{'From/To'},order'];order, num2cell(CLMat)];

% 以表格形式返回误判矩阵. TabM是一个元胞数组

miss = find(gindex ~= trclass); %训练样品中误判样品的编号

head1 = {'Obj', 'From', 'To'};

TabM = [head1; num2cell(miss), trg1(miss), trg2(miss)];

% 将所用判别式作用在各组的组均值上,得到组均值投影矩阵,以表格形式返回这个矩阵. % TabG是一个元胞数组

TabG = cell(ngroups+1,CumContGeCon+1);

TabG(:,1) = [{'Group'};groups];

TabG(1,2:end) = strcat('can',cellstr(num2str((1:CumContGeCon)')));

TabG(2:end,2:end) = num2cell(gv);

% 计算训练样品所对应的判别式得分

trainscore = training*V;

trainscore = [gindex, trainscore];

matlab与多元统计分析

Matlab 与多元统计分析 胡云峰 安庆师范学院 第三章习题 3.1对某地区的6名2周岁男婴的身高、胸围、上半臂进行测量。得样本数据如表3.1所示。 假设男婴的测量数据X (a )(a=1,…,6)来自正态总体N 3(μ,∑) 的随机样本。根据以往的资料,该地区城市2周岁男婴的这三项的均值向量μ0=(90,58,16)’,试检验该地区农村男婴与城市男婴是否有相同的均值向量。 表3.1 某地区农村2周岁男婴的体格测量数据 1.预备知识 ∑未知时均值向量的检验: H 0:μ=μ0 H 1:μ≠μ0 H 0成立时 122)(0,)(1)(1,) ()'((1)))()'()(,1)(1)1(,) (1)P P X N n S W n n X n S X n X S X T p n n p T F P n p n p μμμμμ---∑--∑??∴----=-----+∴-- 当 2 (,)(1) n p T F p n p p n α-≥--或者22T T α≥拒绝0H 当 2 (,)(1) n p T F p n p p n α-<--或者22T T α<接受0H 这里2 (1) (, )p n T F p n p n p αα-= -- 2.根据预备知识用matlab 实现本例题 算样本协方差和均值 程序x=[78 60.6 16.5;76 58.1 12.5;92 63.2 14.5;81 59.0 14.0;81 60.8 15.5;84 59.5 14.0]; [n,p]=size(x); i=1:1:n; xjunzhi=(1/n)*sum(x(i,:));

MATLAB 判别分析

判别分析在生产、科学研究和日常生活中,经常会遇到对某一研究对象属于哪种情况作出判断。例如要根据这两天天气情况判断明天是否会下雨;医生要根据病人的体温、白血球数目及其它症状判断此病人是否会患某种疾病等等。从概率论的角度看,可把判别问题归结为如下模型。设共有n 个总体: n ξξξ,,,21L 其中i ξ是m 维随机变量,其分布函数为 ),,(1m i x x F L ,n i ,,2,1L = 而),,(1m x x L 是表征总体特性的m 个随机变量的取值。在判别分析中称这m 个变量为判别因子。现有一个新的样本点T m x x x ),,(1L =,要判断此样本点属于哪一个总体。 Matlab 的统计工具箱提供了判别函数classify 。 函数的调用格式为: [CLASS,ERR] = CLASSIFY(SAMPLE,TRAINING ,GROUP, TYPE) 其中SAMPLE 为未知待分类的样本矩阵,TRAINING 为已知分类的样本矩阵,它们有相同的列数m ,设待分类的样本点的个数,即SAMPLE 的行数为s ,已知样本点的个数,即TRAINING 的行数为t ,则GROUP 为t 维列向量,若TRAINING 的第i 行属于总体i ξ,则 GROUP 对应位置的元素可以记为i ,TYPE 为分类方法,缺省值为'linear',即线性分类,TYPE 还可取值'quadratic','mahalanobis'(mahalanobis 距离)。返回值CLASS 为s 维列向量,给出了SAMPLE 中样本的分类,ERR 给出了分类误判率的估计值。例已知8个乳房肿瘤病灶组织的样本,其中前3个为良性肿瘤,后5个为恶性肿瘤。数据为细胞核显微图像的10个量化特征:细胞核直径,质地,周长,面积,光滑度。根据已知样本对未知的三个样本进行分类。已知样本的数据为:13.54,14.36,87.46,566.3,0.09779 13.08,15.71,85.63,520,0.1075 9.504,12.44,60.34,273.9,0.1024 17.99,10.38,122.8,1001,0.1184 20.57,17.77,132.9,1326,0.08474 19.69,21.25,130,1203,0.1096 11.42,20.38,77.58,386.1,0.1425 20.29,14.34,135.1,1297,0.1003 -1-

matlab的判别分析

广西某锰矿床已知两种不同锰矿石各项评价指标如下表所列。现新发现湖润锰矿床,初步 Matlab执行代码: g1=[41.19 11.86 0.182 36.22;34.99 9.84 0.178 27.82;35.62 10.56 0.261

21.02]; g2=[23.21 5.46 0.11 21.17;25.05 6.84 0.134 27.3;19.23 6.61 0.137 26.61]; fprintf('做距离判别分析:\n') fprintf('在两个总体的协方差矩阵相等的假设下进行判别分析:\n') fprintf('两个样本的协方差矩阵s1,s2分别为\n') s1=cov(g1) s2=cov(g2) fprintf('因为两个总体的协方差矩阵相等,所以协方差的联合估计s为:\n') [m1,n2]=size(g1);[m2,n2]=size(g2); s=((m1-1)*s1+(m2-1)*s2)/(m1+m2-2) fprintf('两个总体的马氏平方距离为:\n') sn=inv(s); u1=mean(g1);u2=mean(g2); ucz=(u1-u2)'; dmj=(u1-u2)*sn*ucz fprintf('该值反映了两个总体的分离程度,线性函数的判别函数为:\n') syms x1;syms x2;syms x3;syms x4; x=[x1;x2;x3;x4]; u1z=u1';u2z=u2'; a1=(sn*u1z)';b1=(u1*sn*u1z)/2; a2=(sn*u2z)';b2=(u2*sn*u2z)/2; w1=vpa((a1*x-b1),4)

数模-化验结果判别及matlab程序

地贫患者的基因筛查问题 摘要 地中海贫血(简称“地贫”)是全球广为流行、危害极为严重的遗传性溶血性疾病,全世界至少有亿人携带地中海贫血的致病基因。医学上通过大人群的基因筛查来预防地贫患儿的出生。 本文应用统计学原理,对病人以及健康人的110个基因进行分析,采用Fisher判别模型建立判别标准和多元统计模型spss 软件进行筛选。 问题一,利用费希尔模型判别待测者是否患有地贫,以编号1~20地贫患者的样本,编号21~40健康人员的样本,分别作为模版建立模型,用mathlab软件求解得到待测组的患病者编号41~60个是待筛查人员的样本。 问题二,为确定“地贫”样本与“健康”样本在基因链上的区别。以及癌症样本中是否有子类。我们用1~20数据为标准化并确立相关系数矩阵,求出相关矩阵的特征值和特征向量,然后通过前m 个 主成分的累计贡献率满足 % 85 ) 1 /( ) 1 (≥ ∑ = ∑ =k i k k i k λ λ 来确定贡献率矩阵,从而得出各种基因的权 值,又利用初始特征值需大于 1,再运用逐步剔除法得出关键基因关键字:地贫患者的基因 Fisher判别筛查相关系数矩阵

1 问题重述 化验指标能够协助医生诊断。人们到医院就诊时,诊断就诊人员是否患肾炎时通常要化验人体内各种元素含量。表是确诊病例的化验结果,其中1-30号病例是已经确诊为肾炎病人的化验结果;31-60号病例是已经确定为健康人的结果。表是就诊人员的化验结果。 1.根据表中的数据,提出一种或多种简便的判别方法,判别属于患者或健康人的方 法,并检验你提出方法的正确性。 2.按照1提出的方法,判断表中的30名就诊人员的化验结果进行判别,判定他(她) 们是肾炎病人还是健康人。 3.能否根据表的数据特征,确定哪些指标是影响人们患肾炎的关键或主要因素,以 便减少化验的指标。 4.根据3的结果,重复2的工作。 5.对2和4的结果作进一步的分析。 2 问题分析 问题解决的关键是如何正确判断正常人与患者之间的差异,利用所给数据,可以选择用医学统计方法[1]中的判别分析法[2]进行分析。从题目给出的表中可以得出以下信息:1)表中分别给出正常人与患者各30组数据,每组数据各包含7种元素(Zn、Cu、Fe、Ca、Mg、K、Na)在人体中的含量。通过对这些数据进行分析,可以从中找出数据差异,根据判别法确定判别标准。利用所得判别标准,与就诊人员的化验结果比较可以判

MATLAB统计分析与应用:40个案例分析

MATLAB统计分析与应用:40个案例分析 ISBN:9787512400849 分类号:C819 /115 出版社:北京航空航天大学出版社 【内容简介】 本书从实际应用的角度出发,以大量的案例详细介绍了MA TLAB环境下的统计分析与应用。 本书主要内容包括:利用MA TLAB制作统计报告或报表;从文件中读取数据到MA TLAB;从MA TLAB中导出数据到文件;数据的平滑处理、标准化变换和极差归一化变换;生成一元和多元分布随机数;蒙特卡洛方法;参数估计与假设检验;Copula理论及应用实例;方差分析;基于回归分析的数据拟合;聚类分析;判别分析;主成分分析;因子分析;图像处理中的统计应用等。 本书可以作为高等院校本科生、研究生的统计学相关课程的教材或教学参考书,也可作为从事数据分析与数据管理的研究人员的参考用书。 【目录】 第1章利用MA TLAB生成Word和Excel文档 1.1 组件对象模型(COM) 1.1.1 什么是CoM 1.1.2 CoM接口 1.2 MA TLAB中的ActiveX控件接口技术 1.2.1 actxcontrol函数 1.2.2 actxcontrollist函数 1.2.3 actxcontrolselect函数 1.2.4 actxserver函数 1.2.5 利用MA TLAB调用COM对象 1.2.6 调用actxserver函数创建组件服务器 1.3 案例1:利用MA TLAB生成Word文档 1.3.1 调用actxserver函数创建Microsoft Word服务器 1.3.2 建立Word文本文档 1.3.3 插入表格 1.3.4 插入图片 1.3.5 保存文档 1.3.6 完整代码 1.4 案例2:利用MA TLAB生成Excel文档 1.4.1 调用actxserver函数创建Microsoft Excel服务器 1.4.2 新建Excel工作簿 1.4.3 获取工作表对象句柄 1.4.4 插入、复制、删除、移动和重命名工作表 1.4.5 页面设置 1.4.6 选取工作表区域 1.4.7 设置行高和列宽 1.4.8 合并单元格 1.4.9 边框设置 1.4.10 设置单元格对齐方式

matlab与多元统计分析

m a t l a b与多元统计分 析 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

Matlab 与多元统计分析 胡云峰 安庆师范学院 第三章习题 对某地区的6名2周岁男婴的身高、胸围、上半臂进行测量。得样本数据如表所示。假设男婴的测量数据X (a )(a=1,…,6)来自正态总体N 3(,∑) 的 随机样本。根据以往的资料,该地区城市2周岁男婴的这三项的均值向量0= (90,58,16)’,试检验该地区农村男婴与城市男婴是否有相同的均值向量。 表 某地区农村2周岁男婴的体格测量数据 解 1.预备知识 ∑未知时均值向量的检验: H 0:=0 H 1:≠0 H 0成立时 122)(0,)(1)(1,) ()'((1)))()'()(,1)(1)1(,) (1)P P X N n S W n n X n S X n X S X T p n n p T F P n p n p μμμμμ---∑--∑??∴----=-----+∴-- 当 2 (,)(1) n p T F p n p p n α-≥--或者22T T α≥拒绝0H 当 2 (,)(1) n p T F p n p p n α-<--或者22T T α<接受0H

这里2(1) (, )p n T F p n p n p αα-= -- 2.根据预备知识用matlab 实现本例题 算样本协方差和均值 程序x=[78 ;76 ;92 ;81 ;81 ;84 ]; [n,p]=size(x); i=1:1:n; xjunzhi=(1/n)*sum(x(i,:)); y=rand(p,n); for j=1:1:n y(:,j)= x(j,:)'-xjunzhi'; y=y; end A=zeros(p,p); for k=1:1:n; A=A+(y(:,k)*y(:,k)'); end xjunzhi=xjunzhi' S=((n-1)^(-1))*A 输出结果xjunzhi = S = 然后u=[90;58;16]; t2=n*(xjunzhi-u)'*(S^(-1))*(xjunzhi-u) f=((n-p)/(p*(n-1)))*t2 输出结果t2 = f = 所以21()'()T n X S X μμ-=--=

FISHER线性判别MATLAB实现

Fisher 线性判别上机实验报告 班级: 学号: 姓名: 一.算法描述 Fisher 线性判别分析的基本思想:选择一个投影方向(线性变换,线性组合),将高维问题降低到一维问题来解决,同时变换后的一维数据满足每一类内部的样本尽可能聚集在一起,不同类的样本相隔尽可能地远。 Fisher 线性判别分析,就就是通过给定的训练数据,确定投影方向W 与阈值w0, 即确定线性判别函数,然后根据这个线性判别函数,对测试数据进行测试,得到测试数据的类别。 线性判别函数的一般形式可表示成0)(w X W X g T += 其中 ????? ??=d x x X Λ1 ?????? ? ??=d w w w W Λ21 Fisher 选择投影方向W 的原则,即使原样本向量在该方向上的投影能兼顾类间分布尽可能分开,类内样本投影尽可能密集的要求。 如下为具体步骤: (1)W 的确定

样本类间离散度矩阵b S 在投影后的一维空间中,各类样本均值T i i m '= W m 样本类内离散度与总类内离散度 T T i i w w S ' = W S W S ' = W S W 样本类间离散度T b b S ' = W S W Fisher 准则函数为 max 22 212 21 ~~)~~()(S S m m W J F +-= (2)阈值的确定 w 0 就是个常数,称为阈值权,对于两类问题的线性分类器可以采用下属决策规 则: 令) ()()(2 1 x x x g g g -=则: 如果g(x)>0,则决策w x 1∈;如果g(x)<0,则决策w x 2∈;如果g(x)=0,则可将x 任意分到某一类,或拒绝。 (3)Fisher 线性判别的决策规则 Fisher 准则函数满足两个性质: 1、投影后,各类样本内部尽可能密集,即总类内离散度越小越好。 2、投影后,各类样本尽可能离得远,即样本类间离散度越大越好。 根据这个性质确定准则函数,根据使准则函数取得最大值,可求出 W :-1 w 12W = S (m - m ) 。 这就就是Fisher 判别准则下的最优投影方向。 最后得到决策规则 T 1212S (m m )(m m ) b =--

判别分析与数学建模

判别分析与数学建模 一、问题引入 首先,我们来考虑一下2000年“网易杯”全国大学生数学建模竞赛的A题是关于“DNA 序列分类”的问题: 人类基因组中的DNA全序列是由4个碱基A,T,C,G按一定顺序排成的长约30亿的序列,毫无疑问,这是一本记录着人类自身生老病死及遗传进化的全部信息的“天书”。但是,除了这四种碱基外,人们对它所包含的内容知之甚少,如何破译这部“天书”是二十一世纪最重要的任务之一。在这个目标中,研究DNA全序列具有什么结构,由这4个字符排成的看似随机的序列中隐藏着什么规律,又是解读这部天书的基础,是生物信息学(Bioinformatics)最重要的课题之一。 虽然人类对这部“天书”知之甚少,但也发现了DNA序列中的一些规律性和结构。例如,在全序列中有一些是用于编码蛋白质的序列片段,即由这4个字符组成的64种不同的3字符串,其中大多数用于编码构成蛋白质的20种氨基酸。又例如,在不用于编码蛋白质的序列片段中,A和T的含量特别多些,于是以某些碱基特别丰富作为特征去研究DNA序列的结构也取得了一些结果。此外,利用统计的方法还发现序列的某些片段之间具有相关性,等等。这些发现让人们相信,DNA序列中存在着局部的和全局性的结构,充分发掘序列的结构对理解DNA全序列是十分有意义的。 作为研究DNA序列的结构的尝试,试对以下序列进行分类: 问题:下面有20个已知类别的人工制造的序列(见附表),其中序列标号1—10 为A类,11-20为B类。请从中提取特征,构造分类方法,并用这些已知类别的序列,衡量你的方法是否足够好。然后用你认为满意的方法,对另外20个未标明类别的人工序列(标号21—40)进行分类,把结果用序号(按从小到大的顺序)标明它们的类别(无法分类的不写入): A类;B类 附表: Art-model-data 1.aggcacggaaaaacgggaataacggaggaggacttggcacggcattacacggaggacgaggtaaagg aggcttgtctacggccggaagtgaagggggatatgaccgcttgg 2.cggaggacaaacgggatggcggtattggaggtggcggactgttcggggaattattcggtttaaacgg gacaaggaaggcggctggaacaaccggacggtggcagcaaagga 3.gggacggatacggattctggccacggacggaaaggaggacacggcggacatacacggcggcaacgga cggaacggaggaaggagggcggcaatcggtacggaggcggcgga 4.atggataacggaaacaaaccagacaaacttcggtagaaatacagaagcttagatgcatatgtttttt aaataaaatttgtattattatggtatcataaaaaaaggttgcga 5.cggctggcggacaacggactggcggattccaaaaacggaggaggcggacggaggctacaccaccgtt tcggcggaaaggcggagggctggcaggaggctcattacggggag 6.atggaaaattttcggaaaggcggcaggcaggaggcaaaggcggaaaggaaggaaacggcggatattt cggaagtggatattaggagggcggaataaaggaacggcggcaca 7.atgggattattgaatggcggaggaagatccggaataaaatatggcggaaagaacttgttttcggaaa tggaaaaaggactaggaatcggcggcaggaaggatatggaggcg 8.atggccgatcggcttaggctggaaggaacaaataggcggaattaaggaaggcgttctcgcttttcga caaggaggcggaccataggaggcggattaggaacggttatgagg

FISHER线性判别MATLAB实现

Fisher 线性判别上机实验报告 班级: 学号: 姓名: 一.算法描述 Fisher 线性判别分析的基本思想:选择一个投影方向(线性变换,线性组合),将高维问题降低到一维问题来解决,同时变换后的一维数据满足每一类内部的样本尽可能聚集在一起,不同类的样本相隔尽可能地远。 Fisher 线性判别分析,就是通过给定的训练数据,确定投影方向W 和阈值w0, 即确定线性判别函数,然后根据这个线性判别函数,对测试数据进行测试,得到测试数据的类别。 线性判别函数的一般形式可表示成0)(w X W X g T += 其中 Fisher 选择投影方向W 的原则,即使原样本向量在该方向上的投影能兼顾类间分布尽可能分开,类内样本投影尽可能密集的要求。 如下为具体步骤: (1)W 的确定 w S 样本类间离散度矩阵b 在投影后的一维空间中,各类样本均值T i i m '= W m 样本类内离散度和总类内离散度 T T i i w w S ' = W S W S ' = W S W 样本类间离散度T b b S ' = W S W Fisher 准则函数为 max 22 212 21 ~~)~~()(S S m m W J F +-=

(2)阈值的确定 w 0 是个常数,称为阈值权,对于两类问题的线性分类器可以采用下属决策规则: 令) ()()(2 1 x x x g g g -=则: 如果g(x)>0,则决策w x 1∈;如果g(x)<0,则决策w x 2∈;如果g(x)=0,则可将x 任意分到某一类,或拒绝。 (3)Fisher 线性判别的决策规则 Fisher 准则函数满足两个性质: 1.投影后,各类样本内部尽可能密集,即总类内离散度越小越好。 2.投影后,各类样本尽可能离得远,即样本类间离散度越大越好。 根据这个性质确定准则函数,根据使准则函数取得最大值,可求出 W :-1w 12W = S (m - m ) 。 这就是Fisher 判别准则下的最优投影方向。 最后得到决策规则 若 P P m m w w w x x g T )( ) (211 2 log ))(2 1()(大于或小于+-=,则 {1 2w w x ∈ 对于某一个未知类别的样本向量x ,如果y=W T ·x>y0,则x ∈w1;否则x ∈w2。 二.数据描述 1.iris 数据 IRIS 数据集以鸢尾花的特征作为数据来源,数据集包含150个数据集,有4维,分为3 类,每类50个数据,每个数据包含4个属性,是在数据挖掘、数据分类中非常常用的测试集、训练集。

判别分析的MATLAB实现案例

%-------------------------------------------------------------------------- % 读取examp10_01.xls中数据,进行距离判别 %-------------------------------------------------------------------------- %********************************读取数据*********************************** % 读取文件examp10_01.xls的第1个工作表中C2:F51范围的数据,即全部样本数据,包括未判企业 sample = xlsread('examp10_01.xls','','C2:F51'); % 读取文件examp10_01.xls的第1个工作表中C2:F47范围的数据,即已知组别的样本数据,training = xlsread('examp10_01.xls','','C2:F47'); % 读取文件examp10_01.xls的第1个工作表中B2:B47范围的数据,即样本的分组信息数据,group = xlsread('examp10_01.xls','','B2:B47'); obs = [1 : 50]'; % 企业的编号 %**********************************距离判别********************************* % 距离判别,判别函数类型为mahalanobis,返回判别结果向量C和误判概率err [C,err] = classify(sample,training,group,'mahalanobis'); [obs, C] % 查看判别结果 err % 查看误判概率 %-------------------------------------------------------------------------- % 加载fisheriris.mat中数据,进行贝叶斯判别 %-------------------------------------------------------------------------- %********************************加载数据*********************************** load fisheriris % 把文件fisheriris.mat中数据导入MA TLAB工作空间 %**********************************查看数据********************************* head0 = {'Obj', 'x1', 'x2', 'x3', 'x4', 'Class'}; % 设置表头 [head0; num2cell([[1:150]', meas]), species] % 以元胞数组形式查看数据 %*********************************贝叶斯判别******************************** % 用meas和species作为训练样本,创建一个朴素贝叶斯分类器对象ObjBayes ObjBayes = NaiveBayes.fit(meas, species); % 利用所创建的朴素贝叶斯分类器对象对训练样本进行判别,返回判别结果pre0,pre0也是字符串元胞向量 pre0 = ObjBayes.predict(meas); % 利用confusionmat函数,并根据species和pre0创建混淆矩阵(包含总的分类信息的矩阵)[CLMat, order] = confusionmat(species, pre0); % 以元胞数组形式查看混淆矩阵 [[{'From/To'},order'];order, num2cell(CLMat)]

最新用matlab解析实际案例

Matlab大作业 专业:东凌经济管理学院 班级: 小组成员: 2012年5月

1成员分工: **(组长):第一题模型一建立,文档编写 ***:第一题模型二建立,文档编写 ***:第二题模型建立 2第一题 某小型超市出售某一品牌八宝粥,其需求量与消费者平均收入和商品价格密切相关,根据近期几个月每一个月的消费记录以及消费者收入市场调查,统计如下表。现在在一个地区新建一所同样的超市,出售同样一款八宝粥,该超市附近消费者平均收入为4000元,超市经理想知道八宝粥定价6元时,进多少货才会比较合适。 需求量100 75 80 70 50 65 90 100 110 60 收入4000 2400 4800 2000 1200 1600 5200 4400 5200 1200 价格 5 7 6 6 8 7 5 4 3 9 2.1 基本假设 1)假设该品牌八宝粥的超市库存量与需求量一致,不存在多余库存。 2)假设超市每个月就进一次货。 3)假设超市之前调查的数据充分准确。 4)假设在新超市,人群收入以及商品价格对需求量的影响与之前规律类似。 5)假设该品牌八宝粥的需求量除了与消费者收入和商品价格有关,其他因素影响很小,可以忽略不计。

2.2 符号设定 :消费者收入向量。)(income I :商品价格向量。)(price P :商品需求向量。)(t requiremen R 2.3 模型建立 2.3.1 模型分析: 因为有商品价格P 和消费者收入I 两个参数对商品需求量R 产生影响,所以我们选择采用回归模型解决这个问题。 模型一:多元二项式回归模型 222211210P I P I R βββββ++++= Matlab 程序: I=[4000 2400 4800 2000 1200 1600 5200 4400 5200 1200]; P=[5 7 6 6 8 7 5 4 3 9]; R=[100 75 80 70 50 65 90 100 110 60]; f=[I' P']; rstool(f,R','purequadratic')

matlab中主成分分析的函数

matlab中主成分分析的函数 1.princomp 功能:主成分分析 格式:PC=princomp(X) [PC,SCORE,latent,tsquare]=princomp(X) 说明:[PC,SCORE,latent,tsquare]=princomp(X)对数据矩阵X进行主成分分析,给出各主成分(PC)、所谓的Z-得分(SCORE)、X的方差矩阵的特征值(latent)和每个数据点的HotellingT2统计量(tsquare)。 2.pcacov 功能:运用协方差矩阵进行主成分分析 格式:PC=pcacov(X) [PC,latent,explained]=pcacov(X) 说明:[PC,latent,explained]=pcacov(X)通过协方差矩阵X进行主成分分析,返回主成分(PC)、协方差矩阵X的特征值(latent)和每个特征向量表征在观测量总方差中所占的百分数(explained)。 3.pcares 功能:主成分分析的残差 格式:residuals=pcares(X,ndim) 说明:pcares(X,ndim)返回保留X的ndim个主成分所获的残差。注意,ndim是一个标量,必须小于X 的列数。而且,X是数据矩阵,而不是协方差矩阵。 4.barttest 功能:主成分的巴特力特检验 格式:ndim=barttest(X,alpha) [ndim,prob,chisquare]=barttest(X,alpha) 说明:巴特力特检验是一种等方差性检验。ndim=barttest(X,alpha)是在显著性水平alpha下,给出满足数据矩阵X的非随机变量的n维模型,ndim即模型维数,它由一系列假设检验所确定,ndim=1表明数据X对应于每个主成分的方差是相同的;ndim=2表明数据X对应于第二成分及其余成分的方差是相同的。 =============== 主成分分析Matlab源码分析 function [pc, score, latent, tsquare] = princomp(x); % PRINCOMP Principal Component Analysis (centered and scaled data). % [PC, SCORE, LATENT, TSQUARE] = PRINCOMP(X) takes a data matrix X and

matlab与多元统计分析

Matlab 与多元统计分析 胡云峰 师学院 第三章习题 3.1对某地区的6名2周岁男婴的身高、胸围、上半臂进行测量。得样本数据如表3.1所示。 假设男婴的测量数据X (a )(a=1,…,6)来自正态总体N 3(μ,∑) 的随机样本。根据以往的资料,该地区城市2周岁男婴的这三项的均值向量μ0=(90,58,16)’,试检验该地区农村男婴与城市男婴是否有相同的均值向量。 1.预备知识 ∑未知时均值向量的检验: H 0:μ=μ0 H 1:μ≠μ0 H 0成立时 122)(0,)(1)(1,) ()'((1)))()'()(,1)(1)1(,) (1)P P X N n S W n n X n S X n X S X T p n n p T F P n p n p μμμμμ---∑--∑??∴----=-----+∴--:::: 当 2 (,)(1) n p T F p n p p n α-≥--或者22T T α≥拒绝0H 当 2 (,)(1) n p T F p n p p n α-<--或者22T T α<接受0H

这里2 (1) (, )p n T F p n p n p αα-= -- 2.根据预备知识用matlab 实现本例题 算样本协方差和均值 程序x=[78 60.6 16.5;76 58.1 12.5;92 63.2 14.5;81 59.0 14.0;81 60.8 15.5;84 59.5 14.0]; [n,p]=size(x); i=1:1:n; xjunzhi=(1/n)*sum(x(i,:)); y=rand(p,n); for j=1:1:n y(:,j)= x(j,:)'-xjunzhi'; y=y; end A=zeros(p,p); for k=1:1:n; A=A+(y(:,k)*y(:,k)'); end xjunzhi=xjunzhi' S=((n-1)^(-1))*A 输出结果xjunzhi = 82.0000 60.2000 14.5000 S = 31.6000 8.0400 0.5000 8.0400 3.1720 1.3100 0.5000 1.3100 1.900 然后u=[90;58;16]; t2=n*(xjunzhi-u)'*(S^(-1))*(xjunzhi-u) f=((n-p)/(p*(n-1)))*t2 输出结果t2 = 420.4447 f = 84.0889 所以2 1 ()'()T n X S X μμ-=--=420.4447 2 (1) n p F T p n -= -=84.0889 查表得F 3,3(0.05)=9.28<84.0889 F 3,3(0.01)=29.5<84.0889 因此在a=0.05或 a=0.01时拒绝0H 假设

FISHER线性判别MATLAB实现

Fisher线性判别上机实验报告 班级: 学号: 姓名:

一.算法描述 Fisher 线性判别分析的基本思想:选择一个投影方向(线性变换,线性组合),将高维问题降低到一维问题来解决,同时变换后的一维数据满足每一类内部的样本尽可能聚集在一起,不同类的样本相隔尽可能地远。 Fisher 线性判别分析,就是通过给定的训练数据,确定投影方向W 和阈值w0, 即确定线性判别函数,然后根据这个线性判别函数,对测试数据进行测试,得到测试数据的类别。 线性判别函数的一般形式可表示成0)(w X W X g T += 其中 ????? ??=d x x X Λ1 ?????? ? ??=d w w w W Λ21 Fisher 选择投影方向W 的原则,即使原样本向量在该方向上的投影能兼顾类间分布尽可能分开,类内样本投影尽可能密集的要求。 如下为具体步骤: (1)W 的确定 i w S T x S (x m )(x m ), 1,2 i i i i X i ∈= --=∑

12w S S S =+ 样本类间离散度矩阵b S 在投影后的一维空间中,各类样本均值T i i m '= W m 样本类内离散度和总类内离散度 T T i i w w S ' = W S W S ' = W S W 样本类间离散度T b b S ' = W S W Fisher 准则函数为 max 22 212 21 ~~)~~()(S S m m W J F +-= (2)阈值的确定 w 0 是个常数,称为阈值权,对于两类问题的线性分类器可以采用下属决策规则: 令) ()()(2 1 x x x g g g -=则: 如果g(x)>0,则决策w x 1∈;如果g(x)<0,则决策w x 2∈;如果g(x)=0,则可将x 任意分到某一类,或拒绝。 (3)Fisher 线性判别的决策规则 Fisher 准则函数满足两个性质: 1.投影后,各类样本内部尽可能密集,即总类内离散度越小越好。 2.投影后,各类样本尽可能离得远,即样本类间离散度越大越好。 根据这个性质确定准则函数,根据使准则函数取得最大值,可求出 W :-1 w 12W = S (m - m ) 。 这就是Fisher 判别准则下的最优投影方向。 最后得到决策规则 T 1212S (m m )(m m )b =--

MATLAB主成分分析

1.princomp 功能:主成分分析 格式:PC=princomp(X) [PC,SCORE,latent,tsquare]=princomp(X) 说明:[PC,SCORE,latent,tsquare]=princomp(X)对数据矩阵X进行主成分分析,给出各主成分(PC)、所谓的Z-得分(SCORE)、X的方差矩阵的特征值(latent)和每个数据点的HotellingT2统计量(tsquare)。 2.pcacov 功能:运用协方差矩阵进行主成分分析 格式:PC=pcacov(X) [PC,latent,explained]=pcacov(X) 说明:[PC,latent,explained]=pcacov(X)通过协方差矩阵X进行主成分分析,返回主成分(PC)、协方差矩阵X的特征值(latent)和每个特征向量表征在观测量总方差中所占的百分数(explained)。 3.pcares 功能:主成分分析的残差 格式:residuals=pcares(X,ndim) 说明:pcares(X,ndim)返回保留X的ndim个主成分所获的残差。注意,ndim 是一个标量,必须小于X的列数。而且,X是数据矩阵,而不是协方差矩阵。 4.barttest 功能:主成分的巴特力特检验 格式:ndim=barttest(X,alpha) [ndim,prob,chisquare]=barttest(X,alpha) 说明:巴特力特检验是一种等方差性检验。ndim=barttest(X,alpha)是在显著性水平alpha下,给出满足数据矩阵X的非随机变量的n维模型,ndim即模型维数,它由一系列假设检验所确定,ndim=1表明数据X对应于每个主成分的方差是相同的;ndim=2表明数据X对应于第二成分及其余成分的方差是相同的。 第一种方法:用matlab的各个函数组合得到的结果: clc; clear; X=[28 1 1100 5 0; 5 2 1200 1 2; 10 9 1010 2 0; 4 8 700 6 2;

相关主题