Matlab 中 K 均值聚类的聚类指标的重新排序
Reorder of Clusters Indicies of K-Means Clustering in Matlab
我正在使用 K 均值聚类。
它有时会创建空组,但我仍然希望该组是有序的。
idx=kmeans(atranspose,m,'EmptyAction','drop');
ids=unique(idx)
>> ids
ids =
1
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
我不想让2和20少了,而是从1到48排序。可以吗?
获得唯一 ID 后,您可以将它们重新映射到新的 类。
更好的新方法
使用unique
获取新指标。
% Dummy idx data
idx = [1 1 2 2 4 4 5];
% Reindexing
[~,~,newidx] = unique( idx );
结果
>> idx
idx =
1 1 2 2 4 4 5
>> newidx'
ans =
1 1 2 2 3 3 4
使用非升序 idx
% Dummy idx data
idx = [1 1 2 2 4 4 5];
% Reindexing
[~,~,newidx] = unique( idx );
结果
>> idx
idx =
2 2 1 1 4 4 5
>> newidx'
ans =
2 2 1 1 3 3 4
稍长的旧方法
本质上M
是将其映射到新ID的映射。新映射使用 arrayfun
将 M
应用到 idx
并将其存储回 idx
.
% Dummy idx data
idx = [1 1 2 2 4 4 5];
% Get unique ids
ids = unique( idx );
% Create mapping
M = containers.Map( ids, 1:length(ids) );
% Apply mapping
newidx = arrayfun( @(x) M(x), idx );
结果:
>> idx
newidx
unique( newidx )
idx =
1 1 2 2 4 4 5
newidx =
1 1 2 2 3 3 4
ans =
1 2 3 4
如果 idx
是非升序的,您可以在使用 unique
运算符后简单地 sort
。假设您有以下 idx
。
idx = [2 2 1 1 4 4 5];
您可以 sort
使用:
ids = sort( unique( idx ) );
运行替换代码后,得到如下结果:
>>idx
newidx
unique( newidx )
idx =
2 2 1 1 4 4 5
newidx =
2 2 1 1 3 3 4
ans =
1 2 3 4
我正在使用 K 均值聚类。 它有时会创建空组,但我仍然希望该组是有序的。
idx=kmeans(atranspose,m,'EmptyAction','drop');
ids=unique(idx)
>> ids
ids =
1
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
我不想让2和20少了,而是从1到48排序。可以吗?
获得唯一 ID 后,您可以将它们重新映射到新的 类。
更好的新方法
使用unique
获取新指标。
% Dummy idx data
idx = [1 1 2 2 4 4 5];
% Reindexing
[~,~,newidx] = unique( idx );
结果
>> idx
idx =
1 1 2 2 4 4 5
>> newidx'
ans =
1 1 2 2 3 3 4
使用非升序 idx
% Dummy idx data
idx = [1 1 2 2 4 4 5];
% Reindexing
[~,~,newidx] = unique( idx );
结果
>> idx
idx =
2 2 1 1 4 4 5
>> newidx'
ans =
2 2 1 1 3 3 4
稍长的旧方法
本质上M
是将其映射到新ID的映射。新映射使用 arrayfun
将 M
应用到 idx
并将其存储回 idx
.
% Dummy idx data
idx = [1 1 2 2 4 4 5];
% Get unique ids
ids = unique( idx );
% Create mapping
M = containers.Map( ids, 1:length(ids) );
% Apply mapping
newidx = arrayfun( @(x) M(x), idx );
结果:
>> idx
newidx
unique( newidx )
idx =
1 1 2 2 4 4 5
newidx =
1 1 2 2 3 3 4
ans =
1 2 3 4
如果 idx
是非升序的,您可以在使用 unique
运算符后简单地 sort
。假设您有以下 idx
。
idx = [2 2 1 1 4 4 5];
您可以 sort
使用:
ids = sort( unique( idx ) );
运行替换代码后,得到如下结果:
>>idx
newidx
unique( newidx )
idx =
2 2 1 1 4 4 5
newidx =
2 2 1 1 3 3 4
ans =
1 2 3 4