主要内容

mahal

到参考样本的马氏距离

说明

d2 = mahal(Y,X) 返回 Y 中每个观测值到 X 中参考样本的平方马氏距离

示例

示例

全部折叠

生成相关的二元样本数据集。

rng('default') % For reproducibility
X = mvnrnd([0;0],[1 .9;.9 1],1000);

指定四个在欧几里德距离上到 X 的均值等距的观测值。

Y = [1 1;1 -1;-1 1;-1 -1];

计算 Y 中每个观测值到 X 中参考样本的马氏距离。

d2_mahal = mahal(Y,X)
d2_mahal = 4×1

    1.1095
   20.3632
   19.5939
    1.0137

计算 Y 中每个观测值到 X 均值的平方欧几里德距离。

d2_Euclidean = sum((Y-mean(X)).^2,2)
d2_Euclidean = 4×1

    2.0931
    2.0399
    1.9625
    1.9094

使用 scatter 绘制 XY,并使用标记颜色来可视化 YX 中参考样本的马氏距离。

scatter(X(:,1),X(:,2),10,'.') % Scatter plot with points of size 10
hold on
scatter(Y(:,1),Y(:,2),100,d2_mahal,'o','filled')
hb = colorbar;
ylabel(hb,'Mahalanobis Distance')
legend('X','Y','Location','best')

Figure contains an axes object. The axes object contains 2 objects of type scatter. These objects represent X, Y.

Y 中的所有观测值([1,1][-1,-1,][1,-1][-1,1])在欧几里德距离上与 X 均值等距。但在马氏距离上,[1,1][-1,-1][1,-1][-1,1] 更接近 X。由于马氏距离会考虑数据的协方差和不同变量的尺度,因此它对于检测离群值非常有用。

输入参数

全部折叠

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

XY 必须具有相同的列数,但可以有不同的行数。

数据类型: single | double

参考样本,指定为 p×m 数值矩阵,其中 p 是样本数,m 是每个样本中的变量数。

XY 必须具有相同的列数,但可以有不同的行数。X 的行数必须大于列数。

数据类型: single | double

输出参量

全部折叠

Y 中每个观测值到 X 中参考样本的平方马氏距离,以 n×1 的数值向量形式返回,其中 nX 中的观测值数。

详细信息

全部折叠

提示

  • 每次调用 mahal 函数时,它都会计算参考样本的协方差矩阵。在要计算多组数据与相同参考样本 X 之间的马氏距离的情况下,您可以通过仅计算一次 X 的协方差矩阵并将其提供给 pdist2 函数来节省计算时间。有关示例,请参阅计算马氏距离

版本历史记录

在 R2006a 之前推出