求马氏距离_matlab解法
- 格式:doc
- 大小:46.50 KB
- 文档页数:7
一、数据预处理(1)中心化变换(2)归一化处理(3)正规化处理(4)标准正态变量校正(标准化处理)(Standard Normal Variate,SNV)(5)数字平滑与滤波(Smooth)(6)导数处理(Derivative)(7)多元散射校正(Multiplicative Scatter Correction,MSC)(8)正交信号校正(OSC)二、特征的提取与压缩(1)主成分分析(PCA)(2)马氏距离三、模式识别(定性分类)(1)基于fisher意义下的线性判别分析(LDA)(2)K-最邻近法(KNN)(3)模型分类方法(SIMCA)(4)支持向量机(SVM)(5)自适应boosting方法(Adaboost)四、回归分析(定量分析)(1)主成分回归(PCR)(2)偏最小二乘法回归(PLS)(3)支持向量机回归(SVR)一、数据预处理 (1) 中心化变换中心化变换的目的是在于改变数据相对于坐标轴的位置。
一般都是希望数据集的均值与坐标轴的原点重合。
若x ik 表示第i 个样本的第k 个测量数据,很明显这个数据处在数据矩阵中的第i 行第k 列。
中心化变换就是从数据矩阵中的每一个元素中减去该元素所在元素所在列的均值的运算:u ik k x x x =- ,其中k x 是n 个样本的均值。
(2) 归一化处理归一化处理的目的是是数据集中各数据向量具有相同的长度,一般为单位长度。
其公式为:'ik x =归一化处理能有效去除由于测量值大小不同所导致的数据集的方差,但是也可能会丢失重要的方差。
(3)正规化处理正规化处理是数据点布满数据空间,常用的正规化处理为区间正规化处理。
其处理方法是以原始数据集中的各元素减去所在列的最小值,再除以该列的极差。
min()'max()min()ik ik k k x xk x x x -=-该方法可以将量纲不同,范围不同的各种变量表达为值均在0~1范围内的数据。
一、数据预处理(1)中心化变换(2)归一化处理(3)正规化处理(4)标准正态变量校正(标准化处理)(Standard Normal Variate,SNV)(5)数字平滑与滤波(Smooth)(6)导数处理(Derivative)(7)多元散射校正(Multiplicative Scatter Correction,MSC)(8)正交信号校正(OSC)二、特征的提取与压缩(1)主成分分析(PCA)(2)马氏距离三、模式识别(定性分类)(1)基于fisher意义下的线性判别分析(LDA)(2)K-最邻近法(KNN)(3)模型分类方法(SIMCA)(4)支持向量机(SVM)(5)自适应boosting方法(Adaboost)四、回归分析(定量分析)(1)主成分回归(PCR)(2)偏最小二乘法回归(PLS)(3)支持向量机回归(SVR)一、数据预处理 (1) 中心化变换中心化变换的目的是在于改变数据相对于坐标轴的位置。
一般都是希望数据集的均值与坐标轴的原点重合。
若x ik 表示第i 个样本的第k 个测量数据,很明显这个数据处在数据矩阵中的第i 行第k 列。
中心化变换就是从数据矩阵中的每一个元素中减去该元素所在元素所在列的均值的运算:u ik k x x x =- ,其中k x 是n 个样本的均值。
(2) 归一化处理归一化处理的目的是是数据集中各数据向量具有相同的长度,一般为单位长度。
其公式为:'ik x =归一化处理能有效去除由于测量值大小不同所导致的数据集的方差,但是也可能会丢失重要的方差。
(3)正规化处理正规化处理是数据点布满数据空间,常用的正规化处理为区间正规化处理。
其处理方法是以原始数据集中的各元素减去所在列的最小值,再除以该列的极差。
min()'max()min()ik ik k k x xk x x x -=-该方法可以将量纲不同,范围不同的各种变量表达为值均在0~1范围内的数据。
各种距离(欧⽒距离、曼哈顿距离、切⽐雪夫距离、马⽒距离等)在做分类时常常需要估算不同样本之间的相似性度量(SimilarityMeasurement),这时通常采⽤的⽅法就是计算样本间的“距离”(Distance)。
采⽤什么样的⽅法计算距离是很讲究,甚⾄关系到分类的正确与否。
本⽂的⽬的就是对常⽤的相似性度量作⼀个总结。
本⽂⽬录:1.欧⽒距离2.曼哈顿距离3. 切⽐雪夫距离4. 闵可夫斯基距离5.标准化欧⽒距离6.马⽒距离7.夹⾓余弦8.汉明距离9.杰卡德距离& 杰卡德相似系数10.相关系数& 相关距离11.信息熵1. 欧⽒距离(EuclideanDistance)欧⽒距离是最易于理解的⼀种距离计算⽅法,源⾃欧⽒空间中两点间的距离公式。
(1)⼆维平⾯上两点a(x1,y1)与b(x2,y2)间的欧⽒距离:(2)三维空间两点a(x1,y1,z1)与b(x2,y2,z2)间的欧⽒距离:(3)两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的欧⽒距离: 也可以⽤表⽰成向量运算的形式:(4)Matlab计算欧⽒距离Matlab计算距离主要使⽤pdist函数。
若X是⼀个M×N的矩阵,则pdist(X)将X矩阵M⾏的每⼀⾏作为⼀个N维向量,然后计算这M个向量两两间的距离。
例⼦:计算向量(0,0)、(1,0)、(0,2)两两间的欧式距离X= [0 0 ; 1 0 ; 0 2]D= pdist(X,'euclidean')结果:D=1.00002.0000 2.23612. 曼哈顿距离(ManhattanDistance)从名字就可以猜出这种距离的计算⽅法了。
想象你在曼哈顿要从⼀个⼗字路⼝开车到另外⼀个⼗字路⼝,驾驶距离是两点间的直线距离吗?显然不是,除⾮你能穿越⼤楼。
实际驾驶距离就是这个“曼哈顿距离”。
⽽这也是曼哈顿距离名称的来源,曼哈顿距离也称为城市街区距离(CityBlock distance)。
一、数据预处理(1)中心化变换(2)归一化处理(3)正规化处理(4)标准正态变量校正(标准化处理)(Standard Normal Variate,SNV)(5)数字平滑与滤波(Smooth)(6)导数处理(Derivative)(7)多元散射校正(Multiplicative Scatter Correction,MSC)(8)正交信号校正(OSC)二、特征的提取与压缩(1)主成分分析(PCA)(2)马氏距离三、模式识别(定性分类)(1)基于fisher意义下的线性判别分析(LDA)(2)K-最邻近法(KNN)(3)模型分类方法(SIMCA)(4)支持向量机(SVM)(5)自适应boosting方法(Adaboost)四、回归分析(定量分析)(1)主成分回归(PCR)(2)偏最小二乘法回归(PLS)(3)支持向量机回归(SVR)一、数据预处理 (1) 中心化变换中心化变换的目的是在于改变数据相对于坐标轴的位置。
一般都是希望数据集的均值与坐标轴的原点重合。
若x ik 表示第i 个样本的第k 个测量数据,很明显这个数据处在数据矩阵中的第i 行第k 列。
中心化变换就是从数据矩阵中的每一个元素中减去该元素所在元素所在列的均值的运算:u ik k x x x =- ,其中k x 是n 个样本的均值。
(2) 归一化处理归一化处理的目的是是数据集中各数据向量具有相同的长度,一般为单位长度。
其公式为:'ik x =归一化处理能有效去除由于测量值大小不同所导致的数据集的方差,但是也可能会丢失重要的方差。
(3)正规化处理正规化处理是数据点布满数据空间,常用的正规化处理为区间正规化处理。
其处理方法是以原始数据集中的各元素减去所在列的最小值,再除以该列的极差。
min()'max()min()ik ik k k x xk x x x -=-该方法可以将量纲不同,围不同的各种变量表达为值均在0~1围的数据。
一、用法,用来干什么,什么时候用 二、步骤,前因后果,算法的步骤,公式 三、程序 四、举例五、前面国赛用到此算法的备注一下马氏链模型用来干什么马尔可夫预测法是应用概率论中马尔可夫链(Markov chain )的理论和方法来研究分析时间序列的变化规律,并由此预测其未来变化趋势的一种预测技术。
什么时候用应用马尔可夫链的计算方法进行马尔可夫分析, 主要目的是根据某些变量现在的情 况及其变动趋向,来预测它在未来某特定区间可能产生的变动,作为提供某种决策的依 据.马尔可夫链的基本原理我们知道,要描述某种特定时期的随机现象如某种药品在未来某时期的销售情况,比如说第n 季度是畅销还是滞销,用一个随机变量X n 便可以了,但要描述未来所有时期的情况,则需要一系列的随机变量 X 1,X 2,…,X n ,….称{ X t ,t ∈T ,T 是参数集}为随机过程,{ X t }的取值集合称为状态空间.若随机过程{ X n }的参数为非负整数, X n 为离散随机变量,且{ X n }具有无后效性(或称马尔可夫性),则称这一随机过程为马尔可夫链(简称马氏链).所谓无后效性,直观地说,就是如果把{ X n }的参数n 看作时间的话,那么它在将来取什么值只与它现在的取值有关,而与过去取什么值无关.对具有N 个状态的马氏链,描述它的概率性质,最重要的是它在n 时刻处于状态i 下一时刻转移到状态j 的一步转移概率:N j i n p i X j X P j i n n ,,2,1,)()|(1 ====+若假定上式与n 无关,即 ====)()1()0(n p p p j i j i j i ,则可记为j i p (此时,称过程是平稳的),并记⎪⎪⎪⎪⎪⎭⎫⎝⎛=N N N N N N p p p p p p p p p P212222111211(1) 称为转移概率矩阵.转移概率矩阵具有下述性质:(1)N j i p j i ,,2,1,,0 =≥.即每个元素非负.(2)N i p Nj j i ,,2,1,11 ==∑=.即矩阵每行的元素和等于1.如果我们考虑状态多次转移的情况,则有过程在n 时刻处于状态i ,n +k 时刻转移到状态j 的k 步转移概率:N j i n p i X j X P k j i n k n ,,2,1,)()|()( ====+同样由平稳性,上式概率与n 无关,可写成)(k j i p .记⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=)()(2)(1)(2)(22)(21)(1)(12)(11)(k N N k N k N k N k k k N k k k p p p p p p p p p P(2)称为k 步转移概率矩阵.其中)(k j i p 具有性质:N j i p k ji ,,2,1,,0)( =≥; N i p Nj k j i ,,2,1,11)( ==∑=.一般地有,若P 为一步转移矩阵,则k 步转移矩阵⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=)()(2)(1)(2)(22)(21)(1)(12)(11)(k N N k N k N k N k k k N k k k p p p p p p p p p P(3) (2)状态转移概率的估算在马尔可夫预测方法中,系统状态的转移概率的估算非常重要.估算的方法通常有两种:一是主观概率法,它是根据人们长期积累的经验以及对预测事件的了解,对事件发生的可能性大小的一种主观估计,这种方法一般是在缺乏历史统计资料或资料不全的情况下使用.二是统计估算法,现通过实例介绍如下.例3 记录了某抗病毒药的6年24个季度的销售情况,得到表1.试求其销售状态的转移概率矩阵.表1 某抗病毒药24个季度的销售情况季度 销售状态 季度 销售状态 季度 销售状态 季度 销售状态 1 1 (畅销) 7 1(畅销) 13 1(畅销) 19 2(滞销) 2 1(畅销) 8 1(畅销) 14 1(畅销) 20 1(畅销) 3 2(滞销) 9 1(畅销) 15 2(滞销) 21 2(滞销) 4 1(畅销) 10 2(滞销) 16 2(滞销) 22 1(畅销) 5 2(滞销) 11 1(畅销) 17 1(畅销) 23 1(畅销) 62(滞销)122(滞销)181(畅销)241(畅销)分析表中的数据,其中有15个季度畅销,9个季度滞销,连续出现畅销和由畅销转入滞销以及由滞销转入畅销的次数均为7,连续滞销的次数为2.由此,可得到下面的市场状态转移情况表(表2).表2 市场状态转移情况表现计算转移概率.以频率代替概率,可得连续畅销的概率:1170.5151p ===-连续出现畅销的次数出现畅销的次数分母中的数为15减1是因为第24季度是畅销,无后续记录,需减1.同样得由畅销转入滞销的概率:1270.5151p ===-畅销转入滞销的次数出现畅销的次数滞销转入畅销的概率:2170.789p ===滞销转入畅销的次数出现滞销的次数连续滞销的概率:2220.229p ===连续滞销的次数出现滞销的次数综上,得销售状态转移概率矩阵为:⎪⎪⎭⎫ ⎝⎛=⎪⎪⎭⎫ ⎝⎛=22.078.05.05.022211211p pp p P 从上面的计算过程知,所求转移概率矩阵P 的元素其实可以直接通过表2中的数字计算而得到,即将表中数分别除以该数所在行的数字和便可:77711+=p77712+=p 27721+=p 77222+=pMatlab 程序:format rat clca=[ 1 1 2 1 2 2 1 1 1 2 1 2,1 1 2 2 1 1 2 1 2 1 1 1]; for i=1:2 for j=1:2f (i,j)=length(findstr ([i j],a)); end end fni=(sum(f ’))' for i=1:2p(i,:)=f(i ,:)/ni(i ); end p由此,推广到一般情况,我们得到估计转移概率的方法:假定系统有m 种状态S 1,S 2,…,S m ,根据系统的状态转移的历史记录,得到表3的统计表格,以j i p ˆ表示系统从状态i 转移到状态j 的转移概率估计值,则由表3的数据计算估计值的公式如下:表3 系统状态转移情况表(3)带利润的马氏链在马氏链模型中,随着时间的推移,系统的状态可能发生转移,这种转移常常会引起某种经济指标的变化.如抗病毒药的销售状态有畅销和滞销两种,在时间变化过程中,有时呈连续畅销或连续滞销,有时由畅销转为滞销或由滞销转为畅销,每次转移不是盈利就是亏本.假定连续畅销时盈r 11元,连续滞销时亏本r 22元,由畅销转为滞销盈利r 12元,由滞销转为畅销盈利r 21元,这种随着系统的状态转移,赋予一定利润的马氏链,称为有利润的马氏链.对于一般的具有转移矩阵⎪⎪⎪⎪⎪⎭⎫⎝⎛=N N N N N N p p p p p p p p p P212222111211的马氏链,当系统由i 转移到j 时,赋予利润r ij(i ,j =1,2,…,N ),则称⎪⎪⎪⎪⎪⎭⎫⎝⎛=N N N N N N r r r r r r r r r R212222111211(5) 为系统的利润矩阵,r ij >0称为盈利,r ij <0称为亏本,r ij = 0称为不亏不盈.随着时间的变化,系统的状态不断地转移,从而可得到一系列利润,由于状态的转移是随机的,因而一系列的利润是随机变量,其概率关系由马氏链的转移概率决定.例如从抗病毒药的销售状态的转移矩阵,得到一步利润随机变量)1(1x 、)1(2x 的概率分布分别为:)1(1x r 12)1(2x r 21 r 22其中 p 11+ p 12 = 1 ,p 21+ p 22 = 1.如果药品处于畅销阶段,即销售状态为i =1,我们想知道,经过n 个季度以后,期望获得的利润是多少?为此,引入一些计算公式.首先,定义)(n i v 为抗病毒药现在处于)2,1(=i i ,经过n 步转移之后的总期望利润,则 一步转移的期望利润为:∑==+==212211)1()1()(j j i j i i i i i i i p r p r p r x E v其中)()1(i x E 是随机变量)1(i x 的数学期望.二步转移的期望利润为:∑=+=+++==21)1(2)1(221)1(11)2()2(][][][)(j j i j j i i i i i i i p v r p v r p v r x E v其中随机变量)2(i x (称为二步利润随机变量)的分布为:2,1,)()1()2(==+=j p v r x P j i j j i i例如,若⎪⎪⎭⎫ ⎝⎛=6.04.05.05.0P , ⎪⎪⎭⎫⎝⎛-=7339R则抗病毒药销售的一步利润随机变量:抗病毒药畅销和滞销时的一步转移的期望利润分别为:65.035.09)(12121111)1(1)1(1=⨯+⨯=+==p r p r x E v 36.074.03)(22222121)1(2)1(2-=⨯-⨯=+==p r p r x E v二步利润随机变量为:)2(1x 3—3)2(2x —7-3抗病毒药畅销和滞销时的二步转移的期望利润分别为:12)1(21211)1(111)2(1)2(1][][)(p v r p v r x E v +++==5.75.0)33(5.0)69(=⨯-+⨯+=22)1(22221)1(121)2(2)2(2][][)(p v r p v r x E v +++==4.26.0)37(4.0)63(-=⨯--+⨯+=一般地定义k 步转移利润随机变量),2,1()(N i x k i =的分布为:N j p v r x P ji k j j i k i ,2,1)()1()(==+=-则系统处于状态i 经过k 步转移后所得的期望利润)(k i v 的递推计算式为:j i k j Nj j i k i k i p v r x E v )()()1(1)()(-=+==∑∑∑∑=-=-=+=+=Nj j i k j i Nj ji k j Nj j i j i p v v p v p r 1)1()1(1)1(1(6)当k =1时,规定边界条件0)0(=i v .称一步转移的期望利润为即时的期望利润,并记N i q v i i ,2,1,)1(==.可能的应用题型题型一、市场占有率预测例题1在购买该药的总共1000家对象(购买力相当的医院、药店等)中,买A 、B 、C 三药厂的各有400家、300家、300家,预测A 、B 、C 三个厂家生产的某种抗病毒药在未来的市场占有情况。
matlab求解技巧Matlab是一个强大的数值计算及可视化工具,被广泛应用于工程、科学、金融等领域。
在使用Matlab进行求解问题时,有一些技巧可以帮助提高效率和精确度。
下面我将介绍一些常用的Matlab求解技巧。
1. 向量和矩阵运算:Matlab提供了丰富的向量和矩阵运算函数,可以方便地进行矩阵乘法、转置、求逆等操作。
要注意使用正确的运算符和函数来实现所需的运算。
2. 函数优化:Matlab提供了许多函数优化的工具箱,可以通过最小化或最大化目标函数来求解最优解。
常用的函数优化方法包括线性规划、非线性规划、整数规划等,可以选择合适的方法进行求解。
3. 方程求根:Matlab提供了许多方程求根的函数,可以通过求解方程来得到变量的值。
常用的方程求根方法包括二分法、牛顿迭代法、弦切法等,可以根据问题的特点选择合适的方法。
4. 插值和拟合:在一些情况下,我们需要根据已知的数据点来求解未知的数据点。
Matlab提供了插值和拟合的函数,可以根据已知数据点的分布来预测未知数据点的值。
常用的插值和拟合方法包括线性插值、多项式拟合、样条插值等。
5. 数值积分:在一些情况下,我们需要对函数进行积分来求解问题。
Matlab提供了数值积分的函数,可以将积分问题转化为数值计算问题来求解。
常用的数值积分方法包括梯形法则、辛普森法则、龙贝格积分等。
6. 工具箱的使用:Matlab的工具箱可以扩展Matlab 的功能,提供更多的高级算法和方法。
根据具体的问题,可以选择合适的工具箱来进行求解。
常用的工具箱包括信号处理工具箱、优化工具箱、控制系统工具箱等。
7. 向量化:Matlab中的向量化操作可以极大地提高代码的运行效率。
通过使用向量和矩阵运算,可以避免使用循环来逐个处理数据,从而提高程序的执行速度。
要尽量利用Matlab的向量化特性,避免使用循环。
8. 代码调试:在编写Matlab代码时,可能会出现错误或不符合预期的结果。
使用Matlab提供的调试工具可以帮助定位和解决问题。
在做分类时常常需要估算不同样本之间的相似性度量(SimilarityMeasurement),这时通常采用的方法就是计算样本间的“距离”(Distance)。
采用什么样的方法计算距离是很讲究,甚至关系到分类的正确与否。
对常用的相似性度量作一个总结。
1.欧氏距离2.曼哈顿距离3. 切比雪夫距离4. 闵可夫斯基距离5.标准化欧氏距离6.马氏距离7.夹角余弦8.汉明距离9.杰卡德距离& 杰卡德相似系数10.相关系数& 相关距离11.信息熵12.兰氏距离13.斜交空间距离14.最大-最小相似度15.指数相似度16.KL距离1. 欧氏距离(EuclideanDistance)欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式。
(1)二维平面上两点a(x1,y1)与b(x2,y2)间的欧氏距离:三维空间两点a(x1,y1,z1)与b(x2,y2,z2)间的欧氏距离:(2)两个n维向量a(x11,x12,…,x1n)与b(x21,x22,…,x2n)间的欧氏距离:也可以用表示成向量运算的形式:(4)Matlab计算欧氏距离Matlab计算距离主要使用pdist函数。
若X是一个M×N的矩阵,则pdist(X)将X矩阵M行的每一行作为一个N维向量,然后计算这M个向量两两间的距离。
例子:计算向量(0,0)、(1,0)、(0,2)两两间的欧式距离X= [0 0 ; 1 0 ; 0 2]D= pdist(X,'euclidean')结果:D=1.00002.0000 2.23612. 曼哈顿距离(ManhattanDistance)又称绝对值距离从名字就可以猜出这种距离的计算方法了。
想象你在曼哈顿要从一个十字路口开车到另外一个十字路口,驾驶距离是两点间的直线距离吗?显然不是,除非你能穿越大楼。
实际驾驶距离就是这个“曼哈顿距离”。
而这也是曼哈顿距离名称的来源,曼哈顿距离也称为城市街区距离(CityBlock distance)。
《马氏距离判别与贝叶斯判别》实验报告姓名:学号:班级:一、目的:1.熟练掌握matlab软件进行距离判别贝叶斯判别的方法与步骤。
2.掌握判别分析的回代误判率与交叉误判率的编程。
3.掌握贝叶斯判别的误判率的计算。
二、内容:我国山区某大型化工厂,在厂区及邻近地区挑选有代表性的15个大气取样点,每日4次同时抽取大气样品,测定其中含有的6种气体的浓度,前后共4天,每个取样点每种气体实测16次,计算每个取样点每种气体的平均浓度,数据见表1。
气体数据对应的污染地区分类见表1中最后一列。
现有两个取自该地区的4个气体样本,气体指标见表1中的后4行,试解决一下问题:1.判别两类总体的协方差矩阵是否相等,然后用马氏距离判别这4个未知气体样本的污染类别,并计算回代误判率与交叉误判率;若两类总体服从正太分布,第一类与第二类的先验概率分别为7/15、8/15,利用贝叶斯判别样本的污染分类。
2.先验概率为多少时,距离判别与贝叶斯判别相同?调整先验概率对判别结果的影响是什么?3.对第一类与第二类的先验概率分别为7/15、8/15,计算误判概率。
表1 大气样品数据表三、程序马氏距离判别:A=load('shiyan4.txt');x1=A([1:4 7 8 15],2:7);x2=A([5 6 9:14],2:7);m1=mean(x1);m2=mean(x2);n1=size(x1,1);n2=size(x2,1);s1=cov(x1);s2=cov(x2);p=6;s=((n1-1)*s1+(n2-1)*s2)/(n1+n2-2);Q1=(n1-1)*(log(det(s))-log(det(s1))-p+trace(inv(s)*s1));Q2=(n2-1)*(log(det(s))-log(det(s2))-p+trace(inv(s)*s2));if Q1<chi2inv(0.95,21)&&Q2<chi2inv(0.95,21) disp('两组数据协方差相等')elsedisp('两组数据协方差不全相等')end; %判断两总体协方差是否相等%协方差不相等,马氏距离判别x=A(16:19,2:7);w=mahal(x,x1)-mahal(x,x2);for i=1:4if w(i)<=0disp(['第',num2str(i),'个样品污染类别为1']);elsedisp(['第',num2str(i),'个样品污染类别为2']);endend%计算回代误判率for i=1:n1d11(i)=mahal(x1(i,:),x1)-mahal(x1(i,:),x2); endfor i=1:n2d22(i)=mahal(x2(i,:),x2)-mahal(x2(i,:),x1); endn11=length(find(d11>0));n22=length(find(d22>0) );p0=(n11+n22)/(n1+n2)%计算交叉误判率for i=1:n1B=x1([1:i-1,i+1:n1],:);n1=length(B(:,1));n2=length(x2(:,1));m1=mean(B);m2=mean(x2);S1=cov(B);S2=cov(x2);S=((n1-1)*S1+(n2-1)*S2)/(n1+n2-2);Q1=(n1-1)*(log(det(S))-log(det(S1))-p+trace(inv(S)*S1));Q2=(n2-1)*(log(det(S))-log(det(S2))-p+trace(inv(S)*S2));if Q1<chi2inv(0.95,21)&&Q2<chi2inv(0.95,21)D11(i)=(x1(i,:)-mean(B))*inv(S)*(x1(i,:)-mean(B))'-(x1(i,:)-mean(x2))*inv(S)*(x1(i,:)-mean(x2))';elseD11(i)=mahal(x1(i,:),x1)-mahal(x1(i,:),x2); end;endfor i=1:n2D=x2([1:i-1,i+1:n2],:);n1=length(x1(:,1));n2=length(D(:,1));S1=cov(x1);S2=cov(D);S=((n1-1)*S1+(n2-1)*S2)/(n1+n2-2);Q1=(n1-1)*(log(det(S))-log(det(S1))-p+trace(inv(S)*S1));Q2=(n2-1)*(log(det(S))-log(det(S2))-p+trace(inv(S)*S2));if Q1<chi2inv(0.95,21)&&Q2<chi2inv(0.95,21)D22(i)=(x1(i,:)-mean(B))*inv(S)*(x1(i,:)-mean(B))'-(x1(i,:)-mean(x2))*inv(S)*(x1(i,:)-mean(x2))';elseD22(i)=mahal(x2(i,:),x1)-mahal(x2(i,:),x2); end;endN11=length(find(D11>0));N22=length(find(D22>0) );p1=(N11+N22)/(n1+n2)贝叶斯判别:A=load('shiyan4.txt');x1=A([1:4 7 8 15],2:7);x2=A([5 6 9:14],2:7);n1=size(x1,1);n2=size(x2,1);s1=cov(x1) ;s2=co v(x2) ;p=2;s=((n1-1)*s1+(n2-1)*s2)/(n1+n2-2);Q1=(n1-1)*(log(det(s))-log(det(s1))-p+trace(inv(s)*s1));Q2=(n2-1)*(log(det(s))-log(det(s2))-p+trace(inv(s)*s2));%判断两总体协方差是否相等if Q1<chi2inv(0.95,3)&&Q2<chi2inv(0.95,3)disp('两组数据协方差相等')elsedisp('两组数据协方差不全相等')end;%判断两总体协方差是否相等%协方差不相等贝叶斯判别x=A(16:19,2:7);p1=7/15;p2=8/15;for i=1:4d1(i)=mahal(x(i,:),x1)-log(det(s1))-2*log(p1);d2(i)=mahal(x(i,:),x2)-log(det(s2))-2*log(p2);if d1(i)<=d2(i)disp(['第',num2str(i),'个样品污染类别为1']);elsedisp(['第',num2str(i),'个样品污染类别为2']);endend%计算回代误判率n11=0;n22=0;for i=1:n1d1(i,1)=(x1(i,:)-m1)*inv(s1)*(x1(i,:)-m1)'-log(det(s1))-2*log(p1);d1(i,2)=(x1(i,:)-m2)*inv(s2)*(x1(i,:)-m2)'-log(det(s2))-2*log(p2);for j=1:2if d1(i,j)==min(d1(i,:))&j~=1n11=n11+1;endendendfor i=1:n2d2(i,1)=(x2(i,:)-m1)*inv(s1)*(x2(i,:)-m1)'-log(det(s1))-2*log(p1);d2(i,2)=(x2(i,:)-m2)*inv(s2)*(x2(i,:)-m2)'-log(det(s2))-2*log(p2);for j=1:2if d2(i,j)==min(d2(i,:))&j~=2n22=n22+1;endendendp0=(n11+n22)/(n1+n2)%计算交叉误判率N11=0;N22=0;for k=1:n1A=x1([1:k-1,k+1:n1],:);N1=length(A(:,1));M1=mean(A,1);m2=mean(x2);s11=cov(A);s2=cov(x2);S1=((N1-1)*s11+(n2-1)*s2)/(N1+n2-k);for i=1:n1d11(i,1)=M1*inv(S1)*x1(i,:)'-1/2*M1*inv(S1)*M1'+log(p1);d11(i,2)=m2*inv(S1)*x1(i,:)'-1/2*m2*inv(S1)*m2'+log(p2);for j=1:2if d11(i,j)==min(d11(i,:))&j~=1 N11=N11+1;endendendendfor k=1:n2B=x2([1:k-1,k+1:n2],:);N2=length(B(:,1));M2=mean(B,1);m1=mean(x1);s22=cov(B);s1=cov(x1);S2=((n1-1)*s1+(N2-1)*s22)/(n1+N2-k);for i=1:n2d22(i,1)=m1*inv(S2)*x2(i,:)'-1/2*m1*inv(S2)*m1'+log(p1);d22(i,2)=M2*inv(S2)*x2(i,:)'-1/2*M2*inv(S2)*M2'+log(p2);for j=1:2if d22(i,j)==min(d22(i,:))&j~=2N22=N22+1;endendendendp1=(N11+N22)/(n1+n2)四、结果马氏距离判别:两组数据协方差不全相等,第1、2个样品污染类别为1第3、4个样品污染类别为2,回代误判率p=0,交叉误判率p=0.5714。
欧氏距离:(∑(Xi-Yi)2),即两项间的差是每个变量值差的平方和再平方根,目的是计算其间的整体距离即不相似性。
我们熟悉的欧氏距离虽然很有用,但也有明显的缺点。
它将样品的不同属性(即各指标或各变量)之间的差别等同看待,这一点有时不能满足实际要求。
例如,在教育研究中,经常遇到对人的分析和判别,个体的不同属性对于区分个体有着不同的重要性。
因此,有时需要采用不同的距离函数。
如果用dij表示第i个样品和第j个样品之间的距离,那么对一切i,j和k,dij应该满足如下四个条件:①当且仅当i=j时,dij=0②dij>0③dij=dji(对称性)④dij≤dik+dkj(三角不等式)显然,欧氏距离满足以上四个条件。
满足以上条件的函数有多种,本节将要用到的马氏距离也是其中的一种。
第i个样品与第j个样品的马氏距离dij用下式计算:dij=(xi一xj)'S-1(xi一xj)其中,xi和xj分别为第i个和第j个样品的m个指标所组成的向量,S为样本协方差矩阵。
巴氏距离:In statistics, the Bhattacharyya distance measures the similarity oftwo discrete probability distributions. It is normally used to measure the separability of classes in classification.For discrete probability distributions p and q over the same domain X, it is defined as:where:is the Bhattacharyya coefficient. For continuous distributions, the Bhattacharyya coefficient is defined as:In either case, and . DB need not obey the triangleinequality, but does obey the triangle inequality.For multivariate Gaussian distributions pi = N(mi,Pi),where mi and Pi are the means and covariances of the distributions, andNote that the first term in the Bhattacharyya distance is related to the Mahalanobis distance.(巴式距离和马氏距离之间的关系)马氏距离:马氏距离有很多优点。
判别分析上机练习题一、基础题1. 给定一组数据,如何判断其适合进行判别分析?2. 简述费希尔判别法的基本思想。
3. 什么是马氏距离?它在判别分析中的作用是什么?4. 请列举至少三种常用的判别分析方法。
5. 在进行判别分析时,为什么要对数据进行标准化处理?二、选择题1. 判别分析的主要目的是:A. 分类B. 聚类C. 回归D. 相关性分析A. 费希尔判别法B. 贝叶斯判别法C. 线性回归D. 逐步判别法A. S_wB. S_bC. S_tD. S_o4. 贝叶斯判别法的分类原则是:A. 使总体概率最大B. 使后验概率最大C. 使先验概率最大D. 使损失函数最小三、计算题1. 已知某组数据的协方差矩阵如下,请计算马氏距离:S = | 2 1 || 1 3 |μ_1 = (1, 2, 3)μ_2 = (2, 3, 4)3. 设有两个总体G1和G2,它们的先验概率分别为P(G1) = 0.6,P(G2) = 0.4。
现有一观测向量X,其属于G1和G2的概率密度函数分别为f1(x)和f2(x)。
试计算X属于G1的后验概率。
G1: (1, 2), (2, 3), (3, 4)G2: (4, 5), (5, 6), (6, 7)四、应用题客户编号 | 年收入(万元) | 消费金额(万元)1 | 10 | 22 | 15 | 33 | 20 | 54 | 25 | 65 | 30 | 86 | 35 | 107 | 40 | 128 | 45 | 15类别1:(1, 2), (2, 3), (3, 4)类别2:(4, 5), (5, 6), (6, 7)新观测样本:(3, 5)五、案例分析题病人编号 | 肺活量(升) | 心率(次/分钟) | 疾病类型 | | |1 | 3.5 | 75 | A2 | 4.0 | 80 | A3 | 3.8 | 78 | A4 | 4.2 | 85 | B5 | 4.5 | 90 | B6 | 4.3 | 88 | B新病人 | 4.1 | 82 | ?用户编号 | 购买频率(次/月) | 平均消费金额(元) | 用户类别| | |1 | 3 | 500 | 高价值2 | 2 | 300 | 低价值3 |4 | 700 | 高价值4 | 1 | 200 | 低价值5 | 5 | 900 | 高价值新用户 | 4 | 600 | ?六、编程题1. 编写Python代码,实现费希尔线性判别函数。
求马氏距离(Mahalanobis distance )--matlab版方法一:X = [1 2; 1 3; 2 2; 3 1];[mx,nx] = size(X);Dis = ones(mx,nx);Cov = cov(X);for i=1:mxfor j=1:nxD(i,j)=((X(i,:)-X(j,:))*inv(C)*(X(i,:)-X(j,:))')^0.5;endendD>> XX =1 21 32 23 1>> DD =0 2.3452 2.0000 2.34522.3452 0 1.2247 2.44952.0000 1.2247 0 1.22472.3452 2.4495 1.2247 0>> 2.3452 X的第一行向量与第二行向量之间的马氏距离。
2.0000 X的第一行向量与第三行向量之间的马氏距离。
方法二:X = [1 2; 1 3; 2 2; 3 1]X =1 21 32 23 1Y = pdist(X,'mahal')Y =2.3452 2.0000 2.3452 1.2247 2.4495 1.2247function d = mahalanobis(X, Mu, C)%MAHALANOBIS Mahalanobis distance.% D = MAHALANOBIS(X, MU, C) returns the Mahalanobis distance between % the length p vectors X and MU given the p by p covariance matrix % C. If omitted, it is assumed that C is the identity matrix(单位矩阵/恒等矩阵)% EYE(p). If either X or MU is an n by p matrix, D will be returned % as an n by g matrix where n is the number of rows in X and g is % the number of rows in MU where each entry i, j corresponds to the % mahalanobis distance between row i of X and row j of MU. If MU is % simply 0, it is treated as the origin from which Mahalanobis% distance to X is calculated. C must be a positive, definite,% symmetric matrix.%% The Mahalanobis distance between vectors X(i,:) and MU(j,:) is% defined as:%% D(i,j) = ((X(i,:) - MU(j,:))'*INV(C)*(X(i,:) - MU(j,:))).^(1/2)% Copyright (c) 1999 Michael Kiefte.% $Log$error(nargchk(2, 3, nargin))if isempty(X) | ~isa(X, 'double') | ~isreal(X) | ...any(any(isnan(X) | isinf(X)))error(['X must be a vector or matrix of real, finite numeric' ...' doubles.'])elseif length(X) == prod(size(X))X = X(:)';elseif ndims(X) ~= 2error('If X is a matrix, it must be a 2-d array.')end[n p] = size(X);if isempty(Mu) | ~isa(Mu, 'double') | ~isreal(Mu) | ...any(any(isnan(Mu) | isinf(Mu)))error(['Mu must be a vector or matrix of real, finite numeric' ...' doubles.'])elseif length(Mu) == prod(size(Mu))Mu = Mu(:)';elseif ndims(Mu) ~= 2error('If MU is a matrix, it must be a 2-d array.')endif length(Mu) == 1 & Mu == 0Mu = zeros(1, p);elseif size(Mu, 2) ~= perror('Number of features in MU and X must be the same.')endg = size(Mu, 1);if ~isempty(C)if ~isa(C, 'double') | ~isreal(C) | ndims(C) ~= 2 | ...any(any(isnan(C) | isinf(C)))error('C must be a matrix of real, finite numeric doubles.')elseif any(size(C) ~= p)error(['Number of rows and columns in C must match number of' ...' features in X and MU.'])endtryS = inv(chol(C));catcherror(['Covariance matrix C must be positive, definite,' ...' symmetric.'])endXs = X*S;Ms = Mu*S;elseXs = X;Ms = Mu;endd = sqrt(repmat(sum(Xs.^2, 2), 1, g) - 2*Xs*Ms' + ...repmat(sum(Ms'.^2), n, 1));spss快速聚类具体操作方法外部数据导入SPSS中2008年10月08日星期三21:09SPSS可以直接读入许多格式的数据文件,选择菜单File==>Open==>Data或直接单击快捷工具栏上的图标,系统就会弹出Open File对话框,单击“文件类型”列表框,在里面能看到直接打开的数据文件格式,分别是:* SPSS(*.sav):SPSS数据文件(6.0~10.0版);* SPSS/PC+(*.sys):SPSS 4.0版数据文件;* Systat(*.syd):*.syd格式的Systat 数据文件;* Systat(*.sys):*.sys格式的Systat 数据文件;* SPSS portable(*.por):SPSS便携格式的数据文件;* EXCEL(*.xls):EXCEL数据文件(从5.0版~2000版);* Lotus(*.w*):Lotus数据文件;* SYLK(*.slk):SYLK数据文件;* dBase(*.dbf):dBase系列数据文件(从dBase II~IV);* Text(*.txt):纯文本格式的数据文件;* data(*.dat):纯文本格式的数据文件。
在常用的其他类型的数据文件中,比较常用的是Text纯文本格式的数据文件(*.txt)与EXCEL 数据文件(*.xls)。
(注释:有的EXCEL文件也可转化为*.txt文件类型,再导入SPSS中)1. 纯文本格式的数据文件(*.txt)的转换由于(*.txt)纯文本的数据文件转换比较常见,因此在File的命令菜单就直接具有Read Text Data的命令项。
选择菜单File=>Read Text Data,系统就会弹出Open File对话框,并自动指向(*.txt)文件或者自己选择目录,打开(*.txt)文件。
操作如下:* File=>Read text data,进入Open File对话框,浏览并找到需要转换的文件“*.txt”,选中该文件,双击文件(或点击“打开”按钮),进入格式转换界面。
* “Step 1 of 6”说明该向导共分6步,这是第一步。
中间的“Text File:”后面指明了引用文本的路径,无需定义。
“Does your file match a predefined format”询问“文本文件是否和预定格式相一致?”。
默认是前者。
* 选择“No”以后,可以点击“取消”停止操作,也可以单击“帮助”寻求帮助信息。
如果没有问题,则可以点击“下一步”。
* “Step 2 of 6”最上方的问题是“How are your variables arranged?”,询问了变量的安排。
“Delimited”表示用Spaces(空格)、commas(逗号)、tabs(跳格键)及其他字符间隔开来。
“Fixed”表示变量与观测值都具有固定排列的位置,没有字符的间隔。
一般情况下文本的数据文件都是字符或空格间隔开来的,因此,通常选择“Delimited”。
“Are variable names included at the top of your file?”则询问了变量行是否位于文本文件的首行。
如果首行的变量名不适于SPSS软件的规定,系统将进行自动的定义。
* “Step 3 of 6”主要是对观测值进行界定。
“The first case of data begins on which line number? ”询问“第一个记录起始于哪一行?”。
如果第一行是变量名,这里就要选择2。
空白处的数字可以根据具体情况自由选择。
* “How are your cases represented?”询问“记录是如何存储于文本文件中的?”。
一般是“Each line represents a case”,表示“每一行代表一条记录”。
如果所需描述的变量较多、文本文件要用大于一行的长度来写完一条记录的特征量情况下,则是“A specific number of variables represents a case”,表示“每n行代表一条记录”,在空格中可以根据具体需要调整行数。