Bhattacharyya 距离(附matlab代码)
2014-05-06 18:57
211 查看
/article/4956259.html
Bhattacharyya距离
在统计学中,Bhattacharyya距离(以下称巴氏距离)测量的是两个离散或连续概率分布的相似性。计算方式和Bhattacharyya系数关系很密切。两种计算方式都以A. Bhattacharyya名字命名,Bhattacharyya是一位30年代在印度统计研究所工作的统计学家。巴氏系数可用来对两组样本的相关性进行测量。这一方法常用来作分类器算法。[1]
数学定义
-离散概率分布
对于在X数域上的两个离散概率分布p和q,巴氏距离定义为[2]:
DB(p,q) = -ln(BC(p,q))
其中
BC(p,q) = ∑√p(x)q(x)
BC被称作Bhattacharyya系数(巴氏系数)
0≤BC≤1q且0≤DB≤∞
-连续概率分布
在连续情形中,Bhattacharyya系数如下定义:
BC(p,q) = ∫√p(x)q(x)dx
0≤BC≤1q且0≤DB≤∞
两种情形中,巴氏距离DB均不满足三角不等式
Bhattacharyya系数
Bhattacharyya系数[3](Bhattacharyya Coefficient, 巴氏系数)是对两个统计样本的重叠量的近似计算。巴氏系数可用来对两组样本的相关性进行测量。
计算巴氏系数涉及到对该两个样本的重叠部分进行基本形式的积分。两个样本值的积分被分成指定数目的部分。而每一个样本的每一个部分的成员数被用于下式中:
Bhattacharyya = ∑{i=1|n}√(∑ai·∑bi)
其中,a,b为两个样本,n是分块数,ai, bi分别是在a, b中第i部分的成员数。
这样一来,这个式子就会随着因某块中有两个样本的公共成员而变大,也会随着某块中有一大片重叠的样本成员而变大。分块数的选定依赖于样本中的成员数量;如果分块太少会因过估了重叠区域而失去精确性,如果分块太多会因为造成空块而失去精确性。
如果两个样本完全没有重叠,巴氏系数将会等于0,因为每一个分块都将被0乘。这意味着完全分离的样本不能被巴氏系数单独测定出来。
Bhattacharyya距离
在统计学中,Bhattacharyya距离(以下称巴氏距离)测量的是两个离散或连续概率分布的相似性。计算方式和Bhattacharyya系数关系很密切。两种计算方式都以A. Bhattacharyya名字命名,Bhattacharyya是一位30年代在印度统计研究所工作的统计学家。巴氏系数可用来对两组样本的相关性进行测量。这一方法常用来作分类器算法。[1]
数学定义
-离散概率分布
对于在X数域上的两个离散概率分布p和q,巴氏距离定义为[2]:
DB(p,q) = -ln(BC(p,q))
其中
BC(p,q) = ∑√p(x)q(x)
BC被称作Bhattacharyya系数(巴氏系数)
0≤BC≤1q且0≤DB≤∞
-连续概率分布
在连续情形中,Bhattacharyya系数如下定义:
BC(p,q) = ∫√p(x)q(x)dx
0≤BC≤1q且0≤DB≤∞
两种情形中,巴氏距离DB均不满足三角不等式
Bhattacharyya系数
Bhattacharyya系数[3](Bhattacharyya Coefficient, 巴氏系数)是对两个统计样本的重叠量的近似计算。巴氏系数可用来对两组样本的相关性进行测量。
计算巴氏系数涉及到对该两个样本的重叠部分进行基本形式的积分。两个样本值的积分被分成指定数目的部分。而每一个样本的每一个部分的成员数被用于下式中:
Bhattacharyya = ∑{i=1|n}√(∑ai·∑bi)
其中,a,b为两个样本,n是分块数,ai, bi分别是在a, b中第i部分的成员数。
这样一来,这个式子就会随着因某块中有两个样本的公共成员而变大,也会随着某块中有一大片重叠的样本成员而变大。分块数的选定依赖于样本中的成员数量;如果分块太少会因过估了重叠区域而失去精确性,如果分块太多会因为造成空块而失去精确性。
如果两个样本完全没有重叠,巴氏系数将会等于0,因为每一个分块都将被0乘。这意味着完全分离的样本不能被巴氏系数单独测定出来。
function d=bhattacharyya(X1,X2) % BHATTACHARYYA Bhattacharyya distance between two Gaussian classes % % d = bhattacharyya(X1,X2) returns the Bhattacharyya distance between X1 and X2. % % Inputs: X1 and X2 are n x m matrices represent two sets which have n % samples and m variables. % % Output: d is the Bhattacharyya distance between these two sets of data. % % Example: %{ N=100; M=10; e1=2; e2=5; c1=3; c2=7; X1 = c1*randn(N,M)+e1; X2 = c2*randn(N,M)+e2; d = bhattacharyya(X1,X2); %} % Reference: % Kailath, T., The Divergence and Bhattacharyya Distance Measures in Signal % Selection, IEEE Trasnactions on Communication Technology, Vol. 15, No. 1, % pp. 52-60, 1967 % % By Yi Cao at Cranfield University on 8th Feb 2008. % %Check inputs and output error(nargchk(2,2,nargin)); error(nargoutchk(0,1,nargout)); [n,m]=size(X1); % check dimension % assert(isequal(size(X2),[n m]),'Dimension of X1 and X2 mismatch.'); assert(size(X2,2)==m,'Dimension of X1 and X2 mismatch.'); mu1=mean(X1); C1=cov(X1); mu2=mean(X2); C2=cov(X2); C=(C1+C2)/2; dmu=(mu1-mu2)/chol(C); try d=0.125*dmu*dmu'+0.5*log(det(C/chol(C1*C2))); catch d=0.125*dmu*dmu'+0.5*log(abs(det(C/sqrtm(C1*C2)))); warning('MATLAB:divideByZero','Data are almost linear dependent. The results may not be accurate.'); end % d=0.125*dmu*dmu'+0.25*log(det((C1+C2)/2)^2/(det(C1)*det(C2)));
相关文章推荐
- SAR成像学习(四)距离方向成像matlab代码解析 2
- SAR成像学习(三)距离方向成像matlab代码解析 1
- 机器学习中应用到的各种距离介绍(附上Matlab代码)
- 图像颜色与强度分离(intensity and color decouple)方法 matlab代码
- CRF&HMM的Matlab代码
- [初学笔记] matlab中怎么对一段代码加注释
- matlab纹理特征提取代码
- DL学习笔记1—BP算法的matlab代码学习
- Matlab与C/C++联合编程之Matlab以MEX方式调用C/C++代码(一)
- MATLAB求解函数的零点+代码演示
- Matlab C代码生成 4
- MATLAB画图常用调整代码
- 用Matlab来将分层制造过程中G代码所表示的单层的加工路径显示出来
- 距离裁剪代码
- matlab版hog特征代码
- Matlab实现meanshift算法,目标跟踪代码实现
- MATLAB中对一个矩阵的行(列)归一化为二范数是1的简洁代码:一句实现
- 频域低通滤波器(MATLAB 含代码)
- 求两三维坐标点间的欧几里得距离的程序(MATLAB语言)
- 图像的结构张量MATLAB代码