Numpy geta маска ложных срабатываний из заданных двух векторов y_true и y_pred

Учитывая три класса (5,6,7) двух массивов:

y_true = np.array([5,6,7,5])
y_pred = np.array([5,7,7,5])

Поскольку второй элемент имеет значение false, как вернуть массив с горячим кодированием ложноположительного массива, подобный этому?

y_falsep_class5: [0,0,0,0]
y_falsep_class6: [0,0,0,0]
y_falsep_class7: [0,1,0,0]

Таким образом, возвращаемый массив будет иметь размерность (3,4), где 3 — это количество классов, а 4 — длина вектора.

Сколько занятий у вас будет? Если у вас 100 классов, вы не хотите создавать 100 y_falsep_classN переменных.

jared 13.07.2024 19:05

@jared Всего три класса, их имена 5,6,7. Нет, я не имею в виду определение y_falsep_classN, он должен возвращать двоичный массив с размером (num of classes, vector length)

Muhammad Ikhwan Perwira 13.07.2024 19:06

Я вижу списки Python, а не массивы

hpaulj 13.07.2024 19:47

@hpaulj извини, отредактировано

Muhammad Ikhwan Perwira 13.07.2024 19:48
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
65
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Использование IMPLY Gate

import numpy as np

num_classes = 3
min_class = 5

y_true = np.array([5,6,7,5]) - min_class
y_pred = np.array([5,7,7,5]) - min_class

# Convert to one-hot encoding
y_true = np.identity(num_classes)[y_true].T
y_pred = np.identity(num_classes)[y_pred].T

display(y_true)
display(y_pred)
display(imply(y_true,y_pred).astype(float))

Где:

def imply(a,b):
  return np.logical_and(np.logical_not(a),b)

Возвращение:

array([[1., 0., 0., 1.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.]])
array([[1., 0., 0., 1.],
       [0., 0., 0., 0.],
       [0., 1., 1., 0.]])
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 1., 0., 0.]])
Ответ принят как подходящий

IIUC, используйте np.unique, чтобы получить классы, а затем простую трансляцию, чтобы определить значения y_pred, которые отличаются от y_true:

# identify unique classes (sorted)
u = np.unique(y_true)[:, None]
# array([[5],
#        [6],
#        [7]])

# set as True/1 the y_pred values that match the class
# and are different from y_true
out = ((u == y_pred) & (u != y_true)).astype(int)

Выход:

array([[0, 0, 0, 0],  # 5
       [0, 0, 0, 0],  # 6
       [0, 1, 0, 0]]) # 7

Примечание: если вы хотите, чтобы на выходе был словарь: d = dict(zip(u[:, 0], out)) -> {5: array([0, 0, 0, 0]), 6: array([0, 0, 0, 0]), 7: array([0, 1, 0, 0])}

mozway 13.07.2024 22:17

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