【发布时间】:2011-12-08 16:41:06
【问题描述】:
好的,我将介绍我试图实现的目标以及我是如何实现它的,然后我将解释我为什么尝试这种方法。
我有来自 1999 年 KDD 杯的原始格式数据,该数据有 494k 行和 42 列。
我的目标是尝试在无人监督的情况下对这些数据进行聚类。来自上一个问题:
我收到了这样的反馈:
对于初学者,您需要将属性标准化为相同 规模:计算欧几里得距离作为步骤 3 的一部分时 方法,以 239 和 486 等值的特征为主 超过其他小值为 0.05 的特征,从而破坏了 结果。
要记住的另一点是,太多的属性可能是不好的 事情(维度的诅咒)。因此,您应该研究功能 选择或降维技术。
所以我开始做的第一件事就是解决与本文相关的功能选择:http://narensportal.com/papers/datamining-classification-algorithm.aspx#_sec-2-1
选择必要的功能后看起来像这样:
因此,对于聚类,我删除了离散值,这让我留下了 3 列带有数字数据的列,然后我开始删除重复的行,请参阅:junk, index and unique on a matrix (how to keep matrix format) 在文件中将 3 列从 494k 减少到 67k,这已完成像这样:
[M,ind] = unique(data, 'rows', 'first');
[~,ind] = sort(ind);
M = M(ind,:);
然后我使用随机排列将文件大小从 67k 减少到 1000,如下所示:
m = 1000;
n = 3;
%# pick random rows
indX = randperm( size(M,1) );
indX = indX(1:m);
%# pick random columns
indY = randperm( size(M,2) );
indY = indY(1:n);
%# filter data
data = M(indX,indY)
所以现在我有一个文件,其中包含我选择的 3 个特征我已经删除了重复记录并使用随机排列来进一步减少数据集我的最后一个目标是规范化这些数据,我这样做了:
normalized_data = data/norm(data);
然后我使用了以下 K-means 脚本:
%% generate clusters
K = 4;
%% cluster
opts = statset('MaxIter', 500, 'Display', 'iter');
[clustIDX, clusters, interClustSum, Dist] = kmeans(data, K, 'options',opts, ...
'distance','sqEuclidean', 'EmptyAction','singleton', 'replicates',3);
%% plot data+clusters
figure, hold on
scatter3(data(:,1),data(:,2),data(:,3), 50, clustIDX, 'filled')
scatter3(clusters(:,1),clusters(:,2),clusters(:,3), 200, (1:K)', 'filled')
hold off, xlabel('x'), ylabel('y'), zlabel('z')
%% plot clusters quality
figure
[silh,h] = silhouette(data, clustIDX);
avrgScore = mean(silh);
%% Assign data to clusters
% calculate distance (squared) of all instances to each cluster centroid
D = zeros(numObservarations, K); % init distances
for k=1:K
%d = sum((x-y).^2).^0.5
D(:,k) = sum( ((data - repmat(clusters(k,:),numObservarations,1)).^2), 2);
end
% find for all instances the cluster closet to it
[minDists, clusterIndices] = min(D, [], 2);
% compare it with what you expect it to be
sum(clusterIndices == clustIDX)
但我的结果仍然像我在这里提出的原始问题一样出来:clustering and matlab
这是绘制时数据的样子:
和:
任何人都可以帮助解决这个问题,我使用的方法不正确还是我缺少什么?
【问题讨论】:
标签: matlab sorting random cluster-analysis normalization