Введение
Как следует из названия, разреженная матрица — это матрица, элементы которой имеют меньше ненулевых значений. Разреженные матрицы встречаются в процессе машинного обучения и его применения. Их очень часто можно встретить в данных, подготовке данных и подобластях машинного обучения. Работа с такими матрицами, как если бы они были плотными, приводит к напрасной трате ресурсов с точки зрения сложности времени и пространства.
В этой статье рассказывается о том, что такое разреженная матрица, и объясняется их отличие от плотной матрицы. Вы узнаете, где встречаются разреженные матрицы, их преимущества и недостатки. Мы поговорим о том, что такое разреженность и временная, пространственная сложность работы с этими матрицами. Мы также рассмотрим реализации на Python нескольких различных форматов, используемых при работе с разреженной матрицей.
Разреженная матрица
Матрица, состоящая в основном из ненулевых значений, является разреженной матрицей, другими словами, это матрица, в которой большинство элементов равны нулю. Ниже приведен пример такой матрицы.
Плотная матрица
В отличие от приведенной выше матрицы, плотная матрица состоит в основном из ненулевых элементов. Ниже приведен пример того же самого.
Разреженность
При работе с разреженной матрицей следует говорить о разреженности этой матрицы.
Разреженность = (количество нулевых элементов) / (размер матрицы)
Мы рассмотрим команды Python, чтобы вычислить это в последующих частях руководства.
Проблемы с высокой разреженностью
Космическая сложность
В практических сценариях каждая большая матрица в основном состоит из нулей. Если мы представим эти матрицы так, как будто они плотные, хотя ненулевых элементов очень мало, это потребует много памяти и, следовательно, приведет к потере ресурсов.
Примером большой матрицы является ситуация, когда мы пытаемся представить в матрице покупки людей из огромного каталога продуктов, такого как Amazon. Такая матрица потребовала бы гораздо больше места, если бы мы представили ее как плотную матрицу.
Временная сложность
Предположим, что у нас есть большая разреженная матрица, и мы пытаемся выполнить с ней некоторые вычисления, например умножение матриц. Основная часть операций будет представлять собой просто сложение/умножение нулей.
В цикле выполнения самых базовых алгоритмов преобладает работа с нулями. Это снова приведет к пустой трате ресурсов и времени.
Читайте также: Как использовать Pandas Melt – pd.melt() для искусственного интеллекта и машинного обучения.
Разреженные матрицы в машинном обучении
Разреженные матрицы встречаются в ряде сценариев машинного обучения.
Данные
Вы можете столкнуться с разреженной матрицей в данных разного размера. Примерами разреженной матрицы могут быть:
- Содержит ли статья слова из полного словаря.
- Просматривал ли пользователь товары на Amazon.
- Смотрел ли пользователь фильм из каталога фильмов Netflix.
Подготовка данных
Для подготовки данных используются различные системы кодирования. Вот некоторые из них, в которых мы видим высокую разреженность:
- Кодирование TF-IDF (документ с инверсией частоты термина)
- Пример: представление показателей частоты слов в словаре.
- Кодирование подсчета
- Пример: Представление частоты полетов на самолете в течение года.
- Горячее кодирование
- Пример: Преобразование категориальных данных в разреженные двоичные векторы.
Области обучения
В тех случаях, когда входных данных почти всегда мало, нам необходимо создавать специализированные модели для их обработки.
Вот несколько примеров таких областей:
- С использованием компьютерное зрение для работы с фотографиями, имеющими много черных пикселей.
- Обработка естественного языка при работе с текстовыми документами.
- Здание рекомендательная система в сценариях, где общее количество элементов имеет большое количество, но типичный пользователь использует только подмножество этих элементов.
Работа с разреженной матрицей
Чтобы эффективно работать с разреженной матрицей, нам нужно использовать альтернативные структуры данных для представления ненулевых значений.
Форматы разреженных матриц можно эффективно разделить на 3 основные категории. Давайте пройдемся по ним по одному.
Творческий формат
Словарь ключей (DOK)
В этом формате координаты ненулевых элементов используются в качестве ключей карты, а ненулевой элемент — в качестве значения этого ключа.
Доступ к элементу можно свести к O(1), используя хэш-карту в качестве базовой структуры данных. Недостатком здесь является то, что он медленный для арифметических операций, когда необходимо перебирать элементы.
Формат координат (COO)
В формате координат ненулевые элементы хранятся в виде триплетов. Кортежи индекса строки, индекса столбца и значения данных хранятся в трех срезах. Разрешение использования элемент (строка(i), столбец(i)) = значение(я).
Добавление ненулевых элементов в конец данных происходит быстро. Проблема возникает при случайном чтении, и в этом случае для получения значения элемента требуется время O(n). Сортировка значений в ответе COO может улучшить общее время доступа, но все равно это будет не так эффективно.
Операционные форматы
Формат сжатых разреженных строк (CSR)
Этот формат аналогичен приведенному выше формату COO, за исключением того, что срез индекса строки сжимается.
Срез индекса строки хранит совокупное количество ненулевых элементов в каждой строке, так что строка(я) содержит индекс в обоих столбец() и данные() первого ненулевого элемента строки (я).
Требования к памяти уменьшаются, а произвольный доступ становится быстрее. Обновление нулевых элементов происходит относительно медленно, поскольку в срезы придется выполнять вставки.
Формат сжатых разреженных столбцов (CSC)
Это идентично CSR, за исключением того, что сжимается срез индекса столбца, а не срез индекса строки, как в CSR. В формате CSC значения хранятся в порядке основных столбцов и могут рассматриваться как естественная транспозиция CSR.
Специализированные форматы
Диагональный формат (DIA)
Диагональный формат используется специально для симметричных диагональных матриц. Квадратная матрица имеет одинаковое количество строк и столбцов. Симметричная диагональная матрица — это квадратная матрица с ненулевыми элементами только вдоль ее сверху слева вниз справа диагональ. Диагональный формат хранит только диагональные элементы матрицы.
Разреженные матрицы в Python
SciPy, сокращение от Scientific Python, представляет собой библиотеку Python с открытым исходным кодом. Он предоставляет возможность визуализировать данные и манипулировать ими.
Начните с объявления массива NumPy. На данный момент мы можем назвать это исходной матрицей, поскольку видим, что это разреженная матрица.
Мы можем выполнять такие операции, как вычисление разреженности матрицы. Используя SciPy, не существует метода прямого расчета этого значения, но обычно люди это делают. 1 – (количество_не_нулевых_элементов / размер_матрицы).
SciPy написан поверх NumPy и предлагает полнофункциональную версию линейной алгебры, которой нет в NumPy. Давайте проверим пару форматов разреженных матриц в Python.
С использованием csr_matrix команда для создания формата CSR для матрицы. to_dense() Команда помогает преобразовать формат обратно в исходную матрицу.
С использованием csc_matrix команда для генерации формата CSC для матрицы.
Расширения
Вы можете более подробно изучить эту тему:
Проверка официальная документация на СкиПи.
Изучение реализации других форматов запасных матриц в питон.
Читайте также: Что такое встраивание слов?
Заключение
Это руководство поможет вам изучить разреженные матрицы в Python и способы работы с ними с помощью пакета SciPy.
Что мы узнали:
Вы узнаете, где встречаются разреженные матрицы, их преимущества и недостатки. Мы поговорим о том, что такое разреженность и временная, пространственная сложность работы с ней. Мы также рассмотрим реализации Python для работы с разреженной матрицей.
- Разница между разреженной и плотной матрицей в матричной структуре данных.
- Проблемы, с которыми приходится сталкиваться при работе с этими матрицами.
- Различные области, где можно встретить разреженную матрицу.
- Способы форматирования разреженных данных и эффективной работы с ними
Рекомендации
Браунли, Джейсон. «Нежное введение в разреженные матрицы для машинного обучения». MachineLearningMastery.Com13 марта 2018 г., https://machinelearningmastery.com/sparse-matrices-for-machine-learning/. По состоянию на 22 февраля 2023 г.
Участники проектов Викимедиа. «Разреженная матрица». Википедия11 февраля 2023 г., https://en.wikipedia.org/wiki/Sparse_matrix. По состоянию на 22 февраля 2023 г.
Разреженные данные SciPy. https://www.w3schools.com/python/scipy/scipy_sparse_data.php. По состоянию на 22 февраля 2023 г.