如何可视化二进制数据?

Jus*_*ous -3 binary matlab cluster-analysis machine-learning k-means

我有一个6x1000的二进制数据数据集(6个数据点,1000个布尔维度).

我对它进行聚类分析

[idx, ctrs] = kmeans(x, 3, 'distance', 'hamming');
Run Code Online (Sandbox Code Playgroud)

我得到了三个集群.我如何可视化我的结果?

我有6行数据,每行有1000个属性; 其中3个在某种程度上应该相似或类似.应用聚类将显示聚类.由于我知道集群的数量,我只需要找到类似的行.汉明距离告诉我们行之间的相似性,结果是正确的,有3个集群.

[编辑:对于任何合理的数据,kmeans将总是找到所询问的簇数]

我想把这些知识带到易于观察和理解,而不必写出大量的解释.

Matlab的例子不合适,因为它涉及数字2D数据,而我的问题涉及n维分类数据.

数据集在这里http://pastebin.com/cEWJfrAR

[编辑1:如何检查集群是否重要?]

欲了解更多信息,请访问以下链接:http: //chat.stackoverflow.com/rooms/32090/discussion-between-oleg-komarov-and-justcurious

如果问题不明确,请询问您遗失的任何事情.

Isa*_*aac 6

为了表示高维向量或簇之间的差异,我使用了Matlab的dendrogram函数.例如,在将数据集加载到矩阵后,x我运行了以下代码:

l = linkage(a, 'average');
dendrogram(l);
Run Code Online (Sandbox Code Playgroud)

得到以下情节:

数据集的树形图

连接两组节点的条的高度表示这两组成员之间的平均距离.在这种情况下,它看起来像(5和6),(1和2),和(3和4)是聚类的.

如果您更愿意使用汉明距离而不是欧几里德距离(linkage默认情况下),那么您可以这样做

l = linkage(x, 'average', {'hamming'});
Run Code Online (Sandbox Code Playgroud)

虽然它对情节没什么影响.


Ole*_*leg 5

您可以首先使用"条形码"图可视化数据,然后使用它们所属的群集组标记行:

% Create figure
figure('pos',[100,300,640,150])

% Calculate patch xy coordinates
[r,c] = find(A);
Y = bsxfun(@minus,r,[.5,-.5,-.5, .5])';
X = bsxfun(@minus,c,[.5, .5,-.5,-.5])';

% plot patch
patch(X,Y,ones(size(X)),'EdgeColor','none','FaceColor','k');

% Set axis prop
set(gca,'pos',[0.05,0.05,.9,.9],'ylim',[0.5 6.5],'xlim',[0.5 1000.5],'xtick',[],'ytick',1:6,'ydir','reverse')

% Cluster
c = kmeans(A,3,'distance','hamming');

% Add lateral labeling of the clusters
nc   = numel(c);
h    = text(repmat(1010,nc,1),1:nc,reshape(sprintf('%3d',c),3,numel(c))');
cmap = hsv(max(c));
set(h,{'Background'},num2cell(cmap(c,:),2))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述