2026a

# mahal


到高斯混合分量的马氏距离

函数库: TyStatistics

# 语法

d2 = mahal(gm,X)

# 说明

d2 = mahal(gm,X) 返回 X 中每个观测值到 gm 中每个高斯混合分量的马氏距离平方。 示例

# 示例

测量马氏距离

使用 mvnrnd 函数生成遵循两个二元高斯分布混合的随机变量。 使用 fitgmdist 函数将高斯混合模型 (GMM) 拟合到生成的数据,然后计算生成的数据与拟合 GMM 的混合分量之间的马哈拉诺比斯距离。

定义两个二元高斯混合分量的分布参数(均值和协方差)。

using TyStatistics
using TyMath
using TyPlot
rng = MT19937ar(5489);
mu1 = [1 2];
sigma1 = [2 0; 0 .5];
mu2 = [-3 -5];
sigma2 = [1 0; 0 1];

从每个分量生成相同数量的随机变量,然后组合两组随机变量。

r1, = mvnrnd(rng,mu1,sigma1,1000);
r2, = mvnrnd(rng,mu2,sigma2,1000);
X = [r1; r2];

组合数据集 X 包含遵循两个二元高斯分布混合的随机变量。

将二分量 GMM 拟合到 X。

gm = fitgmdist(X,2,randseed=rng)
gm = 
在2个维中具有2个成分的高斯混合分布
成分 1:
混合比例: 0.5000000349712568
均值:  -2.9617249214106183  -4.972669853991235

成分 2:
混合比例: 0.4999999650287432
均值:  0.9538515431779069  2.026091266169074

fitgmdist 使用两个混合分量将 GMM 拟合到 X。 分量 1 和分量 2 的均值分别为 [-2.9617,-4.9727] 和 [0.9539,2.0261],分别接近 mu2 和 mu1。

计算 X 中每个点到 gm 每个分量的马氏距离。

d2 = mahal(gm,X);

使用 scatter 绘制 X,并使用标记颜色来可视化到分量 1 的马哈拉诺比斯距离。

s = scatter(X[:,1],X[:,2],10,d2[:,1],marker=".")
c = colorbar(s)
c.set_label("Mahalanobis Distance to Component 1")

# 输入参数

gm - 高斯混合分布
gm分布对象

高斯混合分布,也称为高斯混合模型 (GMM),指定为 gmdistribution 对象。

您可以使用 gmdistributionfitgmdist 创建 gmdistribution 对象。 使用 gmdistribution 函数通过指定分布参数来创建 gmdistribution 对象。 使用 fitgmdist 函数将 gmdistribution 模型拟合到给定固定数量组件的数据。

X - 数据
n×m 数值矩阵

X,指定为 n×m 数值矩阵,其中 n 是观测值的数量,m 是每个观测值中变量的数量。

如果 X 的一行包含 NaN,则 mahal 会从计算中排除该行。 d2 中对应的值为 NaN。

数据类型: Float32 | Float64 | Int8 | Int16 | Int32 | Int64 | Int128 | UInt8 | UInt16 | UInt32 | UInt64 | UInt128

# 输出参数

d2 - 马氏距离的平方
n×k 数值矩阵

X 中每个观测值与 gm 中每个高斯混合分量的马哈拉诺比斯距离平方,以 n×k 数值矩阵形式返回,其中 n 是 X 中观测值的数量,k 是 gm 中混合分量的数量。

d2[i,j] 是观测值 i 到第 j 个高斯混合分量的平方距离。

# 详细信息

马氏距离
n×k 数值矩阵

马哈拉诺比斯距离是样本点和分布之间的度量。

从向量 x 到均值 μ 和协方差 Σ 的分布的马氏距离为

该距离表示 x 与标准差数量平均值的距离。

mahal 将 X 中的观测值的马哈拉诺比斯距离 的平方返回到以 gm 为单位的混合分量。

# 另请参阅

gmdistribution | cluster | posterior | fitgmdist