cpp*_*ner 5 matlab cluster-analysis machine-learning k-means
作为K-means聚类算法的一部分,我编写了一个函数来将训练样例分配给它们最近的质心.在我看来,尺寸是满意的,代码有时运行正确.但经常,我得到错误
在赋值A(:) = B中,A和B中的元素数必须相同.
为线
idx(i) = find(dist == value);
Run Code Online (Sandbox Code Playgroud)
这是代码
function idx = findClosestCentroids(X, centroids)
K = size(centroids, 1);
idx = zeros(size(X,1), 1);
dist = zeros(K, 1);
for i = 1:size(X,1)
for j = 1:K
dist(j) = sum((X(i,:) - centroids(j,:)).^2);
end
value = min(dist);
idx(i) = find(dist == value);
end
Run Code Online (Sandbox Code Playgroud)
这里有什么问题?
这是因为您可能会发现多个与查询点距离相同的簇。 find确定满足布尔条件作为参数的 所有值。idx(i)意味着您正在为数组的位置分配一个值,idx但find可能会产生多个值,这会导致您看到的分配错误。
相反,使用第二个输出参数,min它确定最小值第一次出现的索引,这正是您想要实现的目标:
function idx = findClosestCentroids(X, centroids)
K = size(centroids, 1);
idx = zeros(size(X,1), 1);
dist = zeros(K, 1);
for i = 1:size(X,1)
for j = 1:K
dist(j) = sum((X(i,:) - centroids(j,:)).^2);
end
[~,idx(i)] = min(dist); %// Change
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |