
Если вы начали заглядывать за кулисы популярных алгоритмов машинного обучения, вы могли встретить термин «линейная алгебра».
Термин кажется пугающим, но на самом деле это не так. Многие алгоритмы машинного обучения полагаются на линейную алгебру, потому что она дает возможность «векторизировать» их, делая их вычислительно быстрыми и эффективными.
Линейная алгебра — обширная область математики, и не все ее знания требуются для понимания и построения алгоритмов машинного обучения, поэтому наше внимание будет сосредоточено на основных темах, связанных с машинным обучением.
В этой статье рассматриваются основы линейной алгебры, необходимые для машинного обучения, в том числе:
- Векторы и матрицы
- Операции с матрицами (умножение, сложение и вычитание)
- Векторные операции (сложение, вычитание и скалярное произведение)
Реализации NumPy для каждой из операций также включены в конце каждого раздела.
Матрицы
Матрица представляет собой прямоугольный массив чисел, расположенных в строках и столбцах. Другими словами, матрица представляет собой двумерный массив, состоящий из чисел.

Размеры матрицы обозначаются m ✕ n, где m — количество строк, а n — количество столбцов. Матрица, показанная на изображении выше, представляет собой матрицу 3 ✕ 3, так как она имеет 3 строки и 3 столбца.
Python по умолчанию не поставляется с массивами. Списки великолепны, но они не очень эффективны при выполнении миллионов числовых опций. Чтобы решить эту проблему, мы используем какую-то библиотеку для числовых вычислений, которая поддерживает массивы и быстрые числовые вычисления. NumPy является одним из них, и помимо этого у него есть несколько других преимуществ.
Вот как мы можем создать матрицу 3x3 с помощью NumPy:

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

Операции над матрицами
Матрицы поддерживают все основные арифметические операции, включая сложение, вычитание, умножение и деление.
Добавление
Сложить две матрицы очень просто. Соответствующие элементы матриц складываются вместе, образуя новую матрицу. Результирующая матрица также имеет то же количество строк и столбцов, что и две добавляемые матрицы.

Обратите внимание, что обе матрицы должны иметь одинаковое количество строк и столбцов, иначе результат будет не определен.
вычитание
Вычитание двух матриц так же просто, как и сложение. Соответствующие члены двух матриц вычитаются, чтобы сформировать новую результирующую матрицу. Как и в дополнение, обе матрицы должны иметь одинаковые размеры.

Скалярное умножение
Умножение матрицы на число называется скалярным умножением. Этот вид умножения очень прост, так как нам просто нужно умножить каждый из элементов матрицы на это число.

Скалярное деление
Разделить матрицу на скаляр тоже очень просто. Каждый из элементов в матрице делится на число, чтобы сформировать новую матрицу результатов.

Матрично-матричное умножение
Умножение матрицы на другую матрицу называется «умножением матриц» или «перекрестным произведением». Умножение матриц очень простое, но немного сложное для понимания новичками.
Возьмем две матрицы 3x3, A и B, как показано ниже:

Для начала мы умножим каждое из чисел в первой строке A на соответствующие числа в первом столбце B. Затем сумма будет помещена в матрицу результатов, как показано ниже:

Мы снова возьмем произведение первой строки матрицы A, но на этот раз со вторым столбцом матрицы B.

Тот же процесс будет повторен для третьего столбца матрицы B.

Повторим этот процесс для второй и третьей строк матрицы A.

Используя NumPy, мы можем умножать две матрицы друг на друга с помощью функции numpy.dot().

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

На изображении выше матрицы A и B можно перемножить, поскольку A имеет 2 столбца и B содержит 2 строки. Матрицы C и D нельзя перемножить, поскольку C имеет только 2 столбца, а D содержит 3 строки.
- Размерности полученной матрицы будут равны внешним размерам двух перемножаемых матриц, т.е. результирующая матрица будет иметь количество строк первой матрицы и количество столбцов второй матрицы.

- Произведение двух матриц НЕ коммутативно. Это означает, что A, умноженное на B, не равно B, умноженному на A. .
Транспонирование матрицы
Транспонирование матрицы означает замену ее строк и столбцов друг с другом, т. е. преобразование ее строк в столбцы и столбцов в строки. Транспонирование матрицы часто обозначается заглавной T в верхнем индексе. Например, Aᵀ будет обозначать транспонирование матрицы A.

В NumPy матрицу (массив) можно транспонировать либо с помощью собственного метода массива .T, либо с помощью функции numpy.transpose().

Векторы
В линейной алгебре вектор — это величина, имеющая направление наряду со своей величиной. Однако это определение во многом основано на физике. Давайте определим это в наших собственных терминах.
Вектор можно рассматривать как матрицу m x 1 или матрицу столбец. Количество строк в векторе говорит о размерности вектора. Например, вектор, состоящий из трех строк, будет называться трехмернымвектором.

В отличие от матриц, при использовании NumPy векторы создаются как одномерные массивы, а не двумерные массивы.

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

Вот как скалярное произведение двух векторов можно рассчитать с помощью NumPy:

Размеры двух векторов должны быть одинаковыми при вычислении их скалярного произведения.
В отличие от умножения матриц, скалярное произведение двух векторов является коммутативным, то есть A • B = B • A.
Заключение
Использование линейной алгебры делает вычисления машинного обучения очень быстрыми за счет введения векторизации. NumPy — одна из библиотек, используемых для векторизации алгоритмов машинного обучения. В этой статье вы познакомились с некоторыми основами линейной алгебры для машинного обучения, такими как матрицы, векторы, сложение матриц, умножение и скалярное произведение матриц. Цель этого руководства состояла в том, чтобы познакомить вас с основами линейной алгебры, чтобы вы не чувствовали себя упущенными при просмотре математики, лежащей в основе различных алгоритмов машинного обучения.