一、什么是matlab pdist?
matlab pdist是用于计算N个数据样本之间的距离的函数。它可以计算各种距离,如欧式距离、曼哈顿距离、余弦相似度等。该函数非常实用,在机器学习、模式识别和聚类分析等方面经常被使用。
二、matlab pdist的基本用法
matlab pdist函数的基本语法如下:
Y = pdist(X,distance)
X为一个N行D列的矩阵,表示N个数据样本,每个样本有D个维度。distance为一个字符串,表示要计算的距离类型,如'euclidean'表示欧式距离,'cityblock'表示曼哈顿距离,'cosine'表示余弦相似度等。
函数返回一个长度为M的向量Y,表示N个样本两两之间的距离。Y中的元素按照以下公式计算:
Y(i,j) = distance(X(i,:),X(j,:))
其中的distance根据distance字符串指定的距离类型而不同。
三、matlab pdist的高级用法
1. 自定义距离函数
除了内置的距离类型之外,matlab pdist还支持用户自定义距离函数。自定义距离函数以两个样本为输入,并返回它们之间的距离。例如,下面的代码为计算样本之间的皮尔逊相关系数:
function D = pearson_distance(X,Y)
mu_x = mean(X);
mu_y = mean(Y);
D = 1 - (X-mu_x)*(Y-mu_y)' / (sqrt((X-mu_x)*(X-mu_x)')*sqrt((Y-mu_y)*(Y-mu_y)'));
end
Y = pdist(X,@pearson_distance);
其中的@pearson_distance表示使用pearson_distance函数计算距离。
2. 使用函数句柄
可以使用函数句柄来调用自定义的距离函数。这个句柄需要接收两个输入参数,即两个样本。例如:
Y = pdist(X,@(x,y) corr(x','type','Pearson'));
这里使用了匿名函数来调用matlab内置的corr函数计算皮尔逊相关系数。
3. 选择不同的输出类型
matlab pdist函数的默认输出类型是向量。但是也可以选择输出一个N*N的距离矩阵或一个三维矩阵。例如:
D = squareform(pdist(X));
M = pdist(X,'mahalanobis');
Z = linkage(X,'ward','euclidean');
dendrogram(Z);
四、matlab pdist的示例代码
下面是一个完整的matlab pdist例子,使用欧式距离,计算5个样本之间的距离:
X = [1 2 3; 4 5 6; 7 8 9; 10 11 12; 13 14 15];
Y = pdist(X);
disp(Y);
输出结果为:
4.2426 8.4853 12.7279 17.0000 21.2766 4.2426 8.4853 12.7279 17.0000 4.2426
8.4853 12.7279 17.0000 5.6569 9.8995 14.1421 18.3848 5.6569 9.8995 5.6569
8.4853 12.7279 15.5563 7.0711 10.9095 13.7478 10.9095 7.0711 7.0711
8.4853 10.9545 8.4853 6.3639 3.6056 3.6056 6.3639 8.4853
6.3639 6.3639 1.4142 4.2426 8.4853 10.9545 8.4853
五、总结
matlab pdist函数是一个非常实用的函数,能够计算各种距离类型。除了内置的距离类型,还支持自定义距离函数和函数句柄。在机器学习、模式识别和聚类分析等领域中经常用到。