Векторите са основни градивни елементи на различни алгоритми за машинно обучение

Овладяване на линейната алгебра с Python: Задълбочено ръководство за вектори и техните приложения

Векторите са основни градивни елементи на линейната алгебра и играят решаваща роля в различни алгоритми за машинно обучение. Този изчерпателен урок има за цел да ви предостави задълбочено разбиране на векторите, като обхваща тяхната дефиниция, функция, интерпретация и имплементация в Python. Ще придобиете опит в основни векторни операции като алгебра и точкови произведения. Разбирането на алгебричните и геометричните свойства на векторите е от съществено значение за извършването на различни операции при анализ на данни и машинно обучение, като намаляване на размерността, групиране и класификация.

Съдържание:

· Алгебричен и геометричен изглед на вектори

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

· Векторно събиране и изваждане

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

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

· Заключение

· "Препратки"

Алгебричен и геометричен изглед на вектори

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

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

Когато разглеждаме геометричната интерпретация на векторите, можем да визуализираме вектор като права линия с определена дължина и посока в пространството. Дължината на вектора представлява неговата величина (вижте по-долу), докато посоката се указва от ориентацията на вектора по отношение на референтна точка или ос. Докато векторите обикновено се чертаят, започвайки от началото на графиката (това се нарича стандартна позиция), те могат да бъдат позиционирани навсякъде в пространството, без да се засягат свойствата им. Всъщност посоката и големината на вектора остават същите, независимо от началната му точка, докато крайната му точка остава същата (Фигура 1B). Началната точка на вектора се нарича опашка, докато крайната точка, обикновено начертана с върха на стрелка, се нарича глава на вектора. Визуализирането на вектори по този начин ни позволява да ги разбираме и манипулираме по-добре, предоставяйки полезен инструмент за анализиране на връзките между характеристиките в набор от данни, което ги прави основна концепция в машинното обучение и науката за данни.

В 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:

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

Големината на вектора, известна също като неговата геометрична дължина или норма, се определя от разстоянието от неговата опашка до главата. Изчислява се с помощта на стандартната формула за евклидово разстояние (Фигура 3A). В математиката евклидовото разстояние между две точки в евклидовото пространство е дължината на отсечка между двете точки. Може да се изчисли от декартовите координати на точките с помощта на Питагоровата теорема и понякога се нарича Питагорово разстояние [3]. Векторната величина се обозначава с помощта на двойни вертикални ленти около вектора, както в ∥ v ∥ (Фигура 3A).

Има някои приложения, при които искаме вектор с геометрична дължина равна на единица, който се нарича единичен вектор (понякога наричан вектор на посоката). Примерните приложения включват ортогонални матрици, ротационни матрици, собствени вектори и сингулярни вектори [2]. Единичните вектори се означават със символа „cap“ ^ и се дефинират като величина = ∥ v ∥ = 1. Например вектор u = (1, 3) не е единичен вектор, тъй като неговата величина не е равна на 1 ( т.е. ||v|| = √(12+32) ≠ 1) (Фигура 3A). Всеки вектор може да стане единичен вектор, когато го разделим на големината на същия даден вектор (Фигура 3B). 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)

Векторно събиране и изваждане

Векторно събиране и изваждане са основни операции в линейната алгебра. За да извършим алгебрично събиране или изваждане на два вектора, трябва да се уверим, че те имат еднаква размерност. Например, можем да добавим два 3-измерни вектора или два 2-измерни вектора, но не можем да добавим 3-измерен вектор и 2-измерен вектор (Фигура 4A). За да добавяме или изваждаме вектори алгебрично, ние просто добавяме или изваждаме съответните елементи на векторите. Например, ако имаме два вектора u и v с компоненти [1, 3] и [3, 2], съответно, тогава тяхната сума е [4, 5] (Фигура 4A).

Геометрично, за да добавим два вектора, първо ги начертаваме като стрелки с опашката на един вектор в началото на другия вектор. Сумата от двата вектора е векторът, който започва от опашката на първия вектор и завършва в началото на втория вектор. Полученият вектор представлява изместването между началната точка на първия вектор и крайната точка на втория вектор. Да предположим например, че имаме два вектора 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] M. Cohen, Практическа линейна алгебра за наука за данни: От основни концепции до приложения, използващи Python, 1-во издание. O’Reilly Media, 2022 г.

[2] G. Strang, Въведение в линейната алгебра, 6-то издание. Wellesley-Cambridge Press, 2023 г.

[3] „Евклидово разстояние“, Уикипедия. 9 април 2023 г. Достъп: 25 април 2023 г. [Онлайн]. Налично: https://en.wikipedia.org/w/index.php?title=Euclidean_distance&oldid=1149051427

Кодиране на ниво нагоре

Благодарим ви, че сте част от нашата общност! Преди да тръгнеш:

🚀👉 Присъединете се към колектива за таланти Level Up и намерете невероятна работа