[Octave中矢量(数据集)的矢量化标签检测,用于多类Logistic回归

问题描述 投票:0回答:1

同时执行具有多个功能和多个类别的Logistic回归(我选择的数据集具有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的唯一标签的列表。但是,我想知道是否有更好的方法来编写此代码(上面的代码行对我来说似乎是幼稚的),尤其是通过矢量化。欢迎任何建议。谢谢。

machine-learning vectorization octave logistic-regression multiclass-classification
1个回答
0
投票

看来,如果代码的目的只是为了生成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的重复扩展将防止重复的变量复制,如果您的类数量很多,则这将带来可观的开销。

© www.soinside.com 2019 - 2024. All rights reserved.