Библиотеката NumPy ни позволява да извършваме различни операции, които трябва да се извършват върху структури от данни, често използвани в машинното обучение и науката за данни, като вектори, матрици и масиви. Ще покажем само най -често срещаните операции с NumPy, които се използват в много тръбопроводи за машинно обучение. И накрая, имайте предвид, че NumPy е просто начин за извършване на операциите, така че математическите операции, които показваме, са основният фокус на този урок, а не самият пакет NumPy. Да започваме.
Какво е вектор?
Според Google вектор е величина, имаща посока, както и величина, особено като определяща позицията на една точка в пространството спрямо друга.
Векторите са много важни в машинното обучение, тъй като не само описват величината, но и посоката на функциите. Можем да създадем вектор в NumPy със следния кодов фрагмент:
внос numpyкатонапр
row_vector = np.array([1,2,3])
печат(row_vector)
В горния кодов фрагмент създадохме вектор на ред. Можем също така да създадем вектор на колона като:
внос numpyкатонапрcol_vector = np.array([[1],[2],[3]])
печат(col_vector)
Създаване на матрица
Матрицата може просто да се разбира като двуизмерен масив. Можем да направим матрица с NumPy, като направим многоизмерен масив:
матрица = np.array([[1,2,3],[4,5,6],[7,8,9]])
печат(матрица)
Въпреки че матрицата е точно подобна на многоизмерния масив, матричната структура на данните не се препоръчва поради две причини:
- Масивът е стандарт, когато става въпрос за пакета NumPy
- Повечето операции с NumPy връща масиви, а не матрица
Използване на рядка матрица
Да напомня, че рядка матрица е тази, в която повечето от елементите са нула. Често срещан сценарий при обработката на данни и машинното обучение е обработката на матрици, в които повечето от елементите са нула. Например, помислете за матрица, чиито редове описват всеки видеоклип в Youtube, а колоните представляват всеки регистриран потребител. Всяка стойност представлява дали потребителят е гледал видеоклип или не. Разбира се, по -голямата част от стойностите в тази матрица ще бъдат нула. The предимство с рядка матрица е, че не съхранява нулевите стойности. Това води до огромно изчислително предимство и оптимизация на съхранението.
Нека създадем искрова матрица тук:
от scipy внос оскъденoriginal_matrix = np.array([[1,0,3],[0,0,6],[7,0,0]])
sparse_matrix = sparse.csr_matrix(original_matrix)
печат(sparse_matrix)
За да разберем как работи кодът, ще разгледаме изхода тук:
В горния код използвахме функция NumPy за създаване на Компресиран рядък ред матрица, където ненулеви елементи са представени с помощта на нулевите индекси. Има различни видове рядка матрица, като:
- Компресирана рядка колона
- Списък със списъци
- Речник на ключовете
Тук няма да се впускаме в други оскъдни матрици, но знайте, че всяка тяхна употреба е специфична и никой не може да бъде наречен „най -добър“.
Прилагане на операции към всички векторни елементи
Това е общ сценарий, когато трябва да приложим обща операция към множество векторни елементи. Това може да стане чрез дефиниране на ламбда и след това векторизиране на същото. Нека да видим фрагмент от код за същото:
матрица = np.array([[1,2,3],
[4,5,6],
[7,8,9]])
mul_5 = ламбда x: x* 5
vectorized_mul_5 = np.vectorize(mul_5)
векторизиран_мул_5(матрица)
За да разберем как работи кодът, ще разгледаме изхода тук:
В горния кодов фрагмент използвахме функция векторизация, която е част от библиотеката NumPy, за да трансформираме проста дефиниция от ламбда във функция, която може да обработва всеки елемент от вектора. Важно е да се отбележи, че векторизацията е просто цикъл над елементите и няма ефект върху работата на програмата. NumPy също позволява излъчване , което означава, че вместо горния сложен код, можехме просто да направим:
матрица* 5И резултатът щеше да бъде абсолютно същият. Исках първо да покажа сложната част, в противен случай щяхте да пропуснете раздела!
Средно, вариация и стандартно отклонение
С NumPy е лесно да се извършват операции, свързани с описателна статистика за вектори. Средната стойност на вектора може да се изчисли като:
np.означава(матрица)Дисперсията на вектора може да се изчисли като:
np.var(матрица)Стандартното отклонение на вектора може да се изчисли като:
например std(матрица)Резултатът от горните команди върху дадената матрица е даден тук:
Транспониране на матрица
Транспонирането е много често срещана операция, за която ще чувате винаги, когато сте заобиколени от матрици. Транспонирането е просто начин за размяна на колонни и редови стойности на матрица. Моля, обърнете внимание, че a вектор не може да бъде транспониран като вектор е просто колекция от стойности, без тези стойности да са категоризирани в редове и колони. Моля, обърнете внимание, че преобразуването на векторен ред в вектор на колона не е транспониране (въз основа на дефинициите за линейна алгебра, което е извън обхвата на този урок).
Засега ще намерим мир само като транспонираме матрица. Достъпът до транспонирането на матрица с NumPy е много лесен:
матрица.TРезултатът от горната команда върху дадената матрица е даден тук:
Същата операция може да се извърши върху вектор на ред, за да се преобразува във вектор на колона.
Изравняване на матрица
Можем да преобразуваме матрица в едноизмерен масив, ако искаме да обработваме нейните елементи по линеен начин. Това може да стане със следния кодов фрагмент:
матрица.изравнете()Резултатът от горната команда върху дадената матрица е даден тук:
Обърнете внимание, че сплесканата матрица е едноизмерен масив, просто линеен по начин.
Изчисляване на собствени стойности и собствени вектори
Собствените вектори са много често използвани в пакетите за машинно обучение. Така че, когато функцията за линейна трансформация е представена като матрица, тогава X, собствените вектори са векторите, които се променят само в мащаба на вектора, но не и в неговата посока. Можем да кажем, че:
Xv = γvТук X е квадратната матрица и γ съдържа собствените стойности. Също така v съдържа собствените вектори. С NumPy е лесно да се изчислят собствени стойности и собствени вектори. Ето кодовия фрагмент, където демонстрираме същото:
оценява, evectors = np.linalg.eig(матрица)Резултатът от горната команда върху дадената матрица е даден тук:
Точкови продукти на вектори
Точковите продукти на векторите е начин за умножаване на 2 вектора. Разказва ви за колко от векторите са в една и съща посока , за разлика от кръстосаното произведение, което ви казва обратното, колко малко са векторите в една и съща посока (наречени ортогонални). Можем да изчислим точковото произведение на два вектора, както е дадено в кодовия фрагмент тук:
a = np.масив([3,5,6])b = np.масив([2. 3,петнадесет,1])
np.dot(а, б)
Резултатът от горната команда за дадените масиви е даден тук:
Добавяне, изваждане и умножение на матрици
Добавянето и изваждането на множество матрици е доста проста операция в матриците. Има два начина, по които това може да стане. Нека да разгледаме кодовия фрагмент, за да извършим тези операции. За да поддържаме това просто, ще използваме една и съща матрица два пъти:
np.add(матрица, матрица)След това две матрици могат да бъдат извадени като:
np.изваждане(матрица, матрица)Резултатът от горната команда върху дадената матрица е даден тук:
Както се очаква, всеки от елементите в матрицата се добавя/изважда със съответния елемент. Умножаването на матрица е подобно на намирането на точков продукт, както направихме по -рано:
np.dot(матрица, матрица)Горният код ще намери истинската стойност на умножение на две матрици, дадена като:
матрица*матрица
Резултатът от горната команда върху дадената матрица е даден тук:
Заключение
В този урок преминахме през много математически операции, свързани с вектори, матрици и масиви, които обикновено се използват за обработка на данни, описателна статистика и наука за данни. Това беше бърз урок, обхващащ само най -често срещаните и най -важни раздели от голямото разнообразие от концепции, но тези операции трябва да дадат много добра представа за това какви всички операции могат да се извършват, докато се работи с тези структури от данни.
Моля, споделете свободно отзивите си за урока в Twitter с @linuxhint и @sbmaggarwal (това съм аз!).