Определение векторизованных меток вектора (набора данных) в Octave для мультиклассовой регрессии Logisti c - PullRequest
1 голос
/ 30 марта 2020

При реализации регрессии Logisti c с несколькими функциями и с несколькими классами (выбранный мной набор данных имеет классы 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. Однако мне было интересно, есть ли что-нибудь лучше способ написания этого кода (приведенные выше строки кода кажутся мне childi sh), особенно с помощью векторизации. Любые предложения приветствуются. Спасибо.

1 Ответ

1 голос
/ 03 апреля 2020

Похоже, что если целью кода является просто создание списка уникальных значений в 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

и unique, и sort довольно хорошо векторизованы для скорости. А удаление повторного расширения classes предотвратит повторное копирование переменных, что приведет к значительным накладным расходам, если у вас будет очень большое количество классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...