所以我实现了一些聚类算法,我应该创建一个算法来规范化数据并比较具有和不具有规范化的聚类。
我实现的非常简单,只是Min-Max规范化(我正在使用Matlab btw):
function [dataNorm] = nMinMax(data)
[x, y] = size(data);
dataNorm = zeros(x, y);
for j = 1:y
m = min(data(:,j));
M = max(data(:,j));
for i = 1:x
n = (data(i,j) - m)/(M-m);
dataNorm(i,j) = n;
end
end
end
这就是我从没有标准化的聚类中得到的结果:
现在它变得奇怪了,在规范化之后,这就是我得到的:
群集是相同的,当我认为它应该改善了结果......
所以我的问题是,我的算法存在问题,还是我错误地解释了结果?如果我是,那么在规范化之后群集应该是什么样的?
答案 0 :(得分:0)
您的第二个情节不正确。
您正在绘制规范化群集中心,但非规范化数据集。在归一化之后,您的数据应该在[0:1]范围内,但是它很棒 - 但是您的群集意味着。注意到它们在0:1的盒子里?
难怪他们不匹配。绘制标准化数据集,或对集群中心应用反向标准化以获得非标准化位置。
但是,您的原始数据集“几乎为方形”。 X轴和Y轴的值范围大约为-6到+6;并且X和Y的差异明显小于簇分离。因此,如果您没有看到规范化对此数据集有任何影响,那就不足为奇了。尝试更难的数据集,其中轴的比例大致不同,簇具有不同的大小(对象的数量),扩展(即空间大小)和形状,并且簇不太清楚地分开。