NumPy эквивалент функции Keras utils.to_categorical

У меня есть скрипт Python, который использует Keras для машинного обучения. Я создаю X и Y, которые являются характеристиками и метками соответственно.

Этикетки построены так:

def main=():

   depth = 10
   nclass = 101
   skip = True
   output = "True"
   videos = 'sensor'
   img_rows, img_cols, frames = 8, 8, depth
   channel = 1 
   fname_npz = 'dataset_{}_{}_{}.npz'.format(
    nclass, depth, skip)

   vid3d = videoto3d.Videoto3D(img_rows, img_cols, frames)
   nb_classes = nclass

   x, y = loaddata(videos, vid3d, nclass,
                    output, skip)

   X = x.reshape((x.shape[0], img_rows, img_cols, frames, channel))
   Y = np_utils.to_categorical(y, nb_classes) # This needs to be changed

Используемая функция "to_categorical" в Keras объясняется следующим образом:

to_categorical

keras.utils.to_categorical(y, num_classes=None)

Converts a class vector (integers) to binary class matrix.

Теперь я использую NumPy. Не могли бы вы сообщить мне, как собрать одну и ту же строку кода, чтобы она работала? Другими словами, я ищу эквивалент функции to_categorical в NumPy.

to_categorical написан на чистом NumPy. Вы можете просто скопировать из него исходный код.
Yu-Yang 06.04.2018 07:09

Почему бы вам просто не пойти дальше и не использовать код из github.com/keras-team/keras/blob/master/keras/utils/np_utils‌ .py, ссылаясь на его источник?

wleao 11.05.2019 22:36
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
6
2
8 013
3

Ответы 3

Что-то вроде этого (я не думаю, что есть встроенный):

>>> import numpy as np
>>> 
>>> n_cls, n_smp = 3, 10
>>> 
>>> y = np.random.randint(0, n_cls, (n_smp,))
>>> y
array([0, 1, 1, 1, 2, 2, 1, 2, 1, 1])
>>> 
>>> res = np.zeros((y.size, n_cls), dtype=int)
>>> res[np.arange(y.size), y] = 1
>>> res
array([[1, 0, 0],
       [0, 1, 0],
       [0, 1, 0],
       [0, 1, 0],
       [0, 0, 1],
       [0, 0, 1],
       [0, 1, 0],
       [0, 0, 1],
       [0, 1, 0],
       [0, 1, 0]])

На самом деле в моем коде «y» - это фактические данные, а «nbclasses» - это метки, поэтому я назначаю метки данным, которые представляют собой набор файлов * .csv. Это до обучения классификатора. Вы знаете, как это сделать?

Danny 06.04.2018 05:07

@ Дэнни, я не уверен, что понимаю на 100%. Вы хотите добавить столбцы к своим данным? По одному на каждую категорию?

Paul Panzer 06.04.2018 05:21

У меня есть готовые данные, и затем мне нужно создать X и Y. X - это функции, а Y - метки этих функций. Я создал X следующим образом: X = x.reshape((x.shape[0], img_rows, img_cols, frames, channel)) Теперь мне нужно создать Y - метки функций.

Danny 06.04.2018 05:27

@Danny Я думаю, было бы проще, если бы вы могли обновить свой вопрос небольшим, но полным примером того, что у вас есть сейчас и что вы хотите получить.

Paul Panzer 06.04.2018 05:36

Сделанный. Я только что обновил его, думаю, sklearn также можно использовать с NumPy.

Danny 06.04.2018 05:40

@ Дэнни, я ценю усилия, но я не это имел в виду. Я имел в виду пример (например, '[4, 0, 1, 0]') того, как может выглядеть y и как должен выглядеть Y. Во всяком случае, я проверил, то, что я написал, работает более или менее так же, как to_categorical; единственная разница в том, что to_categorical возвращает числа с плавающей запятой. Чтобы получить такое же поведение, просто оставьте dtype=int в res = np.zeros((y.size, n_cls), dtype=int).

Paul Panzer 06.04.2018 07:21

Попробуйте использовать get_dummies.

>>> pd.core.reshape.get_dummies(df)
Out[30]: 
   cat_a  cat_b  cat_c
0      1      0      0
1      1      0      0
2      1      0      0
3      0      1      0
4      0      1      0
5      0      0      1

Мне это кажется заменой одной библиотеки без numpy на другую без numpy.

Paul Panzer 06.04.2018 09:10

Вот один простой способ сделать это:

np.eye(nb_classes)[y]

Другие вопросы по теме