好的,这听起来真的很令人困惑,但我会尽力让它足够清楚。我有一个完整的数据集,称为fulldata
这个数据集是494021x6
.
我像这样使用svds(奇异值分解):
%% dimensionality reduction
columns = 6
[U,S,V]=svds(fulldata,columns);
然后我从以下随机选择 1000 行fulldata
:
%% randomly select dataset
rows = 1000;
columns = 6;
%# pick random rows
indX = randperm( size(fulldata,1) );
indX = indX(1:rows)';
%# pick columns in a set order (2,4,5,3,6,1)
indY = indY(1:columns);
%# filter data
data = U(indX,indY);
然后我对这个随机选择的 1000 行应用规范化:
% apply normalization method to every cell
maxData = max(max(data));
minData = min(min(data));
data = ((data-minData)./(maxData));
然后我从原始fulldata
集合中输出一个与 1000 个选定行匹配的数据样本:
% output matching data
dataSample = fulldata(indX, :)
另请注意,当我选择“随机行”时,我还会输出与 fulldata 中的行匹配的 indX 行。
所以datasample
看起来像这样:
这是与原始完整数据匹配的 1000 个随机行。
indX
看起来像这样:
这是来自 的相应行号fulldata
。
我遇到的问题是当我使用 K-Means 对 1000 个随机行进行聚类并输出每个聚类的数据时,如下所示:
%% generate sample data
K = 6;
numObservarations = size(data, 1);
dimensions = 3;
%% cluster
opts = statset('MaxIter', 100, '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), 5, clustIDX, 'filled')
scatter3(clusters(:,1),clusters(:,2),clusters(:,3), 100, (1:K)', 'filled')
hold off, xlabel('x'), ylabel('y'), zlabel('z')
grid on
view([90 0]);
%% plot clusters quality
figure
[silh,h] = silhouette(data, clustIDX);
avrgScore = mean(silh);
% output the contents of each cluster
K1 = data(clustIDX==1,:)
K2 = data(clustIDX==2,:)
K3 = data(clustIDX==3,:)
K4 = data(clustIDX==4,:)
K5 = data(clustIDX==5,:)
K6 = data(clustIDX==6,:)
如何将 K1、k2...K6 与相应的 indX 行号匹配?例如 K1 的输出如下所示:
我希望有额外的文件,比如K1-indX
它只是一个相应行号的列表,indX
从中匹配来自 K1、K2 等的集群数据。或者可能将 indX 行号附加到第 7 列的 K1、K2 输出中(最好)
例如:
K1 cluster data | Belongs to fulldata row number
0.4 0.5 0.6 0.4 | 456456 etc