3

有没有办法在 MATLAB k-means 实现中传递自定义距离函数(例如 jaccard 距离)?

杰卡德距离函数

D = pdist(X,'jaccard');
4

2 回答 2

2

您需要做的是使用 SVD 将距离矩阵分解为特征空间,然后对由 SVD 的分数表示的新特征空间执行 kmeans。参见 Rob Tibshirani 的《统计学习要素》。

或者你可以做 k 个与距离矩阵一起工作的 mediods - R 中的 as.dist() 会将一个矩阵转换为一个 dist 对象,然后你可以在这个对象上做 K-mediods。

于 2012-09-14T21:36:33.167 回答
0

文档中,我们了解到我们可以将'distance'选项传递给kmeans

'距离'

距离测量,在 p 维空间中。kmeans 对此参数进行最小化。kmeans 为不同的支持距离度量计算不同的质心簇。

'sq欧几里得'

平方欧几里得距离(默认)。每个质心是该集群中点的平均值。

'城市街区'

绝对差之和,即L1距离。每个质心是该集群中点的组件中位数。

'余弦'

一减去点之间夹角的余弦(视为向量)。在将这些点标准化为单位欧几里得长度之后,每个质心都是该簇中点的平均值。

'相关性'

一减去点之间的样本相关性(视为值序列)。在将这些点居中并将这些点归一化为零均值和单位标准偏差之后,每个质心都是该簇中点的分量均值。

'汉明'

不同位的百分比(仅适用于二进制数据)。每个质心是该集群中点的组件中位数。

因此,例如:

[idx,ctrs] = kmeans(X,2, 'Distance','cityblock');

至于自定义功能(即用户实现):AFAIK,如果不破解相关的 m 文件,这是不可能的。

于 2012-08-27T12:52:57.567 回答