在实现具有多个特征和多类(我选择的数据集具有1、2、3、4和5类(的逻辑回归时,m(>100(样本数据的类在1和5之间。我试图找出唯一标签/类的数量,并将它们作为向量。我可以用Y作为大小为(m,1(的列向量来写下面的代码
classes = [Y(1,1)]; #Initializing classes
for i = 2:m
count = 0;
for j = 1:length(classes)
if Y(i,1) == classes(j,1)
count = count + 1;
end;
end
if count ==0
classes = [classes; Y(i,1)];
end
end
这给了我向量Y中唯一标签的列表。然而,我想知道是否有更好的方法来编写这段代码(上面的代码行对我来说似乎很幼稚(,尤其是矢量化。欢迎提出任何建议。谢谢
如果代码的目的只是生成Y中唯一值的列表,则可以使用unique(Y)
。例如:
>> m = 10;
>> Y = floor(rand(m,1)*5+1)
Y =
5
1
5
4
2
2
1
5
1
4
>> unique(Y)
ans =
1
2
4
5
现在,函数的输出按照它们第一次出现在列表中的顺序排列。例如
classes =
5
1
4
2
如果这很重要,你需要这样的东西:
>> [sortedClasses idx] = unique(Y,"first")
sortedClasses =
1
2
4
5
idx =
2
5
4
1
>> unsortedClasess = Y(sort(idx))
unsortedClasess =
5
1
4
2
CCD_ 2和CCD_。删除classes
的重复扩展将防止重复的变量复制,如果您有大量的类,这将带来显著的开销。