Введение
Функция Argmax широко используется при построении алгоритмов машинного обучения: она часто служит окончательным правилом прогнозирования в алгоритмах классификации. В этой статье мы начнем с обоснования необходимости функции argmax. Затем мы опишем работу встроенной функции argmax в Numpy (Python Argmax). Будет описана работа функции numpy с одномерными и двумерными массивами вместе с примерами кода.
Читайте также: Что такое Argmax в машинном обучении?
питон Аргмакс
Аргмакс означает Аргумент максимума. Это математическая функция, которая принимает на вход функцию е(х) и возвращает точки из домена (аргумента) ф где функция максимальна. В Python функция argmax обычно работает с массивами, которые потенциально могут быть многомерными. Общая идея заключается в том, что позиция максимального элемента возвращается функциями Argmax в Python.
пустой Argmax
Python изначально не поддерживает операцию argmax. Библиотека Numpy, с другой стороны, имеет np.argmax() функция, которую можно использовать для извлечения индексов максимальных элементов массивов Numpy. Рассмотрим одномерный массив numpy, как показано ниже.
В этом иллюстративном примере элементы массива обозначают значения вероятности, выдаваемые классификатором. Индексы массива numpy также показаны ниже. Максимальный элемент равен 0,613 и имеет индекс 2. Таким образом, функция argmax возвращает значение 2, индекс максимального элемента в массиве.
Функция argmax Numpy также применяется к многомерным массивам. Мы проиллюстрируем работу с двумерным массивом, как показано ниже.
Двумерные массивы имеют две оси для операций argmax: строки и столбцы. По соглашению строки принадлежат оси 0, а столбцы принадлежат оси 1. Каждая запись двумерного массива на рисунке является значением вероятности и может представлять результат трех классификаторов (строк), которые решают задачу классификации 5 классов ( столбцы). Таким образом, сумма строк равна 1, поскольку каждый классификатор выводит 5 значений вероятности. Максимальный элемент в строках подчеркнут, а максимальный элемент в столбцах выделен курсивом. Обратите внимание, что одно и то же значение может представлять максимальные значения как для строк, так и для столбцов. Например, значение 0,553 является максимальным элементом как для его строки, так и для его столбца. В результате значение будет подчеркнуто и выделено курсивом.
Параметр оси функции np.argmax можно использовать для указания оси вдоль которого будет выполняться операция argmax. Далее мы опишем поведение параметра оси, начиная с варианта столбца, так как он более интуитивно понятен.
Читайте также: Что такое разреженная матрица? Как это используется в машинном обучении?
Случай 1: параметр оси = 1 (столбцы)
Функция просканирует столбцы и вернет индексы максимальных значений для каждой строки. Таким образом, возвращается значение для каждой строки. На рисунке выше мы ищем подчеркнутые записи, что приводит к выводу (2, 0, 4).
В вышеупомянутой интерпретации этих значений массив индексов можно интерпретировать как: «для каждой модели вернуть класс с наибольшей вероятностью (прогнозом)». В стратегии ансамбля его можно использовать для голосования среди нескольких моделей и прогнозирования класса, который является наиболее частым высшим классом среди моделей.
Случай 2: Параметр оси = 0 (строки)
В этом случае функция просканирует строки и вернет индекс максимального значения для каждого столбца. Поэтому для каждого столбца будет возвращен один индекс, номер строки. На рисунке выше мы ищем записи, выделенные курсивом, что приводит к выводу (1, 2, 0, 2, 2).
В приведенном выше примере массив индексов можно интерпретировать как: «для каждого из 5 классов вернуть модель, дающую классу наибольшую вероятность». Его можно использовать для поиска погрешностей в нескольких моделях и другого подробного анализа результатов.
Если параметр оси не указан, то поведение по умолчанию состоит в том, чтобы сгладить входной тензор и вернуть argmax сглаженного массива. В нашем примере сглаженный массив равен (0,115, 0,337, 0,613, 0,021, 0,014, 0,553, 0,138, 0,215, 0,002, 0,092, 0,02, 0,388, 0,002, 0,113, 0,477), а его argmax равен 2, индекс максимума элемент 0,613.
Наконец, функция np.argmax также позволяет напрямую вставлять выходные данные в выходной массив с помощью параметра out.
Чем полезен Аргмакс
Рассмотрим типичную задачу классификации с несколькими классами, когда перед моделью машинного обучения стоит задача выбрать один из трех классов C1, C2 и C3 для заданных входных данных, как показано на рисунке ниже. Это обычная ситуация, так как многие архитектуры используют слой softmax на последнем уровне для вычисления значений, подобных вероятностным. Этот массив чисел с плавающей запятой представляет собой уверенность модели в каждом из классов и может использоваться в качестве вероятности для классов. На рисунке ниже будет создан одномерный массив из 3 вероятностей.
Правило принятия решения состоит в том, чтобы затем назначить класс, соответствующий наибольшей вероятности. Функция Argmax используется для программного выбора метки класса на основе значений вероятности. В нашем случае, скажем, метки классов расположены в массиве («C1», «C2», «C3»). Argmax вероятностей можно использовать для прямого индексирования этого массива и возврата метки класса.
Эксперимент с numpy Argmax
Ниже мы приводим небольшой пример с тем же двумерным входным массивом, что и выше. Мы начинаем с инициализации этого массива и вычисления argmax по столбцам, а затем по строкам. Затем мы сглаживаем двумерный массив, чтобы получить одномерное представление. Показано, что argmax версии 1D совпадает с argmax в исходной матрице, когда не задан параметр оси.
import numpy as np
X = np.array(((0.115, 0.337, 0.613, 0.021, 0.014), # A 2-D input array
(0.553, 0.138, 0.215, 0.002, 0.092),
(0.020, 0.388, 0.002, 0.113, 0.477)))
print(np.argmax(X, axis = 1)) # Column-wise
# Output
(2 0 4)
print(np.argmax(X, axis = 0)) # Row-wise
# Output
(1 2 0 2 2)
print(X.flatten()) # Flatten to get a 1D array
# Output
(0.115 0.337 0.613 0.021 0.014 0.553 0.138 0.215 0.002 0.092 0.02 0.388
0.002 0.113 0.477)
print(np.argmax(X.flatten())) # argmax of the flattened 1-D array
# Output
2
print(np.argmax(X)) # When no axis param is specified, argmax is on the flattened array
# Output
2
Читайте также: Rectified Linear Unit (ReLU): введение и использование в машинном обучении
Заключение
Мы рассмотрели функцию argmax, ее важность для машинного обучения и встроенную функцию argmax в Numpy в Python. Функция возвращает положение максимального элемента в массиве и может использоваться по разным осям многомерного массива. Функция argmax чаще всего используется для индексации массива меток классов, чтобы предсказать класс на основе вероятностей, вычисленных моделью машинного обучения.
Ссылка
Numpy.Argmax — Руководство по NumPy v1.24. https://numpy.org/doc/stable/reference/generated/numpy.argmax.html. По состоянию на 3 февраля 2023 г.
«Numpy.Argmax в Python». GeeksforGeeks22 августа 2017 г., https://www.geeksforgeeks.org/numpy-argmax-python/. По состоянию на 6 февраля 2023 г.
Эбнер, Джошуа. «Numpy Argmax, объяснение». Sharp Sight, Inc.9 ноября 2020 г., https://www.sharpsightlabs.com/blog/numpy-argmax/. По состоянию на 6 февраля 2023 г.