Векторы являются фундаментальными строительными блоками различных алгоритмов машинного обучения.

Освоение линейной алгебры с помощью Python: подробное руководство по векторам и их приложениям

Векторы являются фундаментальными строительными блоками линейной алгебры и играют решающую роль в различных алгоритмах машинного обучения. Этот всеобъемлющий учебник призван дать вам полное представление о векторах, включая их определение, функции, интерпретацию и реализацию в Python. Вы освоите основные векторные операции, такие как алгебра и скалярное произведение. Понимание алгебраических и геометрических свойств векторов необходимо для выполнения различных операций анализа данных и машинного обучения, таких как уменьшение размерности, кластеризация и классификация.

Оглавление:

· Алгебраико-геометрический вид векторов

· Векторная величина и единичные векторы

· Сложение и вычитание векторов

· Векторно-скалярное умножение

· Векторное умножение (скалярное произведение)

· "Заключение"

· "Использованная литература"

Алгебраический и геометрический вид векторов

Концепции линейной алгебры могут быть эффективно выражены и визуализированы с помощью как алгебраических, так и геометрических представлений, предлагая мощную двойственность в понимании. Это связано с тем, что некоторые концепции более интуитивно понятны через алгебраические представления (хранение данных о продажах во времени), в то время как другие лучше интерпретируются с использованием геометрических терминов (геометрическая интерпретация вектора полезна в физике и технике) [1]. Используя этот двойной подход, можно получить более полное представление о концепциях линейной алгебры и их практических приложениях.

Вектор может быть представлен алгебраически как упорядоченный список компонентов, обычно числовых значений, где последовательность этих компонентов имеет определенное значение [2]. Каждый компонент вектора называется элементом, а общее количество элементов в векторе называется его размерностью (рис. 1А). Векторы могут быть представлены в двух ориентациях — ориентация столбца (вертикально) или ориентация строки (плоская и широкая). Стандартное обозначение для представления векторов — это использование строчной полужирной латинской буквы (иногда дополняемой символом стрелки над буквой).

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

В Python векторы могут быть выражены через различные типы данных. Хотя использование типа списка может показаться простым подходом к представлению вектора, он может не подходить для некоторых приложений, требующих операций линейной алгебры [1]. Следовательно, создание векторов в виде массивов NumPy часто предпочтительнее, поскольку они позволяют выполнять более эффективные и действенные операции (рис. 2).

# Create the vector as NumPy array 
u = np.array([1,3])

# plot the vector
plt.plot([0,u[0]],[0,u[1]], lw=3)
plt.axis('equal')
plt.plot([0, 4],[0, 0],'k-')
plt.plot([0, 0],[0, 4],'k-')
plt.grid(color = 'green', linestyle = '--', linewidth = 0.5)
plt.xticks(np.arange(0, 5, 1))
plt.title("2-dimensional vector ( u=[1,3] ) using NumPy array")

# Annotate the vector
plt.annotate("u = [1,3]", xy=(1+0.3,3), color ="blue")
Output:

Величина вектора и единичные векторы

Величина вектора, также известная как его геометрическая длина или норма, определяется расстоянием от его хвоста до головы. Он рассчитывается с использованием стандартной формулы евклидова расстояния (рис. 3А). В математике евклидово расстояние между двумя точками в евклидовом пространстве — это длина отрезка прямой между двумя точками. Его можно вычислить из декартовых координат точек с помощью теоремы Пифагора, и иногда его называют расстоянием Пифагора [3]. Величина вектора обозначается с помощью двойных вертикальных полос вокруг вектора, как в ∥ v ∥ (рис. 3A).

В некоторых приложениях нам нужен вектор с геометрической длиной, равной единице, который называется единичным вектором (иногда его называют вектором направления). Примеры приложений включают ортогональные матрицы, матрицы вращения, собственные векторы и сингулярные векторы [2]. Единичные векторы обозначаются символом «шапочка» ^ и определяются как величина = ∥ v ∥ = 1. Например, вектор u = (1, 3) не является единичным вектором, так как его величина не равна 1 ( т. е. ||v|| = √(12+32) ≠ 1) (рис. 3А). Любой вектор может стать единичным вектором, если мы разделим его на величину того же заданного вектора (рис. 3В). i и j — это специальные единичные векторы (также называемые стандартными единичными векторами), которые параллельны осям координат в направлениях осей x и y соответственно в двумерной плоскости. то есть,

