matlab的判别分析
- 格式:docx
- 大小:23.35 KB
- 文档页数:10
《数学文化》课程报告题目:MATLAB判别图的连通性2016年 11月26日MATLAB判别图的连通性摘要图论中,在无向图G中,结点u和v之间若存在一条路,则称结点u和结点v是连通的。
若图G只有一个连通分支,则称G是连通图。
如果两点相邻接,则在矩阵中记为1,否则记为0,形成的矩阵称为邻接矩阵。
若两点相互连通,则记为1,否则记为0,形成的矩阵称为可达性矩阵。
用矩阵表示图,可以在matlab中进行计算关键词:连通性;matlab;矩阵;可达性实验目的给定n个结点的有向图,判断图的连通性,如果是连通图,判断是强连通图、弱连通图还是单侧联通图实验原理与数学模型对于给定的邻接矩阵A,求出A所表示的图的可达矩阵P。
对于可达矩阵P 来说,如果P的所有元素均为1,则所给的有向图是强连通的;对于P的所有元素(除主对角线元素外)Pij来说,均有:Pij+Pji>0,则所给有向图是单向连通的。
当所给有向图既不是强连通的,又不是单向连通的时候,我们改造邻接矩阵为:对于矩阵A中所有的元素(除主对角线的元素外)aij,若aij=1或aji=1,则1⇒aij且1⇒aji。
对于这样改造之后所得到的新的矩阵A’(A’相当于原有向图忽略方向之后所得到的无向图的邻接矩阵),再用前面所述的方法进行判断,当P’的所有元素(除主对角线的元素外)均为1时,原有向图是弱连通图;否则,原有向图是不连通的。
实验内容(要点)1.通过图的邻接矩阵计算可达性矩阵2.通过可达性矩阵判断图的连通性3.如果是连通图,判断图是强连通图、弱连通图还是单侧连通图实验过程记录计算可达性矩阵函数function P=canget(A)n=length(A);P=A;for i=2:nP=P+A^i;endP=(P~=0);主程序clearA=input('Enter an Adjacency Matrix:');P=canget(A);Q=P|P'|eye(size(P));M=A|A';if P==1sprintf('This is a strongly-connected graph.')elseif Q==1sprintf('This is an unilaterally-connected graph.')elseW=canget(M);if W==1sprintf('This is a weakly-connected graph.')elsesprintf('This is an unconnected graph.');endend输入强连通图>> mainEnter an Adjacency Matrix:[0,1,1,0;1,0,0,1;1,0,0,1;0,1,1,0]ans =This is a strongly-connected graph.输入单侧联通图>> mainEnter an Adjacency Matrix:[0,1,0,0;0,0,0,0;1,0,0,0;0,1,1,0]ans =This is an unilaterally-connected graph.输入弱连通图>> mainEnter an Adjacency Matrix:[0,0,0,0;1,0,0,1;1,0,0,1;0,0,0,0]ans =This is a weakly-connected graph.实验结果报告与实验总结通过本次实验掌握了判断连通图的方法,掌握了用matlab编程判断强连通图、弱连通图和单侧联通图参考文献左孝凌,刘永才著离散数学上海科学技术文献出版社。
判别分析在生产、科学研究和日常生活中,经常会遇到对某一研究对象属于哪种情况作出判断。
例如要根据这两天天气情况判断明天是否会下雨;医生要根据病人的体温、白血球数目及其它症状判断此病人是否会患某种疾病等等。
从概率论的角度看,可把判别问题归结为如下模型。
设共有n 个总体:n ξξξ,,,21L其中i ξ是m 维随机变量,其分布函数为),,(1m i x x F L ,n i ,,2,1L =而),,(1m x x L 是表征总体特性的m 个随机变量的取值。
在判别分析中称这m 个变量为判别因子。
现有一个新的样本点Tm 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.0977913.08,15.71,85.63,520,0.10759.504,12.44,60.34,273.9,0.102417.99,10.38,122.8,1001,0.118420.57,17.77,132.9,1326,0.0847419.69,21.25,130,1203,0.109611.42,20.38,77.58,386.1,0.142520.29,14.34,135.1,1297,0.1003-1-待分类的数据为:16.6,28.08,108.3,858.1,0.0845520.6,29.33,140.1,1265,0.11787.76,24.54,47.92,181,0.05263解:编写程序如下:a=[13.54,14.36,87.46,566.3,0.0977913.08,15.71,85.63,520,0.10759.504,12.44,60.34,273.9,0.102417.99,10.38,122.8,1001,0.118420.57,17.77,132.9,1326,0.0847419.69,21.25,130,1203,0.109611.42,20.38,77.58,386.1,0.142520.29,14.34,135.1,1297,0.1003]x=[16.6,28.08,108.3,858.1,0.0845520.6,29.33,140.1,1265,0.11787.76,24.54,47.92,181,0.05263]g=[ones(3,1);2*ones(5,1)];[class,err]=classify(x,a,g)-2-。
使用Matlab进行数据降维的基本步骤数据降维是一种常用的数据预处理技术,它可以降低数据的维度,减少数据的冗余信息,提高数据的处理效率和模型的精确度。
在实际应用中,我们经常需要处理高维数据,如图像、文本、视频等,而高维数据的处理会带来计算和存储的问题,因此需要经过降维处理。
本文将介绍使用Matlab进行数据降维的基本步骤。
一、数据预处理在进行数据降维之前,通常需要对数据进行一些预处理,以减少数据中的噪音和冗余信息。
常见的数据预处理方法包括数据清洗、数据归一化和特征选择等。
在Matlab中,可以使用预处理工具箱来实现这些功能。
1. 数据清洗数据清洗是指对数据进行预处理,去除其中的噪音、异常值和缺失值等。
在Matlab中,可以使用函数`ismissing`和`fillmissing`来检测和处理缺失值,可以使用函数`isoutlier`来检测和处理异常值。
2. 数据归一化数据归一化是指将数据按比例缩放到一个特定的范围,以消除不同量纲和量级的影响。
常见的数据归一化方法包括最小-最大归一化和标准化。
在Matlab中,可以使用函数`normalize`来实现数据归一化。
3. 特征选择特征选择是指从原始特征中选择一部分最有代表性的特征,以减少特征维度和冗余信息。
常见的特征选择方法包括过滤式、包裹式和嵌入式等。
在Matlab中,可以使用函数`featureSelection`来实现特征选择。
二、降维方法在进行数据降维之前,需要选择合适的降维方法。
常见的降维方法包括主成分分析(PCA)、线性判别分析(LDA)和核主成分分析(KPCA)等。
在Matlab中,可以使用降维工具箱来实现这些方法。
1. 主成分分析(PCA)主成分分析是一种常用的无监督降维方法,它通过线性变换将原始特征空间转化为新的特征空间,新的特征空间中的每个维度都是原始特征的线性组合。
在Matlab中,可以使用函数`pca`来实现主成分分析。
2. 线性判别分析(LDA)线性判别分析是一种常用的有监督降维方法,它通过线性变换将原始特征空间转化为新的特征空间,新的特征空间中的每个维度都是原始特征的线性组合,并且使得不同类别的样本之间的距离最大化。
一、概述在数据分析领域,识别一组数据之间的差异是非常重要的。
对数据进行差异分析有助于找出不同数据之间的模式和规律,帮助我们更好地理解数据。
MATLAB作为一种强大的数据分析工具,提供了多种方法用于识别数据之间的差异。
本文将介绍一些常用的方法,帮助读者更好地运用MATLAB进行数据差异分析。
二、基本统计方法1. 均值比较均值比较是一种常见的数据差异分析方法。
在MATLAB中,可以使用t检验或者方差分析来进行均值比较。
通过计算不同样本的均值和方差,可以判断它们之间的差异是否具有显著性。
2. 相关性分析相关性分析用于研究两个或多个变量之间的相关性程度。
在MATLAB 中,可以使用相关系数或者协方差矩阵来进行相关性分析。
相关性分析可以帮助我们了解不同变量之间的相关性,从而识别数据之间的差异。
三、数据可视化方法1. 箱线图箱线图是一种常用的数据可视化方法,用于展示一组数据的分布情况。
在MATLAB中,可以使用boxplot函数来绘制箱线图。
通过观察不同数据的箱线图,可以直观地看出它们之间的差异。
2. 散点图散点图是一种展示两个变量之间关系的图表。
在MATLAB中,可以使用scatter函数来绘制散点图。
通过观察不同数据的散点图,可以发现它们之间的差异或者关联。
3. 直方图直方图用于展示一组数据的分布情况。
在MATLAB中,可以使用histogram函数来绘制直方图。
通过比较不同数据的直方图,可以发现它们之间的差异。
四、机器学习方法1. 聚类分析聚类分析是一种无监督学习方法,用于将相似的数据点分组到同一类别中。
在MATLAB中,可以使用k-means聚类算法来进行聚类分析。
通过聚类分析,可以将数据分为不同的类别,从而帮助我们识别数据之间的差异。
2. 主成分分析主成分分析是一种降维技术,用于发现数据集中的模式和结构。
在MATLAB中,可以使用pca函数来进行主成分分析。
通过主成分分析,可以找出数据中的主要特征,帮助我们识别数据之间的差异。
%--------------------------------------------------------------------------% 读取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作为训练样本,创建一个朴素贝叶斯分类器对象ObjBayesObjBayes = 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生成一个索引向量gindex1gindex2 = grp2idx(species); % 根据分组变量species生成一个索引向量gindex2errid = find(gindex1 ~= gindex2) % 通过对比两个索引向量,返回误判样品的观测序号向量% 查看误判样品的误判情况head1 = {'Obj', 'From', 'To'}; % 设置表头% 用num2cell函数将误判样品的观测序号向量errid转为元胞向量,然后以元胞数组形式查看误判结果[head1; num2cell(errid), species(errid), pre0(errid)]% 对未知类别样品进行判别% 定义未判样品观测值矩阵xx = [5.8 2.7 1.8 0.735.6 3.1 3.8 1.86.1 2.5 4.7 1.16.1 2.6 5.7 1.95.1 3.16.5 0.625.8 3.7 3.9 0.135.7 2.7 1.1 0.126.4 3.2 2.4 1.66.7 3 1.9 1.16.8 3.57.9 1];% 利用所创建的朴素贝叶斯分类器对象对未判样品进行判别,返回判别结果pre1,pre1也是字符串元胞向量pre1 = ObjBayes.predict(x)%--------------------------------------------------------------------------% 加载fisheriris.mat中数据,进行Fisher判别%--------------------------------------------------------------------------%********************************加载数据*********************************** load fisheriris % 把文件fisheriris.mat中数据导入MA TLAB工作空间%**********************************待判样品********************************* % 定义待判样品观测值矩阵xx = [5.8 2.7 1.8 0.735.6 3.1 3.8 1.86.1 2.5 4.7 1.16.1 2.6 5.7 1.95.1 3.16.5 0.625.8 3.7 3.9 0.135.7 2.7 1.1 0.126.4 3.2 2.4 1.66.7 3 1.9 1.16.8 3.57.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 onplot(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是一个元胞数组,形如% 'Variable' '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 < 3error('错误:输入参数太少,至少需要3个输入.');end% 根据分组变量生成索引向量gindex,组名元胞向量groups,组水平向量glevels [gindex,groups,glevels] = grp2idx(group);% 忽略缺失数据nans = find(isnan(gindex));if ~isempty(nans)training(nans,:) = [];gindex(nans) = [];endngroups = length(groups);gsize = hist(gindex,1:ngroups);nonemptygroups = find(gsize>0);nusedgroups = length(nonemptygroups);% 判断是否有空的组if ngroups > nusedgroupswarning('警告: 有空的组.');end[n,d] = size(training);if size(gindex,1) ~= nerror('错误: 输入参数大小不匹配,GROUP与TRAINING必须具有相同的行数.'); elseif isempty(sampledata)sampledata = zeros(0,d,class(sampledata));elseif size(sampledata,2) ~= derror('错误: 输入参数大小不匹配,SAMPLEDATA与TRAINING必须具有相同的列数.'); end% 设置contri的默认值为1,并限定contri在(0, 1]内取值if nargin < 4 || isempty(contri)contri = 1;endif ~isscalar(contri) || contri > 1 || contri <= 0error('错误: contri 必须是一个在(0, 1]内取值的标量.');endif any(gsize == 1)error('错误: TRAINING中的每个组至少应有两个观测.');end% 计算各组的组均值gmeans = NaN(ngroups, d);for k = nonemptygroupsgmeans(k,:) = mean(training(gindex==k,:),1);end% 计算总均值totalmean = mean(training,1);% 计算组内离差平方和矩阵E和组间离差平方和矩阵BE = 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中各组的组内离差平方和矩阵必须是正定矩阵.');endE = E + Rk'*Rk; % 计算总的组内离差平方和矩阵E% 计算组间离差平方和矩阵BB = 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 == 1TabL(2:end-1,2) = {0};elseTabL(2:end-1,2) = num2cell(-diff(D));endTabL(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) = {'Variable'};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:nstvobji = bsxfun(@minus,stv(i,:),gv);obji = sum(obji.^2, 2);idclass = find(obji == min(obji));if length(idclass) > 1idclass = idclass(1);message = '警告: 出现了一个或多个结';endoutclass(i) = idclass;endwarning(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中的降维方法1.引言降维是一种在数据分析和机器学习领域中常用的技术,它可以将高维数据映射到一个更低维的子空间中,从而提取出重要的特征信息。
在M A TL AB中,有多种降维方法可以选择,本文将介绍其中的几种常见方法,包括主成分分析(PC A)、线性判别分析(LD A)和t-分布随机邻近嵌入(t-S NE)。
2.主成分分析(P C A)主成分分析是一种无监督学习方法,用于将高维数据转换为低维数据。
它通过计算数据的协方差矩阵,并找到一组正交基来表示数据,使得基上的投影方差最大化。
在M AT LA B中,我们可以使用`p ca`函数来进行主成分分析。
首先,将原始数据矩阵传递给该函数,并指定所需的主成分数量,函数会返回主成分得分和主成分方差解释比例。
3.线性判别分析(LD A)线性判别分析是一种有监督学习方法,主要用于分类任务中的降维。
它试图找到一个低维投影空间,其中不同类别的数据点之间的距离最大化,同时同一类别内的数据点之间的距离最小化。
在M AT LA B中,使用`f it cd is cr`函数来进行线性判别分析。
该函数需要输入原始数据和对应的标签,可以返回投影后的数据以及类别之间的判别特征。
4. t分布随机邻近嵌入(t-SN E)t-SN E是一种非线性降维方法,广泛应用于可视化高维数据。
它使用t-分布来表示高维空间和低维空间之间的相似度,并通过最小化两个空间之间的KL散度,实现数据的降维。
在M AT LA B中,可以使用`t sn e`函数来进行t-SN E降维。
该函数接受原始数据矩阵作为输入,并返回降维后的数据矩阵。
5.总结M A TL AB提供了丰富的降维方法,包括主成分分析、线性判别分析和t-SN E等。
这些方法可以帮助我们处理高维数据,提取出重要的特征信息,并可视化数据。
根据具体任务的需求,我们可以选择合适的降维方法来进行数据处理和分析。
要注意的是,在使用这些方法时,需要根据实际情况进行参数调整和结果的解释,以确保得到可靠和有效的降维结果。
判别分析类型:判断样品属于已知类型中哪一类。
判别分析模型:设有 k 个总体 G 1,G 2,…,G k ,它们都是p 元总体,其数量指标是12(,,...,)T p X X X X =设总体 G i 的分布函数是 F i (x)=F i (x 1,x 2,…,x p ),i=1,2,…,k ,通常是连续型总体,即 G i 具有概率密度 f i (x)=f i (x 1,x 2,…,x p )。
对于任一新样品数据 x=(x 1,x 2,…,x p )T ,要判断它来自哪一个总体 G i 。
通常各个总体G i 的分布是未知的,它需要由各总体 G i 取得的样本数据资料来估计。
一般,先要估计各个总体的均值向量与协方差矩阵。
从每个总体 G i 取得的样本叫训练样本。
判别分析从各训练样本中的提取各总体的信息,构造一定的判别准则,判断新样品属于哪个总体。
从统计学的角度,要求判别准则在某种准则下是最优的,例如错判的概率最小或错判的损失最小等。
由于判别准则的不同,有各种不同的判别分析方法:距离判别、Bayes 判别和Fisher 判别等。
一、距离判别1. 两个总体的距离判别 1.1 距离定义马氏平方距离:设 x ,y 是从均值向量为 μ、协方差矩阵为 ∑的总体 G 中抽取的两个样品,马氏距离定义为:212121121212(,)()(),(,)()(),(,)()()T T T d x y x y x y d x G x x d G G μμμμμμ---=-∑-=-∑-=-∑- (1)1.2 双总体的判别规则设 G 1,G 2为两个不同的 p 元已知总体,G i 的均值向量是 ,1,2,i i μ= G i 的协方差矩阵是 ,1,2i i ∑=。
设 12(,,...,)T p x x x x =是一个待判样品,距离判别准则为112212,(,)(,),(,)(,)x G d x G d x G x G d x G d x G ∈≤⎧⎨∈>⎩ (2) 即当 x 到 G 1的马氏距离不超过到 G 2 的马氏距离时,判 x 来自G 1;反之,判 x 来自 G 2 。
广西某锰矿床已知两种不同锰矿石各项评价指标如下表所列。
现新发现湖润锰矿床,初步Matlab执行代码:g1=[41.19 11.86 0.182 36.22;34.99 9.84 0.178 27.82;35.62 10.56 0.26121.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*uczfprintf('该值反映了两个总体的分离程度,线性函数的判别函数为:\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)w2=vpa((a2*x-b2),4)fprintf('用回代法作出误判率p1为:\n')fprintf('比较gwh1和gwh2大小\n')g=[g1;g2];[m,n]=size(g);for i=1:mghdw1(i,:)=a1.*g(i,:);ghdw2(i,:)=a2.*g(i,:);gwh1(i)=sum(ghdw1(i,:))-b1;gwh2(i)=sum(ghdw2(i,:))-b2;endgwh1gwh2fprintf('经比较得g1中1,2,3号判入g1;g2中1,2,3号判入g2,则误判率的回带估计为:\n')p1=0fprintf('用交叉估计法确认距离判别的误判率:\n')fprintf('依次剔除g1总体中1,2,3号样本是的判别函数值x1w1,x1w2为:')for I=1:3xg1=g1;xg1(I,:)=[];xs1=cov(xg1);x1s=(xs1+2*s2)/3;x1sn=x1s';xu1=mean(xg1);x1w1(I)=sum((x1sn*xu1')'.*g1(I,:))-0.5*xu1*x1sn*xu1';x1w2(I)=sum((x1sn*u2')'.*g1(I,:))-0.5*u2*x1sn*u2';endx1w1x1w2for I1=1:3if(x1w1(I1)>=x1w2(I1))zp1(I1)=1;endendzg1=sum(zp1);fprintf('依次剔除g2总体中1,2,3号样本的判别函数值x2w1,x2w2为:') for J=1:3xg2=g2;xg2(J,:)=[];xs2=cov(xg2);x2s=(2*s1+xs2)/3;x2sn=x2s';xu2=mean(xg2);x2w1(J)=sum((x2sn*xu2')'.*g2(J,:))-0.5*u1*x2sn*u1';x2w2(J)=sum((x2sn*xu2')'.*g2(J,:))-0.5*xu2*x2sn*xu2';endx2w1x2w2for J1=1:3if(x2w1(J1)<x2w2(J1))zp2(J1)=1;endendzg2=sum(zp2);fprintf('由上比较得,交叉法所得的误判率为:\n')zp=zg1+zg2;jwpl=(6-zp)/6fprintf('判别新样品:\n')yp=[26.93 12.66 0.152 30.20;25.47 10.25 0.132 33.46;27.38 10.38 0.120 31.20;28.98 10.98 0.111 31.21];[p,q]=size(yp);for j=1:pw1p(j,:)=a1.*yp(j,:);w2p(j,:)=a2.*yp(j,:);w1pb(j)=sum(w1p(j,:))-b1;w2pb(j)=sum(w2p(j,:))-b2;endw1pbw2pbfor k=1:4if(w1pb(k)>=w2pb(k))fprintf('属于氧化锰矿石的样本序号是%g\n',k)endendfprintf('用贝叶斯判别法分析:\n')fprintf('\n在两个总体的协方差矩阵相等的假设下做贝叶斯判别:\n')fprintf('\n先验概率按比例分配求得总体g1,g2的先验概率分别为:\n')bp1=m1/(m1+m2)bp2=m2/(m1+m2)fprintf('两个正态总体的贝叶斯判别为:\n')bw1=w1+log(bp1);bw2=w2+log(bp2);fprintf('当两个总体的协方差矩阵,误判损失相同且先验概率按比例分配时距离判别与贝叶斯判别等价\n')fprintf('计算广义平方距离函数:')syms bx;syms bx1;syms bx2;syms bx3;syms bx4;bx=[bx1;bx2;bx3;bx4];bdp1=vpa((bx-u1z)'*sn*(bx-u1z)-2*log(bp1),4)bdp2=vpa((bx-u2z)'*sn*(bx-u2z)-2*log(bp2),4)fprintf('后验概率pg1,pg2为:\n')pg1=exp(-0.5*bdp1)/(exp(-0.5*bdp1)+exp(-0.5*bdp2))pg2=exp(-0.5*bdp2)/(exp(-0.5*bdp1)+exp(-0.5*bdp2))fprintf('此时贝叶斯判别法则为:当pg1>=pg2时,属于g1总体;当pg1<pg2时,属于g2总体!!!\n')fprintf('\n贝叶斯判别的回带判别')for t=1:mbdg1(t)=(g(t,:)'-u1z)'*sn*(g(t,:)'-u1z)-2*log(bp1);bdg2(t)=(g(t,:)'-u2z)'*sn*(g(t,:)'-u2z)-2*log(bp2);p1b(t)=exp(-0.5*bdg1(t))/(exp(-0.5*bdg1(t))+exp(-0.5*bdg2(t)));p2b(t)=exp(-0.5*bdg2(t))/(exp(-0.5*bdg1(t))+exp(-0.5*bdg2(t))); endfprintf('回代g1,g2中六个样本,求得的后验概率为:\n')p1bp2bfprintf('经比较得,误判率的回带估计bp为:\n')bp=0fprintf('贝叶斯判别的交叉法确认误判率:\n')fprintf('依次踢除g1总体中1,2,3号样本,所得的广义平方距离b1d1,b1d2为:') for T=1:3bxg1=g1;bxg1(T,:)=[];bju1=mean(bxg1);b1s1=cov(bxg1);b1s=(b1s1+2*s2)/3;bj1p1=2/5 ; bj1p2=3/5;b1d1(T)=(g1(T,:)-bju1)*b1s'*(g1(T,:)'-bju1')-2*log(bj1p1);b1d2(T)=(g1(T,:)-u2)*b1s'*(g1(T,:)'-u2')-2*log(bj1p2);b1p1(T)=exp(-0.5*b1d1(T))/(exp(-0.5*b1d1(T))+exp(-0.5*b1d2(T)));b1p2(T)=exp(-0.5*b1d2(T))/(exp(-0.5*b1d1(T))+exp(-0.5*b1d2(T))); endb1d1b1d2fprintf('依次剔除g2总体中1,2,3号样本,所得的广义平方距离b2d1,b2d2为:') for T1=1:3if(b1d1(T1)<=b1d2(T1))b1zp(T1)=1;endendfor V=1:3bxg2=g2;bxg2(V,:)=[];bju2=mean(bxg2);b2s2=cov(bxg2);b2s=(2*s1+b2s2)/3;bj2p1=3/5;bj2p2=2/5;b2d1(V)=(g2(V,:)-u1)*b2s'*(g2(V,:)'-u1')-2*log(bj2p1);b2d2(V)=(g2(V,:)-bju2)*b2s'*(g2(V,:)'-bju2')-2*log(bj2p2);b2p1(V)=exp(-0.5*b2d1(V))/(exp(-0.5*b2d1(V))+exp(-0.5*b2d2(V)));b2p2(V)=exp(-0.5*b2d2(V))/(exp(-0.5*b2d1(V))+exp(-0.5*b2d2(V))); endb2d1b2d2for V1=1:3if(b2d1(V1)>=b2d2(V1))b2zp(V1)=1;endendfprintf('由上比较贝叶斯判别时,交叉法确认的误判率为:')byp=(6-(sum(b1zp)+sum(b2zp)))/6fprintf('根据以上的贝叶斯判别法则,判别待判样品yp\n')for v=1:pydg1(v)=(yp(v,:)'-u1z)'*sn*(yp(v,:)'-u1z)-2*log(bp1);ydg2(v)=(yp(v,:)'-u2z)'*sn*(yp(v,:)'-u2z)-2*log(bp2);yp1(v)=exp(-0.5*ydg1(v))/(exp(-0.5*ydg1(v))+exp(-0.5*ydg2(v)));yp2(v)=exp(-0.5*ydg2(v))/(exp(-0.5*ydg1(v))+exp(-0.5*ydg2(v))); endfprintf('后验概率yp1,yp2为:\n')yp1yp2fprintf('比较后验概率yp1,yp2知:\n')for w=1:pif(yp1(w)>=yp2(w))fprintf('属于氧化锰矿石总体的待判样品序号为:%g\n',w) endend。