matlab的判别分析
matlab判别图的连通性
《数学文化》课程报告题目: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编程判断强连通图、弱连通图和单侧联通图参考文献左孝凌,刘永才著离散数学上海科学技术文献出版社。
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的判别分析的改进与实现
的 r个变量构成 r + 1个变量的判别函数 ,此函数为 :
Fk ( x) = C1k x1 + C2k x2 + … + Crk xr, k = 1, 2, …, g ( 1) 其中 x1 , x2 , …, xr表示已进入方程中的 r个变量 ,未进入 的变量记为 xr+1 , xr+2 , …, xm 。 将 xr+1 , xr+2 , …, xm 引入式 ( 1) , 并计算出 相 应 的 W ilk s
-
W
( s) kk
W
( s) kk
~ F ( g - 1, n -
g-
r - 1)
(3)
— 80 —
对于给定水平 α,查 F分布表可得门坎值 Fα。如果 Fxk > Fα, 则认为变量 xk 重要 ,可以引入式 ( 1) ;否则变量 xk 不能引 入式 ( 1) 。
2) 特征变量的剔除
与特征变量的引入相类似 ,设判别函数中已引入 r个变
- ∧统计值,
记为
λ λ , (1)
(2)
r+1 r+1
,
…,λr(m+1-
r)
。显
然
只
需
选
择
m
in
λ [
(1) r+1
λ ,
(2) r+1
,
…,λr(m+1-
r)
]
=λr+1
与
λ r
比较
。若
λ r+1
<λr , 则
说明该变量 xr+1 引入判别函数式后 , 判别效果有了改善 ; 反
使用Matlab进行数据降维的基本步骤
使用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版)ch08-线性判别分析 教学课件
线性判别分析
新工科建设之路·人工智能系列教材
机器学习(MATLAB 版)
01
线性判别分析 的基本原理
线性判别分析的基本原理
LDA 的基本思想是通过线性投影将样本投影到低维空间中,使得同一类样本的投影点尽可能接近、不同 类样本的投影点尽可能远离;在对新样本进行分类时,将其投影到同样的低维空间中,再根据投影点在低 维空间中的位置来确定新样本的类别。具体的做法是寻找一个向低维空间的投影矩阵 W,使样本数据的 特征向量 经过投影之后得到新向量: 图 8.1 给出了 LDA的一个二维示意图。
谢谢观看
新工科建设之路·人工智能系列教材
机器学习(MATLAB 版)
线性判别分析的基本原理
图 8.1 中的特征向量是二维的,向低维(一维)空间即直线投影,投影后的这些点位于直线上。通过向这条 直线投影,两类样本被有效地分开了。由于是向直线投影,因此相当于用一个向量w与特征向量 a 做内而 得到一个标量:
由上述分析可知,LDA 的关键问题是如何确定最佳的投影矩阵 W。先考虑一维投影的情形,此时需要确 定的是投影向量 w。给定样本数据集:
线性定义“类内散布矩阵”为:
线性判别分析的基本原理
线性判别分析的基本原理
线性判别分析的基本原理
线性判别分析的基本原理
线性判别分析的基本原理
线性判别分析的基本原理
若定义类间散布矩阵为: 则总体散布矩阵可以表示为类内散布矩阵与类间散布矩阵之和:
线性判别分析的基本原理
线性判别分析的基本原理
利用拉格朗日乘子法,问题(8.12) 可通过如下广义特征值问题求解:
02
线性判别分析 的 MATLAB实现
线性判别分析的 MATLAB实现
matlab识别一组数据之间差异的方法
一、概述在数据分析领域,识别一组数据之间的差异是非常重要的。
对数据进行差异分析有助于找出不同数据之间的模式和规律,帮助我们更好地理解数据。
MATLAB作为一种强大的数据分析工具,提供了多种方法用于识别数据之间的差异。
本文将介绍一些常用的方法,帮助读者更好地运用MATLAB进行数据差异分析。
二、基本统计方法1. 均值比较均值比较是一种常见的数据差异分析方法。
在MATLAB中,可以使用t检验或者方差分析来进行均值比较。
通过计算不同样本的均值和方差,可以判断它们之间的差异是否具有显著性。
2. 相关性分析相关性分析用于研究两个或多个变量之间的相关性程度。
在MATLAB 中,可以使用相关系数或者协方差矩阵来进行相关性分析。
相关性分析可以帮助我们了解不同变量之间的相关性,从而识别数据之间的差异。
三、数据可视化方法1. 箱线图箱线图是一种常用的数据可视化方法,用于展示一组数据的分布情况。
在MATLAB中,可以使用boxplot函数来绘制箱线图。
通过观察不同数据的箱线图,可以直观地看出它们之间的差异。
2. 散点图散点图是一种展示两个变量之间关系的图表。
在MATLAB中,可以使用scatter函数来绘制散点图。
通过观察不同数据的散点图,可以发现它们之间的差异或者关联。
3. 直方图直方图用于展示一组数据的分布情况。
在MATLAB中,可以使用histogram函数来绘制直方图。
通过比较不同数据的直方图,可以发现它们之间的差异。
四、机器学习方法1. 聚类分析聚类分析是一种无监督学习方法,用于将相似的数据点分组到同一类别中。
在MATLAB中,可以使用k-means聚类算法来进行聚类分析。
通过聚类分析,可以将数据分为不同的类别,从而帮助我们识别数据之间的差异。
2. 主成分分析主成分分析是一种降维技术,用于发现数据集中的模式和结构。
在MATLAB中,可以使用pca函数来进行主成分分析。
通过主成分分析,可以找出数据中的主要特征,帮助我们识别数据之间的差异。
判别分析的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作为训练样本,创建一个朴素贝叶斯分类器对象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];。
Python实现线性判别分析(LDA)的MATLAB方式
#计算第一类样本在直线上的投影点 xi=[] yi=[] for i in range(0,p):
y0=X1[i,1] x0=X1[i,0] x1=(k*(y0-b)+x0)/(k**2+1) y1=k*x1+b xi.append(x1) yi.append(y1) print(xi)
%3.2700 3.5200 1
X=load('22.txt'); pos0=find(X(:,3)==0); pos1=find(X(:,3)==1); X1=X(pos0,1:2); X2=X(pos1,1:2); hold on plot(X1(:,1),X1(:,2),'r+','markerfacecolor', [ 1, 0, 0 ]); plot(X2(:,1),X2(:,2),'b*','markerfacecolor', [ 0, 0, 1 ]);
plt.show()
以上这篇Python实现线性判别分析(LDA)的MATLAB方式就是小编分享给大家的全部内容了,希望能给大家一个参考, 也希望大家多多支持。
p=np.size(X1,0) print(p) q=np.size(X2,0)
print(q)
#第二步,求类内散度矩阵 S1=np.dot((X1-M1).transpose(),(X1-M1)) print(S1) S2=np.dot((X2-M2).transpose(),(X2-M2)) print(S2) Sw=(p*S1+q*S2)/(p+q)
Python实现线性判别分析(LDA)的MATLAB方式
matlab中的降维方法
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等。
这些方法可以帮助我们处理高维数据,提取出重要的特征信息,并可视化数据。
根据具体任务的需求,我们可以选择合适的降维方法来进行数据处理和分析。
要注意的是,在使用这些方法时,需要根据实际情况进行参数调整和结果的解释,以确保得到可靠和有效的降维结果。
判别分析及MATLAB应用
判别分析类型:判断样品属于已知类型中哪一类。
判别分析模型:设有 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)
湖北经济学院统计与应用数学系
严培胜
2)在Matlab软件包中常用的是cov(x,y)和corrcoef(x,y). )在Matlab软件包中常用的是cov(x,y)和 例如,在Matlab软件包中写一个名字为opt_cov_1的 例如,在Matlab软件包中写一个名字为opt_cov_1的 M文件: x=[1 2 3]; y=[3 2 1]; cov(x,y) 存盘后执行,得到: ans = 1 -1 -1 1
湖北经济学院统计与应用数学系 严培胜
(三)贝叶斯判别法
贝叶斯判别法是一种概率方法,它的好处是可 以充分利用先验信息,可以考虑专家的意见。应 用此方法,需要事先假定样本指标值的分布(例 如,多元正态分布等)
湖北经济学院统计与应用数学系
严培胜
在Matlab软件包中,将已经分类的m个数据(长度为n) Matlab软件包中,将已经分类的m个数据(长度为n) 作为行向量,得到一个矩阵trianing,每行都属于一个分类 作为行向量,得到一个矩阵trianing,每行都属于一个分类 类别,分类类别构成一个整数列向量g(共有m 类别,分类类别构成一个整数列向量g(共有m行),待分 类的k个数据(长度为n 类的k个数据(长度为n)作为行向量,得到一个矩阵 sample,然后利用classify函数进行线性判别分析(默认)。 sample,然后利用classify函数进行线性判别分析(默认)。 它的格式为: classify(sample,training,group), classify(sample,training,group), 其中,sample与training必须具有相同的列数,group与 其中,sample与training必须具有相同的列数,group与training 必须具有相同的行数,group是一个整数向量。Matlab内部 必须具有相同的行数,group是一个整数向量。Matlab内部 函数classify的功能是将sample的每一行进行判别,分到 函数classify的功能是将sample的每一行进行判别,分到 training指定的类中。 training指定的类中。
Matlab的判别和转换函数
Matlab的判别和转换函数Matlab的判别和转换函数for i=1:10s1=int2str(i);x(i)=input(['please input x(' s1 ')'])endfor i=1:3for j=1:3s1=int2str(i);s2=int2str(j);x(i,j)=input(['please input x(' s1 ',' s2 ')'])endendISCHAR True for character array (string).ISCHAR(S) returns 1 if S is a character array and 0 otherwise.ISNUMERIC True for numeric arrays.ISNUMERIC(A) returns 1 if A is a numeric array and 0 otherwise.For example, sparse arrays, and double precision arrays are numeric while strings, cell arrays, and structure arrays are not.ISLOGICAL True for logical array.ISLOGICAL(X) returns 1 if X is a logical array and 0 otherwise.Logical arrays must be used to perform logical 0-1 indexing.ISNAN True for Not-a-Number.ISNAN(X) returns an array that contains 1's wherethe elements of X are NaN's and 0's where they are not.For example, ISNAN([pi NaN Inf -Inf]) is [0 1 0 0].ISEMPTY True for empty matrix.ISEMPTY(X) returns 1 if X is an empty array and 0 otherwise.An empty array has no elements, that is prod(size(X))==0.ISINF True for infinite elements.ISINF(X) returns an array that contains 1's where theelements of X are +Inf or -Inf and 0's where they are not.For example, ISINF([pi NaN Inf -Inf]) is [0 0 1 1].ISFINITE True for finite elements.ISFINITE(X) returns an array that contains 1's wherethe elements of X are finite and 0's where they are not.For example, ISFINITE([pi NaN Inf -Inf]) is [1 0 0 0].For any X, exactly one of ISFINITE(X), ISINF(X), or ISNAN(X) is 1 for each element.ISOBJECT True for MATLAB objects.ISOBJECT(A) returns 1 if A is a MATLAB object and 0 otherwise.ISSTRUCT True for structures.ISSTRUCT(S) returns 1 if S is a structure and 0 otherwise.ISCELL True for cell array.ISCELL(C) returns 1 if C is a cell array and 0 otherwise.ISJA VA True for Java object arraysISJA VA(J) returns 1 if J is a Java object array, and 0 otherwise.ISFIELD True if field is in structure array.F = ISFIELD(S,'field') returns true if 'field' is the name of a fieldin the structure array S.ISSPARSE True for sparse matrix.ISSPARSE(S) is 1 if the storage class of S is sparseand 0 otherwise.DOUBLE Convert to double precision.DOUBLE(X) returns the double precision value for X.If X is already a double precision array, DOUBLE hasno effect.DOUBLE is called for the expressions in FOR, IF, and WHILE loopsif the expression isn't already double precision. DOUBLE shouldbe overloaded for all objects where it makes sense to convert itinto a double precision value.INT2STR Convert integer to string.S = INT2STR(X) rounds the elements of the matrix X tointegers and converts the result into a string matrix.NUM2STR Convert number to string.T = NUM2STR(X) converts the matrix X into a string representation T with about 4 digits and an exponent if required. This is useful for labeling plots with the TITLE, XLABEL, YLABEL, and TEXT commands.T = NUM2STR(X,N) converts the matrix X into a string representation with a maximum N digits of precision. The default number of digits is based on the magnitude of the elements of X.T = NUM2STR(X,FORMAT) uses the format string FORMAT (see SPRINTF for details).Example:num2str(randn(2,2),3) produces the string matrix'-0.433 0.125'' -1.67 0.288'SPRINTF Write formatted data to string.[S,ERRMSG] = SPRINTF(FORMAT,A,...) formats the data in the real part of matrix A (and in any additional matrix arguments), under control of the specified FORMAT string, and returns it in the MATLAB string variable S. ERRMSG is an optional outputargument that returns an error message string if an error occurred or an empty matrix if an error did not occur. SPRINTF is the same as FPRINTF except that it returns the data in a MATLAB string variable rather than writing it to a file.FORMAT is a string containing C language conversion specifications. Conversion specifications involve the character %, optional flags, optional widthand precision fields, optional subtype specifier, and conversion characters d, i, o, u, x, X, f, e, E, g, G, c, and s.See the Language Reference Guide or a C manual for complete details.The special formats \n,\r,\t,\b,\f can be used to produce linefeed, carriage return, tab, backspace, and formfeed characters respectively.Use \\ to produce a backslash character and %% to produce the percentcharacter.SPRINTF behaves like ANSI C with certain exceptions and extensions.These include:1. ANSI C requires an integer cast of a double argument to correctly use an integer conversion specifier like d. A similiar conversion is required when using such a specifier with non-integral MATLAB values. Use FIX, FLOOR, CEIL or ROUND on a double argument to explicitly convert non-integral MATLAB values to integral values if you plan to use an integer conversion specifier like d. Otherwise, any non-integral MATLAB values will be outputted using the format where the integer conversion specifier letter has been replaced by e.2. The following non-standard subtype specifiers aresupported for conversion characters o, u, x, and X.t - The underlying C datatype is a float rather than an unsigned integer.b - The underlying C datatype is a double rather than an unsigned integer. For example, to print out in hex a double value use a format like '%bx'.3. SPRINTF is "vectorized" for the case when A is nonscalar. The format string is recycled through the elements of A (columnwise) until all the elements are used up. It is then recycled in a similar manner through any additional matrix arguments.See the reference page in the online help for other exceptions, extensions, or platform-specific behavior.Examplessprintf('%0.5g',(1+sqrt(5))/2) 1.618sprintf('%0.5g',1/eps) 4.5036e+15sprintf('%15.5f',1/eps) 4503599627370496.00000sprintf('%d',round(pi)) 3sprintf('%s','hello') hellosprintf('The array is %dx%d.',2,3) The array is 2x3.sprintf('\n') is the line termination character on all platforms. FPRINTF Write formatted data to file.COUNT = FPRINTF(FID,FORMAT,A,...) formats the data in the real part of matrix A (and in any additional matrix arguments), under control of the specified FORMAT string, and writes it to the file associated with file identifier FID. COUNT is the number of bytes successfully written. FID is an integer file identifier obtained from FOPEN. It can also be 1 for standard output (the screen) or 2for standard error. If FID is omitted, output goes to the screen.FORMAT is a string containing C language conversionspecifications. Conversion specifications involve the character %, optional flags, optional width and precision fields, optional subtype specifier, and conversion characters d, i, o, u, x, X, f, e, E, g, G, c, and s.For more details, see the FPRINTF function description in online help (search by Function Name for FPRINTF), or look up FPRINTF in a C language manual.The special formats \n,\r,\t,\b,\f can be used to produce linefeed, carriage return, tab, backspace, and formfeed characters respectively. Use \\ to produce a backslash character and %% to produce the percent character.FPRINTF behaves like ANSI C with certain exceptions and extensions. These include:1. Only the real part of each parameter is processed.2. ANSI C requires an integer cast of a double argument to correctlyuse an integer conversion specifier like d. A similiar conversionis required when using such a specifier with non-integral MATLAB values. Use FIX, FLOOR, CEIL or ROUND on a double argument to explicitly convert non-integral MATLAB values to integral values if you plan to use an integer conversion specifier like d.Otherwise, any non-integral MATLAB values will be outputted using the format where the integer conversion specifier letter has beenreplaced by e.3. The following non-standard subtype specifiers are supported forconversion characters o, u, x, and X.t - The underlying C datatype is a float rather than anunsigned integer.b - The underlying C datatype is a double rather than anunsigned integer.For example, to print out in hex a double value use a format like '%bx'.4. FPRINTF is "vectorized" for the case when A is nonscalar. Theformat string is recycled through the elements of A (columnwise) until all the elements are used up. It is then recycled in a similar manner through any additional matrix arguments.For example, the statementsx = 0:.1:1; y = [x; exp(x)];fid = fopen('exp.txt','w');fprintf(fid,'%6.2f %12.8f\n',y);fclose(fid);create a text file containing a short table of the exponential function:0.00 1.000000000.10 1.10517092...1.002.71828183See the reference page in the online help for other exceptions, extensions, or platform-specific behavior.See also FSCANF, SPRINTF, FWRITE, DISP, DIARY, SAVE, INPUT.。
判别分析及MATLAB实现PPT90页
1、最灵繁的人也看不见自己的背脊。——非洲 2、最困难的事情就是认识自己。——希腊 3、有勇气承担命运这才是英雄好汉。——黑塞 4、与肝胆人共事,无字句处读书。——周恩来 5、阅读使人充实,会谈使人敏捷,写作使人精确。——培根
1、不要轻言放弃,否则对不起自己。
2、要冒一次险!整个生命就是一场冒险。走得最远的人,常是愿意 去做,并愿意去冒险的人。“稳妥”之船,从未能从岸边走远。-戴尔.卡耐基。
梦 境
3、人生就像一杯没有加糖的咖啡,喝起来是苦涩的,回味起来却有 久久不会退去的余香。
判别分析及MATLAB实现 4、守业的最好办法就是不断的发展。 5、当爱不能完美,我宁愿选择无悔,不管来生多么美丽,我不愿失 去今生对你的记忆,我不求天长地久的美景,我只要生பைடு நூலகம்世世的轮 回里有你。
matlab与判别分析
15.7364
64.9791
25.1491
74.3500
x2junzhi =
16.2875
40.1063
9.2281
58.1050
接着计算判别函数
根据
按照判别原则,若 ,则属于第一组,若 ,则属于第二组
回判
程序
A=sigamani*x1junzhi;
B=sigamani*x2junzhi;
第六章判别分析
安庆师范学院胡云峰
例6.6对全国30个省市自治区1994年影响各地区经济增长差异的制度变量x1—经济增长率,x2—非国有化水平,x3—开放度,x4—市场化程度作贝叶斯判别分析。
类别
序号
地区
x1
x2
x3
x4
第一组
1
辽宁
11.2
57.25
13.47
73.41
2
河北
14.9
67.19
7.89
C=zeros(27,2);
C(:,1)=[1:1:27];
for i=1:1:11
f1=X1(i,:)*A-45.8655;
f2=X1(i,:)*B-29.1344;
if f1>f2
C(i,2)=1;
else
C(i,2)=2;
end
end
for i=1:1:16
f1=X2(i,:)*A-45.8655;
10
广西
16
57.11
12.57
60.91
11
海南
11.9
49.97
30.7
69.2
第二组
12
黑龙江
8.7
判别分析及MATLAB实现.04.19
1T 1T 1 T 1 1 2 [ ( x ) ( x ) ] 2 2 1 1 1 2 2 2 [ w ( x ) wx () ] 2 1
T 1 2
其中
1 T 1 w2 ( x) x 2 2 2 1 T 1 T 1 w1 ( x) 1 x 1 1 2
2
T 1 1 2
d ( x , Gd ) ( x , G ) 2 w ( x ) w ( x ) a( x ) 2 1
T
2
2
于是距离判别准则简化为:
若 w (x) 0 xG 1 若 w (x) 0 xG 2
在实际问题中,由于总体的均值、协方差 矩阵通常是未知的,数据资料来自两个总体的 训练样本,于是用样本的均值、样本的协方差 矩阵代替总体的均值与协方差. 注意:若S1,S2分别为两个样本的协方差矩阵, 则在 时,总体的协方差矩阵估计量 1 2
我们首先给出常见的距离:
1.欧氏距离: 设有n维向量x= (x1,x2,…,xn),y=(y1,y2,…,yn),则 称
d (x ,y )
2 ( x y ) i i i 1 n
为n维向量x,y之间的欧氏距离
在 MATLAB 中,计算欧氏距离有多种方法 设x,y是同维行向量 (1) sqrt(sum((x-y).^2)) (2) sqrt(dot(x-y,x-y)) (3) sqrt((x-y)*(x-y)') (4) dist(x,y') 例1. 设x,y是同维列向量,上述公式是否成立? 若不成立如何修改? 解:前两个正确,后两个错误,修改如下: sqrt((x-y)'*(x-y)),dist(x',y)
matlab判别图的连通性
《数学文化》课程报告题目: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编程判断强连通图、弱连通图和单侧联通图参考文献左孝凌,刘永才著离散数学上海科学技术文献出版社。
判别分析中的变量择优及其MATLAB实现
与特征变量的引入相类似, 设判别函数中已引入 r 个变量, 方程如 ( 1) 式所示, 其对应的W ilk s2□ 统计值 可算出为 Κ . 在 x 1 , x 2 , …, x r 中使用穷举的方法, 不妨设变量是按自然顺序考虑剔除且从 x 1 开始, 此时判别函 r 数记为: (1) (1) (1) ( 4) C 2k x 2 + C 3k x 3 + … + C rk x r , k = 1, 2, …, g 从 ( 4) 式可以得出 r - 1 个变量的W ilk s2□统计值, 记为 Κ . 如果 Κ r- 1 r- 1 < Κ r 可以从判别函数中考虑剔除 x 1 , 否则不能剔除 . 我们可以顺次求出 r 个变量的W ilk s2□ 统计值, 并和 Κ . 若有多个变量的W ilk s2□ r 相比较 统计值小于 Κ . 为了简化计算, 这里我们同样运用 ( 2) 式的 Κ r , 一般选择最大者所对应的变量作为删除对象 xk 作为剔除变量的依据, 剔除变量的门坎值同样使用 ( 3) 式 .
与引入的门坎值比较. 门坎值的确定可用如下统计量:
Fxk = n- r- g g - 1 T kk - W (S ) W kk
(S ) (S ) kk
~ F ( g - 1, n - g - r - 1)
( 3)
对于给定水平 Α , 查 F 分布表可得门坎值 F Α . 如果 F x k > F Α, 则认为变量 x k 重要, 可以引入 ( 1) 式; 否则变 量 x k 不能引入 ( 1) 式 .
S = { ( x k 1 , x k 2 , …, x km ) x k j ∈ V , j = 1, 2, …, m , 且 m = 1, 2, …} D S →R
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
广西某锰矿床已知两种不同锰矿石各项评价指标如下表所列。
现新发现湖润锰矿床,初步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。