Для матрицы, если значение нуль содержит гораздо больше элементов, чем не- нуль количество элементов, не нуль Когда распределение элементов неравномерное , такая матрица называется разреженной матрицей, если же не нуль Когда количество элементов подавляющее , такая матрица называется плотной матрицей.
Разреженные матрицы часто используются в инженерных приложениях, особенно в коммуникационном кодировании. а также в машинном обучении. Если матрица кодирования или матрица выражения признаков является разреженной матрицей, скорость вычислений значительно возрастет. Для машинного обучения очень широко используются разреженные матрицы, такие как существует Представление функций данных, обработка естественного языка и другие области.
Работа с разреженными представлениями и работа требует больших вычислительных ресурсов, требует специальной обработки разреженных матричных представлений и операций и т. д., но эти операции могут значительно повысить производительность.
В этом уроке читатель может узнать о разреженных матрицах. основная концепция , существующие проблемы и как Используйте его в Python.
разреженная матрица
Разреженные матрицы состоят в основном из нуль Это главная особенность, которая отличает его от плотной матрицы.
если многие его элементынуль, матрица разреженная. Причина интереса к разреженности заключается в том, что использование этого свойства может значительно сократить объем вычислений, и на практике оказывается, что многие задачи с большими матрицами также являются разреженными.
Разреженность матрицы можно количественно определить дробью, т.е. в матрице нуль Количество элементов, деленное на общее количество элементов в матрице.
sparsity = count zero elements / total elements
Ниже небольшой 3х6 пример разреженной матрицы
1, 0, 0, 1, 0, 0
A = (0, 0, 2, 0, 0, 1)
0, 0, 0, 2, 0, 0
вышеуказанный момент Всего в массиве 18 элементов, из которых 13 элементов равны 0, тогда Разреженная часть этой матрицы равна 0,722 или 72% о.
Проблема разреженности
Разреженные матрицы вызывают проблемы пространственной и временной сложности.
космическая сложность
Большой тип Матрицы требуют много памяти Приходить хранения, некоторые из больших матриц, которые мы хотим использовать, являются разреженными.
На практике большинство больших матриц разрежены, и почти все элементынуль
Примером большой матрицы, которая слишком велика для размещения в памяти, является матрица ссылок, которая представляет ссылки с одного веб-сайта на другой. Меньшим примером разреженной матрицы может быть матрица встречаемости всех известных слов или терминов в книге. Матрицы, содержащиеся в обоих случаях, разрежены, и их нуль соотношение стоимости нуль Значений данных много, проблема с представлением этих матриц в виде плотных матриц заключается в том, что требуется память, а в матрице приходится выделять 32 бит или 64 немного нуль ценность. Это, очевидно, пустая трата ресурсов памяти, потому что эти нуль Значение не содержит никакой информации.
временная сложность
Допустим, в памяти может храниться очень большая разреженная матрица, после чего над этой матрицей будут выполняться какие-то операции. Проще говоря, если матрица в основном содержит нуль значение, т.е. не так много данных, то выполнение операций над этой матрицей может потребовать тратить очень длинный из время, когда большая часть выполняемых вычислений будет включать нуль Значения складываются или умножаются.
Использование линейной алгебры в такой задаче расточительно, потому что большая ее часть составляет O (N ^ 3) Арифметические операции работают над решением системы уравнений или обращением матриц с нулевыми операндами.
Временная сложность матричных операций увеличивается по мере увеличения размера матрицы. Для машинного обучения даже самый простой подход может потребовать много операций над каждой строкой, столбцом или даже над всей матрицей. это будет В результате время выполнения станет очень долгим, а вышеуказанные проблемы исчезнут. стать сложнее.
Разреженные матрицы в машинном обучении
Разреженные матрицы часто появляются в приложениях машинного обучения. В этом разделе будут обсуждаться некоторые распространенные примеры, чтобы читатель мог получить интуитивное представление о них и глубже понять проблему разреженности.
данные
Разреженные матрицы обычно появляются в некоторых конкретных типах данных, таких как количество общих действий по записи и т. д.
Вот три примера:
1. Смотрел ли пользователь фильм в каталоге фильмов;
2. Покупает ли пользователь товары в каталоге товаров;
3. Количество прослушиваний песни в каталоге песен;
подготовка данных
Разреженные матрицы появляются в схемах кодирования, используемых для записи данных. Вот три общих примера:
1. Горячее кодирование для представления категориальных данных в виде разреженных двоичных векторов;
2. Кодировка счетчика, используемая для представления частотности слов в словаре документа;
3. Кодирование TF-IDF, используемое для представления частоты документа, обратной частоте слова в словаре;
Области исследований
В некоторых областях исследований в области машинного обучения необходимо разработать специализированные методы для непосредственного решения проблемы разреженности, поскольку входные данные почти всегда разрежены. Вот три примера:
1. Обработка естественного языка для текстовых документов ;
2. Система рекомендаций для обработки использования продуктов в каталогах ;
3. Проблемы с компьютерным зрением при работе с изображениями, содержащими много черных пикселей ;
Если в языковой модели 100 000 слов, то длина вектора признаков равна 100 000, но для коротких сообщений электронной почты почти все значения признаков равны.нуль.
Используйте разреженные матрицы
Решением для представления и использования разреженных матриц является использование альтернативной структуры данных для представления разреженных матриц. нулевой элемент Значения можно игнорировать, нужно хранить или использовать только ненулевые значения элементов в разреженных матрицах. Существует множество структур данных, которые эффективно создают разреженные матрицы, три общих примера перечислены ниже:
1. Словарь. Словарь сопоставляет значение с помощью индексов строк и столбцов;
2. Список списков: каждая строка матрицы хранится в виде списка, а каждый подсписок содержит индекс столбца и его значение;
3. Список координат: в каждом кортеже хранится список кортежей, содержащий индекс строки, индекс столбца и его значение;
Существуют также структуры данных, которые лучше подходят для выполнения эффективных операций, таких как эти два распространенных примера:
1.CSR (сжатая разреженная строка): разреженная матрица представлена тремя одномерными массивами ненулевых значений, диапазоном строк и индексом столбцов;
2.CSC (сжатый разреженный столбец): то же, что и метод CSR, за исключением того, что индекс столбца сжимается перед индексом строки и считывается первым;
Разреженные матрицы в Python
SciPy предоставляет инструменты для создания разреженных матриц с использованием нескольких структур данных, а также инструменты для преобразования плотных матриц в разреженные. Многие функции линейной алгебры Numpy и SciPy, которые работают с массивами Numpy, могут работать с разреженными массивами SciPy. Кроме того, библиотеки машинного обучения, использующие структуры данных Numpy, также могут работать с разреженными массивами Scipy, например scikit-learning для машинного обучения и Keras для глубокого обучения.
Плотные матрицы, хранящиеся в массивах Numpy, можно преобразовать в разреженные матрицы, используя представление CSR, вызвав функцию scr_matrix(). В приведенном ниже примере разреженная матрица 3x6 определяется как плотный массив и преобразуется в разреженное представление CSR, а затем преобразуется обратно в плотный массив путем вызова функции todense().
# dense to sparse
from numpy import array
from scipy.sparse import csr_matrix
# create dense matrix
A = array([[1, 0, 0, 1, 0, 0], [0, 0, 2, 0, 0, 1], [0, 0, 0, 2, 0, 0]])
print(A)
# convert to sparse matrix (CSR method)
S = csr_matrix(A)
print(S)
# reconstruct dense matrix
B = S.todense()
print(B)
После выполнения примера сначала выводится заданный плотный массив, затем представление CSR и, наконец, реконструированная плотная матрица.
[[1 0 0 1 0 0]
[0 0 2 0 0 1]
[0 0 0 2 0 0]]
(0, 0) 1
(0, 3) 1
(1, 2) 2
(1, 5) 1
(2, 3) 2
[[1 0 0 1 0 0]
[0 0 2 0 0 1]
[0 0 0 2 0 0]]
Numpy не предоставляет функций для вычисления разреженности матрицы. Однако его можно легко вычислить, предварительно найдя плотность матрицы и вычитая из нее значения корреляции. Количество ненулевых элементов в массиве Numpy может быть задано функцией count_nonzero(), а общее количество элементов в массиве может быть задано свойством размера массива. Следовательно, разреженность массива может быть рассчитана как:
sparsity = 1.0 - count_nonzero(A) / A.size
В следующем примере показано, как вычислить разреженность массива:
# calculate sparsity
from numpy import array
from numpy import count_nonzero
# create dense matrix
A = array([[1, 0, 0, 1, 0, 0], [0, 0, 2, 0, 0, 1], [0, 0, 0, 2, 0, 0]])
print(A)
# calculate sparsity
sparsity = 1.0 - count_nonzero(A) / A.size
print(sparsity)
После запуска примера сначала напечатайте заданную разреженную матрицу, а затем разреженность матрицы.
[[1 0 0 1 0 0]
[0 0 2 0 0 1]
[0 0 0 2 0 0]]
0.7222222222222222
связанные ресурсы
Если вы хотите глубже погрузиться в разреженные матрицы, в этом разделе представлены некоторые ресурсы по этой теме:
книги
Введение в линейную алгебру, пятое издание, 2016 г.
Искусство научных вычислений, третье издание, 2007 г.
Искусственный интеллект: современный подход, третье издание, 2009 г.
Методы прямых разреженных матриц, второе издание, 2017 г.
API
Sparse matrices(scipy.sparse)API
статья
Разреженные матрицы (Википедия)
Информация об авторе
Джейсон Браунли , Эксперт по машинному обучению ,Сфокусируйся на Информационно-просветительское обучение для машинного обучения .
Linkedin: http://www.linkedin.com/in/jasonbrownlee/
Эта статья написанаСообщество Alibaba Cloud YunqiОрганизационный перевод , Оригинальное название статьи «Нежное введение в разреженные матрицы для машинного обучения». ", автор: Джейсон Браунли , Переводчик: Бегония.
Статья является упрощенным переводом, для более подробной информации, пожалуйста, проверьтеоригинальный