|i| = 1

|j| = 1

В Python мы вычисляем норму (величину) вектора u, используя функцию np.linalg.norm(). Кроме того, единичный вектор u_hat вычисляется путем деления вектора u на его норму.

# Create the vector as NumPy array 
u = np.array([1,3])

# Find the norm using np.linalg.norm() function
norm = np.linalg.norm(u)

# Find unit vector
u_hat= u / np.linalg.norm(u)

Сложение и вычитание векторов

Сложение и вычитание векторов — фундаментальные операции линейной алгебры. Чтобы выполнить алгебраическое сложение или вычитание двух векторов, нам нужно убедиться, что они имеют одинаковую размерность. Например, мы можем добавить два трехмерных вектора или два двумерных вектора, но мы не можем добавить трехмерный вектор и двумерный вектор (рис. 4А). Чтобы сложить или вычесть векторы алгебраически, мы просто добавляем или вычитаем соответствующие элементы векторов. Например, если у нас есть два вектора u и v с компонентами [1, 3] и [3, 2] соответственно, то их сумма равна [4, 5] (рис. 4А).

Геометрически, чтобы сложить два вектора, мы сначала рисуем их в виде стрелок с хвостом одного вектора в начале другого вектора. Сумма двух векторов — это вектор, который начинается в конце первого вектора и заканчивается в начале второго вектора. Результирующий вектор представляет собой смещение между начальной точкой первого вектора и конечной точкой второго вектора. Например, предположим, что у нас есть два вектора u = [1, 3] и v = [3, 2], которые показаны на рисунке 4B. Чтобы добавить их, мы сначала нарисуем u, начиная с начала координат (0,0), и v, начиная с начала u, как показано. Сумма двух векторов — это вектор, который начинается в начале координат и заканчивается в начале вектора v.

В Python сложение и вычитание векторов выполняются с использованием массивов NumPy.

# Create vectors as NumPy array 
u = np.array([1,3])
v= np.array([3,2])

w =u+v  # addition
z=u-v   # subtraction

# plot the vectors
plt.plot([0,u[0]],[0,u[1]], color="blue")
plt.plot([0,v[0]],[0,v[1]], color="red")
plt.plot([0,w[0]],[0,w[1]], color="yellow")
plt.plot([0,z[0]],[0,z[1]], color="green")

plt.axis('equal')
plt.plot([-6, 6],[0, 0],'k-')
plt.plot([0, 0],[-46, 46],'k-')
plt.grid(color = 'green', linestyle = '--', linewidth = 0.5)
plt.axis((-6, 6, -6, 6))
plt.xticks(np.arange(-7, 8, 1))
plt.yticks(np.arange(-7, 8, 1))

plt.title("Vector addition and subtraction")

# Annotate the vector
plt.annotate("u = [1,3]", xy=(1+0.3,3), color ="blue")
plt.annotate("v = [3,2]", xy=(3+0.3,2), color ="red")
plt.annotate("w = [4,5]", xy=(4+0.3,5), color ="yellow")
plt.annotate("w = [-2,1]", xy=(-2+0.3,1), color ="green")

Output:

Векторно-скалярное умножение

В линейной алгебре скаляр относится к одному числовому значению, которое не является частью вектора или матрицы. Эти значения (скаляры) обычно представляются строчными греческими буквами, такими как α или λ. Векторно-скалярное умножение, обозначаемое как β * u ( u — это вектор, используемый в этом руководстве), представляет собой простую операцию, при которой каждый элемент вектора умножается на скалярное значение. Эта операция приводит к новому вектору с тем же направлением, что и исходный вектор, но с измененной величиной/длиной (рис. 6B). Это скалярное умножение можно использовать для растягивания или сжатия векторов, а также для изменения их направления. Например, умножение вектора на отрицательную скалярную величину (например, -1,5) изменит его направление на противоположное, а умножение на скалярную величину больше 1 приведет к его растяжению.

