【问题标题】:K Means Algorithm in MATLAB - Explain the Cluster Label Assignment StepMATLAB 中的 K 均值算法 - 解释聚类标签分配步骤
【发布时间】:2017-07-20 14:57:56
【问题描述】:

我的课堂上有一个 Matlab 代码,教授使用此代码将每个数据点分配给最近的集群,其中 c 是质心矩阵,x 是数据矩阵。

  % norm squared of the centroids; 
  c2 = sum(c.^2, 1);  

  % For each data point x, computer min_j  -2 * x' * c_j + c_j^2;
  % Note that here is implemented as max, so the difference is negated.
  tmpdiff = bsxfun(@minus, 2*x'*c, c2); 
  [val, labels] = max(tmpdiff, [], 2); 

我不确定这如何等同于通过集群分配完成的这一步的算法定义

% For every centroid j and for every data point x_i
labels(i) = `argmin||x_i - c_j||^2`

谁能给我解释一下这是如何工作的,主要是如何计算

min_j  -2 * x' * c_j + c_j^2 

等价于

 argmin||x_i - c_j||^2

【问题讨论】:

    标签: matlab k-means


    【解决方案1】:

    如果我们有一个三角形,它的边长是a, b, c,那么 我们知道(来自law of cosines

    a^2=c^2+b^2-2bc*cos(alpha)
    

    其中alpha 是大小为b 的边与大小为c 的边之间的角度。

    现在,考虑由xc_jO 三个顶点组成的三角形(R^n 的原点)。写thetaxc之间的角度,我们有

     argmin_j||x-c_j||^2
     =argmin_j (||x||^2+||c_j||^2 - 2*||x||* ||c_j|| * cos(theta)  )
    

    等于

     argmin_j(||x||^2 + ||c||^2 - 2x^t c_j)
    

    现在,请记住 x 在这个最小化过程中是常数,所以最后一个等式正好等于

    argmin_j(||c_j||^2 - 2 x^t c_j)
    

    这是您在代码中最小化的方程式。

    【讨论】:

    • 非常好。这是对的。 +1。如果我可以推荐一些东西,请使用 quicklatex.com 之类的东西将您的方程式渲染成实际图像。它将进一步提高您的回答质量。
    • 感谢您的建议,我会尽快处理。我真的希望我们可以在 stackoverflow 上使用 Latex,就像在数学甚至机器人 stackexchange 网站上一样......
    • 我同意。很烦人。是否在 Stack Overflow 上支持 LaTeX 一直存在争议,但由于开销太大,它们不会……没有意义,因为各种其他 SE 网站都支持它(数学、信号处理、电气工程、物理等)。
    • 我不会使用 QuickLatex 或类似的东西。如果有一天他们倒下了,答案是没有用的。真正应该做的是让他们重新考虑 StackOverflow 上的 MathJaX。
    • 很有道理!谢谢!!
    猜你喜欢
    • 2023-03-29
    • 2011-10-15
    • 2014-09-16
    • 2017-12-30
    • 2014-04-25
    • 2017-02-15
    • 2019-12-05
    • 2018-05-04
    • 2019-11-25
    相关资源
    最近更新 更多