MATLAB中的K均值算法-解释聚类标签分配步骤
我有一个课堂上的Matlab代码,教授使用该代码将每个数据点分配到最近的聚类,其中c是质心矩阵,x是数据矩阵MATLAB中的K均值算法-解释聚类标签分配步骤,matlab,k-means,Matlab,K Means,我有一个课堂上的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 negate
% 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
如果我们有一个三角形,其边的长度是a,b,c,那么 我们(从报纸上)知道这一点 其中,
alpha
是尺寸为b
的一侧与尺寸为c
的一侧之间的角度
现在,考虑由三个顶点组成的三角形<代码> x <代码>,<代码> Cyj> <代码>和<代码> o>代码>(代码的起源> r^ n < /代码>)。写
theta
x和c
之间的角度,我们有
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.如果我可以推荐的话,可以使用类似的方法将你的方程渲染成实际的图像。这将大大提高你的答案质量。谢谢你的建议,我会尽快完成。我真希望我们可以在stackoverflow上使用Latex,就像在math甚至robotics stackexchange网站上一样……我同意。很烦人。是否支持LaTeX on Stack Overflow一直是一个争论的话题,但由于开销太大,它们不会支持LaTeX on Stack Overflow。。。没有意义,因为许多其他SE网站都支持它(数学、信号处理、电子工程、物理等)。我不会使用QuickLatex或类似的东西。如果有一天他们倒下了,答案是无用的。真正应该做的是让他们重新考虑关于StackOverflow的MathJaX。这很有意义!非常感谢。
argmin_j(||c_j||^2 - 2 x^t c_j)