В Python векторно-скалярное умножение выполняется с использованием библиотеки NumPy.

# Create vectors as NumPy array 
u = np.array([1,3])
α=1.5
λ=-1.5

w =u*α 
z= u*λ  

# plot the vectors
plt.plot([0,u[0]],[0,u[1]], color="blue")
plt.plot([0,w[0]],[0,w[1]], color="black")
plt.plot([0,z[0]],[0,z[1]], color="black")

plt.axis('equal')
plt.plot([-6, 6],[0, 0],'k-')
plt.plot([0, 0],[-46, 46],'k-')
plt.grid(color = 'green', linestyle = '--', linewidth = 0.5)
plt.axis((-6, 6, -6, 6))
plt.xticks(np.arange(-7, 8, 1))
plt.yticks(np.arange(-7, 8, 1))

plt.title("Vector-Scalar Multiplication")
# Annotate the vectors
plt.annotate("u = [1,3]", xy=(1+0.3,3), color ="blue")
plt.annotate("w =  [1.5,4.5]", xy=(1.5+0.3,4.5), color ="black")
plt.annotate("z = [-1.5,-4.5]", xy=(-1.5+0.3,-4.5), color ="black")

Output:

Умножение вектор-вектор (точечный продукт)

Скалярное произведение (также иногда называемое скалярным произведением) — одна из самых важных операций во всей линейной алгебре. Это вычислительный строительный блок, на котором строятся многие алгоритмы, начиная от корреляции и свертки и заканчивая преобразованием Фурье [2]. Скалярный продукт — это одно число, которое предоставляет информацию о взаимосвязи между двумя векторами (рис. 8). Есть несколько способов указать скалярное произведение между двумя векторами, наиболее распространенное обозначение — uTv (вы также можете увидеть u · v,u,v›).

Существует несколько способов реализации скалярного произведения в Python.

# Create vectors as NumPy array
u = np.array([1,3])
v= np.array([3,2])

# method 1, using np.dot()
dotp1= np.dot(u,v)

# method 2 using np.matmul()
dotp2= np.matmul(u,v)

# method 3
dotp3= np.sum(np.multiply(u,v))

print(dotp1, dotp2, dotp3)
Output:
9 9 9

Скалярный продукт часто рассматривается как способ измерения сходства или соответствия между двумя векторами. Например, если бы мы собрали данные о росте и весе сотен людей и сохранили их в двух векторах, большое скалярное произведение между этими двумя векторами указывало бы на то, что переменные связаны друг с другом (например, более высокие люди, как правило, больше весят). . Однако на величину скалярного произведения влияет масштаб данных, а это означает, что скалярное произведение между данными, измеренными в разных единицах, нельзя сравнивать напрямую. Чтобы решить эту проблему, можно применить коэффициент нормализации, который приводит к нормализованному скалярному произведению, известному как коэффициент корреляции Пирсона (мы рассмотрим его в следующем руководстве). Этот коэффициент широко используется в статистике и науке о данных и считается одним из наиболее важных анализов в этой области [1].

Заключение

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

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

Рекомендации

[1] М. Коэн, Практическая линейная алгебра для науки о данных: от основных концепций к приложениям с использованием Python, 1-е издание. О'Рейли Медиа, 2022.

[2] Г. Странг, Введение в линейную алгебру, 6-е издание. Уэлсли-Кембридж Пресс, 2023.

[3] Евклидово расстояние, Википедия. 09 апреля 2023 г. По состоянию на 25 апреля 2023 г. [Онлайн]. Доступно: https://en.wikipedia.org/w/index.php?title=Euclidean_distance&oldid=1149051427

Повышение уровня кодирования

Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:

  • 👏 Хлопайте за историю и подписывайтесь на автора 👉
  • 📰 Смотрите больше контента в публикации Level Up Coding
  • 💰 Бесплатный курс собеседования по программированию ⇒ Просмотреть курс
  • 🔔 Подписывайтесь на нас: Twitter | ЛинкедИн | "Новостная рассылка"

🚀👉 Присоединяйтесь к коллективу талантов Level Up и найдите прекрасную работу