ОСНОВНАЯ МАТЕМАТИКА ДЛЯ НАУКИ ДАННЫХ

Основы математики для науки о данных: введение в матрицы и матричный продукт

Получите хорошее понимание одного из строительных блоков линейной алгебры: матриц и их произведения.

Как вы видели в Основах математики для науки о данных, векторы - это полезный способ хранения данных и управления ими. Вы можете представить их геометрически в виде стрелок или массивов чисел (координаты их конечных точек). Однако может быть полезно создавать более сложные структуры данных - и именно здесь необходимо вводить матрицы.

Вступление

Как векторы, матрицы представляют собой структуры данных, позволяющие упорядочивать числа. Это квадратные или прямоугольные массивы, содержащие значения, организованные в двух измерениях: строках и столбцах. Вы можете думать о них как о электронной таблице. Обычно термин матрица встречается в контексте математики, а двумерный массив - в контексте Numpy.

Размеры

В контексте матриц термин измерение отличается от размеров геометрического представления векторов (размерностей пространства). Когда мы говорим, что матрица представляет собой двумерный массив, это означает, что в массиве есть два направления: строки и столбцы.

В этой книге я буду обозначать матрицы жирным шрифтом и заглавными буквами, например A:

Матрица A состоит из двух строк и двух столбцов, но вы можете представить себе матрицы любой формы. В более общем смысле, если матрица имеет m строк и n столбцов и содержит реальные значения, вы можете охарактеризовать ее с помощью следующих обозначений: A ∈ ℝ (m × n).

Вы можете ссылаться на элементы матрицы с именем матрицы без полужирного шрифта (поскольку элементы являются скалярами), за которым следует индекс для строки и индекс для столбца, разделенные запятой в нижнем индексе. Например, A_ {1, 2} обозначает запись в первой строке и втором столбце.

По соглашению первый индекс предназначен для строки, а второй - для столбца. Например, запись 2 в матрице A выше расположена во второй строке и первом столбце матрицы A , поэтому он обозначается как A_ {2, 1} (помните из Essential Math for Data Science, что индексирование на основе единицы обычно используется в математической нотации).

Вы можете записать компоненты матрицы следующим образом:

Рисунок 1. Матрицы - это двумерные массивы. Количество строк обычно обозначается как m, а количество столбцов - как n.

Форма массива дает вам количество компонентов в каждом измерении, как показано на рисунке 1. Поскольку эта матрица является двумерной (строки и столбцы), вам нужны два значения для описания формы ( количество строк и количество столбцов в этом порядке).

Начнем с создания 2D-массива Numpy с помощью метода np.array():

Обратите внимание, что мы используем массивы в массивах ([[]]) для создания 2D-массива. Это отличается от создания одномерного массива количеством квадратных скобок, которые вы используете.

Как и в случае с векторами, можно получить доступ к свойству shape массивов Numpy:

Вы можете видеть, что фигура содержит два числа: они соответствуют количеству строк и столбцов соответственно.

Чтобы получить запись в матрице, вам понадобятся два индекса: один для ссылки на индекс строки, а другой для ссылки на индекс столбца.

При использовании Numpy процесс индексации такой же, как и для векторов. Вам просто нужно указать два индекса. Возьмем снова следующую матрицу A:

Можно получить конкретную запись со следующим синтаксисом:

A[1, 2] возвращает компонент с индексом один строки и индексом столбца два (с индексированием с нуля).

Чтобы получить полный столбец, можно использовать двоеточие:

array([ 2.1, 3. , 12.2, 1.8])

Это возвращает первый столбец (нулевой индекс), потому что двоеточие говорит, что нам нужны компоненты от первой до последней строки. Аналогичным образом, чтобы получить конкретную строку, вы можете:

array([3. , 4.5, 2.3])

Умение манипулировать матрицами, содержащими данные, является важным навыком для специалистов по данным. Проверка формы ваших данных важна, чтобы убедиться, что они организованы так, как вы хотите. Также важно знать, какая форма данных понадобится вам для использования таких библиотек, как Sklearn или Tensorflow.

С Numpy, если массив является вектором (1D Numpy array), форма представляет собой одно число:

Вы можете видеть, что v - вектор. Если это матрица, фигура имеет два числа (количество значений в строках и столбцах соответственно). Например:

Вы можете видеть, что матрица состоит из одной строки: первое число фигуры - 1. И снова использование двух квадратных скобок, [[ и ]], позволяет создать двумерный массив (матрицу).

Матричный продукт

Вы узнаете о скалярном произведении в Основах математики для науки о данных. Эквивалентная операция для матриц называется произведением матриц или умножением матриц. Он берет две матрицы и возвращает другую матрицу. Это основная операция в линейной алгебре.

Более простой случай матричного произведения находится между матрицей и вектором (который можно рассматривать как матричное произведение, у одного из которых есть единственный столбец).

На рисунке 2 показаны этапы произведения между матрицей и вектором. Рассмотрим первую строку матрицы. Вы производите скалярное произведение между вектором (значения 3 и 4 красного цвета) и рассматриваемой строкой (значения 1 и 2 синего цвета). Вы умножаете значения попарно: первое значение в строке с первым в векторе-столбце (1 ⋅ 3), а второе в строке со вторым в векторе (2 ⋅ 4). Он дает вам первый компонент результирующей матрицы (1 ⋅ 3 + 2 ⋅ 4 = 11).

Вы можете видеть, что произведение матрица-вектор относится к скалярному произведению. Это похоже на разделение матрицы A на три строки и применение скалярного произведения (как в Essential Math for Data Science).

