有没有办法在MATLAB k-means中传递自定义距离函数(例如jaccard距离) 实施?
jaccard距离函数
D = pdist(X,'jaccard');
答案 0 :(得分:2)
您需要做的是使用SVD将距离矩阵分解为特征空间,然后在由SVD分数表示的新特征空间上执行kmeans。参见Rob Tibshirani的统计学习要素。
或者你可以做一个与距离矩阵一起工作的k mediods - 在R中的as.dist()会将一个矩阵转换成一个dist对象,然后你可以在其上做K-mediods。
答案 1 :(得分:1)
我们从documentation了解到,我们可以将'distance'
选项传递给kmeans
:
'距离'
距离测量,在p维空间中。 kmeans最小化 尊重这个参数。 kmeans计算质心簇 不同的支持距离测量方法不同。
'sqEuclidean'
平方欧氏距离(默认)。每个质心都是平均值 该群集中的点。
'cityblock'
绝对差值之和,即L1距离。每个质心都是 该群集中各点的分量中位数。
'余弦'
一个减去点之间夹角的余弦(视为 矢量)。每个质心是该群集中点的平均值, 将这些点标准化为单位欧几里德长度后。
'相关性'
一个减去点之间的样本相关性(作为序列处理 价值观)。每个质心是分数的分量均值 在将这些点居中并归一化为零之后,该群集 平均值和单位标准差。
'汉明'
不同的位百分比(仅适用于二进制数据)。每 质心是该群集中点的分量中位数。
所以,例如:
[idx,ctrs] = kmeans(X,2, 'Distance','cityblock');
至于自定义功能(即用户实现):AFAIK,如果不破解相关的m文件,这是不可能的。