【问题标题】:Passing Custom Distance Functions in K-Means在 K-Means 中传递自定义距离函数
【发布时间】:2012-08-21 22:38:30
【问题描述】:

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

杰卡德距离函数

D = pdist(X,'jaccard');

【问题讨论】:

标签: matlab k-means


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    '距离'

    距离度量,在 p 维空间中。 kmeans 最小化 关于这个参数。 kmeans 计算质心簇 不同支持的距离测量值不同。

    'sq欧几里得'

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

    '城市街区'

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

    '余弦'

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

    '相关性'

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

    '汉明'

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

    所以,例如:

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

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

    【讨论】:

      猜你喜欢
      • 2016-04-04
      • 2013-04-22
      • 2017-09-16
      • 2011-10-18
      • 2012-04-09
      • 2011-07-28
      • 2013-09-12
      相关资源
      最近更新 更多