多 class 逻辑回归的 Octave 中向量(数据集)的向量化标签检测

Vectorizing labels detection of a vector (dataset) in Octave for multi class Logistic regression

m 的 类(我选择的数据集有 类 1、2、3、4 和 5)的多特征和多特征实现逻辑回归时 (>100) 类 介于 1 和 5 之间的样本数据。我试图找出编号。独特的 labels/classes 并将它们作为向量。我可以用 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

uniquesort 都在速度方面得到了很好的向量化。并且删除 classes 的重复扩展将防止重复的变量复制,如果你有大量的 类.

,那将带来显着的开销