Посмотрим, как это работает с Numpy.

array([[11], [39], [53]])

Обратите внимание, что мы использовали функцию reshape(), чтобы преобразовать вектор в матрицу 2 на 1 (the-1 говорит Numpy угадать оставшееся число). Без него вы бы получили одномерный массив вместо двумерного здесь (матрица с одним столбцом).

Есть еще один способ думать о матричном произведении. Вы можете считать, что вектор содержит значения, взвешивающие каждый столбец матрицы. Это ясно показывает, что длина вектора должна быть равна количеству столбцов матрицы, к которой применяется вектор.

Рисунок 3 может помочь визуализировать эту концепцию. Вы можете рассматривать векторные значения (3 и 4) как веса, применяемые к столбцам матрицы. Правила скалярного умножения, которые вы видели ранее, приводят к тем же результатам, что и раньше.

Используя последний пример, вы можете записать скалярное произведение между A и v следующим образом:

Это важно, потому что, как вы увидите более подробно в Essential Math for Data Science, он показывает, что Av представляет собой линейную комбинацию столбцов A, где коэффициенты являются значениями из v.

Кроме того, вы можете видеть, что формы матрицы и вектора должны совпадать, чтобы было возможно скалярное произведение.

На рисунке 4 показаны формы, участвующие в произведении матрица-вектор, и показано, что количество столбцов матрицы должно быть равно количеству строк вектора.

матричное произведение эквивалентно операции скалярного произведения для двух матриц. Как вы увидите, он похож на произведение матрица-вектор, но применяется к каждому столбцу второй матрицы.

На рисунке 5 показан пример матричного продукта. Вы можете видеть, что результирующая матрица имеет два столбца, как и вторая матрица. Значения первого столбца второй матрицы (3 и 4) взвешивают два столбца, и результат заполняет первый столбец результирующей матрицы. Точно так же значения второго столбца второй матрицы (9 и 0) взвешивают два столбца, и результат заполняет второй столбец результирующей матрицы.

С помощью Numpy вы можете рассчитать матричный продукт точно так же, как скалярный продукт:

array([[11, 9], [39, 45], [53, 63]])

Как и в случае с произведением матрица-вектор и как показано на рисунке 6, количество столбцов первой матрицы должно соответствовать количеству строк второй матрицы.

Результирующая матрица имеет столько же строк, сколько первая матрица, и столько же столбцов, сколько вторая матрица.

Давай попробуем.

Матрицы A и B имеют разную форму. Давайте посчитаем их скалярное произведение:

array([[ 9, 24, 15], [12, 33, 24], [15, 42, 33]])

Вы можете видеть, что результат A ⋅ B - это матрица 3 на 3. Эта форма определяется количеством строк в A (3) и количеством столбцов в B (3 ).

Вы можете рассчитать ковариационную матрицу (подробнее о ковариационной матрице в Essential Math for Data Science) набора данных с помощью произведения между матрицей, содержащей переменные, и ее транспонированием. Затем вы делите на количество наблюдений (или это число минус один для поправки Бесселя). Вы должны быть уверены, что переменные центрированы вокруг нуля заранее (это можно сделать путем вычитания среднего значения).

Давайте смоделируем следующие переменные x, y, и z:

Используя Numpy, ковариационная матрица выглядит так:

array([[ 4.0387007 , 4.7760502 , 8.03240398], [ 4.7760502 , 32.90550824, 9.14610037], [ 8.03240398, 9.14610037, 16.99386265]])

Теперь, используя матричное произведение, вам сначала нужно сложить переменные как столбцы матрицы:

Вы можете видеть, что переменная X представляет собой матрицу 100 на 3: 100 строк соответствуют наблюдениям, а 3 столбца - функциям. Затем вы центрируете эту матрицу вокруг нуля:

Наконец, вы вычисляете ковариационную матрицу:

array([[ 4.0387007 , 4.7760502 , 8.03240398], [ 4.7760502 , 32.90550824, 9.14610037], [ 8.03240398, 9.14610037, 16.99386265]])

Вы получите ковариационную матрицу, аналогичную матрице из функции np.cov(). Важно помнить, что скалярное произведение матрицы с ее транспонированием соответствует ковариационной матрице.

Транспонирование скалярного произведения между двумя матрицами определяется следующим образом:

Например, возьмем следующие матрицы A и B:

Вы можете проверить результат (A B) ^ T и B ^ T A ^ T:

array([[ 9, 12, 15], [24, 33, 42], [15, 24, 33]])
array([[ 9, 12, 15], [24, 33, 42], [15, 24, 33]])

Поначалу может показаться удивительным, что порядок двух векторов или матриц в скобках должен измениться для обеспечения эквивалентности. Давайте посмотрим на подробности операции.

На рисунке 7 показано, что транспонирование матричного произведения равно произведению транспонирования, если вы измените порядок вектора и матрицы.

Вы можете применить это свойство к более чем двум матрицам или векторам. Например,

Держите это свойство в секрете. Он объясняет многие «косметические перестановки», с которыми вы можете столкнуться при манипулировании матрицами и векторами. Эти манипуляции с кодом - отличный способ научиться.

В заключение, матричный продукт - это ключевая концепция линейной алгебры, и вы увидите в Основах математики для науки о данных, как она связана с преобразованием пространства.

Первоначально опубликовано на https://hadrienj.github.io/posts/Essential-Math-for-Data-Science-Introduction_to_matrices_and_matrix_product/ .

Этот пост представляет собой образец моей книги Essential Math for Data Science!

Скачайте книгу здесь: https://bit.ly/34jm8xb !