Изучите основные математические понятия для науки о данных и глубокого обучения, такие как скаляр и вектор, детерминант, разложение по сингулярным числам и многое другое.
Наука о данных — это междисциплинарная область, которая использует математику и расширенную статистику для прогнозирования. Все алгоритмы обработки данных прямо или косвенно используют математические концепции. Глубокое понимание математики поможет вам разработать инновационные решения для обработки данных, такие как рекомендательная система. Если вы хорошо разбираетесь в математике, это облегчит вам переход к науке о данных. Как специалист по данным, вы должны использовать фундаментальные концепции математики для решения проблем.
Помимо математики, вам также потребуются предметные знания, навыки программирования, деловые навыки, аналитические способности и любознательный склад ума. У исследователя данных нет возможности избежать математики. Вы должны внедрить и научить себя основам математики и статистики, чтобы стать специалистом по данным.
Чтобы увидеть больше таких руководств и курсов, посетите DataCamp:
В этом руководстве вы изучите основные математические концепции науки о данных (или особенно глубокого обучения), такие как:
- Скаляр и вектор
- Матрица и тензор
- определитель
- Собственные значения и векторы
- НОРМ.функция
- Матричная факторизация
- Разложение по сингулярным значениям
- Псевдообратный Мур-Пенроуз
- Продукт Адамара
- Энтропия
- Дивергенция Кульбака-Лейблера
- Градиентный спуск
Скаляр и вектор
- Скаляры. Скаляр — это отдельное число, которое имеет дело с вектором в пространстве посредством скалярного умножения.
- Векторы. Вектор V — это упорядоченный набор элементов. Вектор — это массив чисел, который может быть строкой или столбцом. Векторы можно складывать вместе и умножать на действительное число, известное как скейлер.
# Import numpy module import numpy as np
# creating a vector v = np.array([1, 2, 3, 4, 5]) print(v)
[1 2 3 4 5]
# Vector Operations # Import numpy module import numpy as np
# Create two vector a = np.array([1, 2, 3, 4, 5]) b = np.array([1, 2, 3, 4, 5])
# adding two vectors add = a + b print("Addition:",add)
# Vector Subtraction sub = a - b print("Subtraction:",sub)
# Vector Multiplication mul = a * b print("Multiplication:",mul)
# Vector Division div = a / b print("division",div)
Addition: [ 2 4 6 8 10] Subtraction: [0 0 0 0 0] Multiplication: [ 1 4 9 16 25] division [1. 1. 1. 1. 1.]
Матрица и тензор
- Матрицы. Матрица — это N-D массив чисел, представляющих преобразования. Вы можете думать о матрице как о преобразовании, таком как «масштабирование», «поворот», «сдвиг» и «переворот». Он превращает отдельные точки пространства в разные точки пространства.
# Import numpy module import numpy as np
# create 2*2 matrix a1=np.array([[1, 2], [3, 4]]) a2=np.array([[1, 2], [3, 4]])
# Dot Product dot_product = np.dot(a1,a2) print("Dot Product: \n",dot_product)
# Cross Product cross_product = np.cross(a1,a2) print("Cross Product: \n", cross_product)
Dot Product: [[ 7 10] [15 22]] Cross Product: [0 0]
Скалярное произведение двух векторов представляет собой проекцию одного вектора на другой вектор, а перекрестное произведение двух векторов позволяет одному вектору идентифицировать плоскость, в которой могут лежать оба вектора.
- Тензор. Иногда вам понадобится массив с более чем двумя измерениями и с разными размерами каждого массива, организованный в сетку, известную как тензор. Размерность тензора называется его рангом. Скаляры и векторы также являются разновидностью тензора. Тензоры нулевого порядка — это скейлеры, а тензоры первого порядка — это векторы.
определитель
Детерминант — это скалярное значение, представляющее коэффициент матрицы, по которой можно исследовать длину (в 1-мерном), площадь (2-мерном), объем (3-мерном). Если определитель равен 2, это в два раза больше объема (в 3-х измерениях), или если определитель равен 1, это не повлияет на объем (в 3-х измерениях). Если определитель равен 0, у него нет обратного, потому что ноль, умноженный на что-либо, даст вам ноль.
Свойства:
- Произведение матриц равно произведению определителя матриц: det (M1M2)=det (M1) det (M2).
- Определитель матрицы эквивалентен произведению собственных значений.
- Если вы умножаете матрицу на константу, то определитель изменяется на det(cM)=cN det (M). N — размерность матрицы.
Если ваша матрица представляет растяжимую игрушку, то определитель этой матрицы показывает, насколько вы растянули свою игрушку.
# Import numpy module import numpy as np
# Create 2*2 matrix arr=np.array([[1,2],[3,4]])
# Compute Determinant of a matrix arr_det=np.linalg.det(arr)
# Print the Computed Determinant print("Determinant:",arr_det)
Determinant: -2.0000000000000004
Собственные значения и собственные векторы
Собственный вектор квадратной матрицы A — это ненулевой вектор, такой, что умножение на A изменяет только масштаб v.
Собственный вектор также известен как характеристический вектор. Это ненулевой вектор, который изменяется только со скалярным коэффициентом, когда к нему применяется линейное преобразование.
Собственные векторы являются осями вращения линейного преобразования. Эти оси фиксированы по направлению, а собственное значение представляет собой масштабный коэффициент, на который матрица масштабируется вверх или вниз. Собственные значения также известны как характеристические значения или характеристические корни. Другими словами, вы можете сказать, что собственные значения — это фиксированная линия или плоскость, которая ограничивает поведение линейного преобразования, а собственные значения линейного преобразования — это фактор искажения.
Определитель сообщает вам площадь фигур, которые увеличиваются и уменьшаются при линейном преобразовании. Поэтому произведение собственных значений равно определителю.
# Import numpy module import numpy as np
# Create 2*2 matrix arr=np.array([[1,2],[3,4]])
# Find eigenvalues and eigenvectors eigenvalues, eigenvectors = np.linalg.eig(arr)
# print the eigenvalues and eigenvectors print("Eigen Values: \n",eigenvalues) print("Eigen Vectors:\n", eigenvectors)
Eigen Values: [-0.37228132 5.37228132] Eigen Vectors: [[-0.82456484 -0.41597356] [ 0.56576746 -0.90937671]]
Первоначально опубликовано на https://www.datacamp.com/community/tutorials/demystifying-mathematics-concepts-deep-learning
НОРМ Функция
Иногда вы хотите измерить размер вектора. Функция нормы помогает вам измерить размер вектора. Он присваивает строго положительную длину вектору в векторном пространстве, за исключением нулевого вектора. Он включает норму L^p. Он отображает векторы в неотрицательные значения. Это эквивалентно евклидову расстоянию для вектора и матрицы. Оно равно наибольшему сингулярному значению.
# import numpy module import numpy as np
# Create 3*3 Matrix a = np.array([[1,2,3],[4,5,6],[7,8,9]])
# Compute norm a_norm = np.linalg.norm(a)
# print the norm of function print(a_norm)
16.881943016134134
Матричная факторизация
Матричная факторизация, также известная как матричная декомпозиция. Он используется для разделения матрицы на составные части. Матричная факторизация эквивалентна факторизации чисел, например, разложению 10 на 2 x 5. Она используется для решения линейных уравнений.
Доступны следующие методы матричной факторизации:
- Разложение LU предназначено для квадратных матриц и разлагает матрицу на компоненты L и U.
- Разложение QR предназначено для матриц размера m x n (не ограничиваясь квадратными матрицами) и разлагает матрицу на компоненты Q и R. Он не ограничивается квадратными матрицами, такими как разложение LU.
- Разложение Холецкого используется для решения линейного метода наименьших квадратов для линейной регрессии, а также для методов моделирования и оптимизации.
- Разложение по единственному значению описано в следующем разделе.
Разложение по сингулярным значениям
В предыдущем разделе мы видели собственное разложение матрицы, которая разлагается на собственные векторы и собственные значения. Разложение по сингулярным значениям — это тип метода матричной факторизации, который разлагается на сингулярные векторы и сингулярные значения. Он предлагает различные полезные приложения в обработке сигналов, психологии, социологии, климате, науке об атмосфере, статистике и астрономии.
- M - матрица размера m × m
- U - левая сингулярная матрица размера m × n
- Σ - диагональная матрица размера n × n с неотрицательными действительными числами.
- V - правая сингулярная матрица размера m × n.
- V * - матрица размера n × m, транспонированная V.
# Import numpy module import numpy as np
# Create 3*3 matrix a = np.array([[1, 3, 4], [5, 6, 9], [1, 2, 3], [7, 6, 8]])
# Decomposition of matrix using SVD U, s, Vh = np.linalg.svd(a, full_matrices=False)
U,s,Vh
(array([[-0.27067357, -0.61678044, 0.69789573], [-0.65939972, -0.2937857 , -0.62152182], [-0.20244298, -0.3480035 , -0.06765408], [-0.67152413, 0.64200111, 0.34939247]]), array([18.0376394 , 2.34360292, 0.38870323]), array([[-0.46961711, -0.51018039, -0.72053851], [ 0.87911451, -0.19502274, -0.43488368], [-0.08134773, 0.83766467, -0.54009299]]))
# Generate the initial matrix new_a = np.dot(U, np.dot(np.diag(s), Vh))
# Print original matrix print(new_a)
[[1. 3. 4.] [5. 6. 9.] [1. 2. 3.] [7. 6. 8.]]
Псевдообратный Мур-Пенроуз
Псевдообратная матрица является обобщением обратной матрицы. Он используется при вычислении решений методом наименьших квадратов. Обратная матрица Мура-Пенроуза является наиболее популярной формой псевдообратной матрицы.
# Import numpy module import numpy as np
# Create 3*3 matrix a = np.array([[1, 3, 4], [5, 6, 9], [1, 2, 3], [7, 6, 8]])
# Compute the (Moore-Penrose) pseudo-inverse of a matrix. inv=np.linalg.pinv(a)
# Print pseudo-inverse of a matrix. print(inv)
[[-0.37037037 0.03703704 -0.11111111 0.18518519] [ 1.56296296 -1.2962963 -0.11111111 0.71851852] [-0.84444444 0.94444444 0.16666667 -0.57777778]]
Продукт Адамара
Произведение Адамара или произведение Шура — это поэлементное произведение двух исходных матриц одинаковой размерности. Он также известен как поэлементный продукт. Это проще, чем матричное произведение. Продукт Адамара используется в алгоритмах сжатия JPEG с потерями. Произведение Адамара коммутативно, ассоциативно и дистрибутивно. Он легко получает обратное и упрощает вычисление степенных матриц.
Продукт Адамара используется в различных областях, таких как коррекция кода в спутниковых передачах, теория информации, криптография, распознавание образов, нейронные сети, оценка максимального правдоподобия, сжатие JPEG с потерями, многомерный статистический анализ и линейное моделирование.
# Import numpy module import numpy as np
# Create 2*2 matrix a1 and a2 a1=np.array([[1, 2], [3, 4]]) a2=np.array([[1, 2], [3, 4]])
# Element wise multiplication hadamard_product = np.multiply(a1,a2)
# Print hadamard distance print("Hadamard Product: \n", hadamard_product)
Hadamard Product: [[ 1 4] [ 9 16]]
Энтропия
Энтропия случайной величины — это функция, которая пытается охарактеризовать непредсказуемость случайной величины. (Энтропия и взаимная информация)» Используется для построения автоматического дерева решений на каждом шаге построения дерева; выбор признаков осуществляется с использованием энтропийных критериев. Выбор модели основан на принципе максимальной энтропии, согласно которому из конфликтующих моделей лучшей является та, у которой самая высокая энтропия.
Если случайная величина X принимает значения из множества χ={x1,x2,…,xn} и определяется распределением вероятностей P(X), то энтропию случайной величины запишем как ( Энтропия и взаимная информация)
Если логарифм в приведенном выше уравнении берется по основанию 2, то энтропия выражается в битах. Если логарифм принимается за натуральный логарифм, то энтропия выражается в нац. Чаще всего энтропия выражается в битах. (Энтропия и взаимная информация)
# Import scipy and numpy module import scipy.stats import numpy as np
# Create an array a=np.array([1,1,2,3,1,3,4,2,5,6,3,2,4,3])
# Compute probability distribution a_pdf=scipy.stats.norm.pdf(a)
# Calculate the entropy of a distribution for given probability values. entropy = scipy.stats.entropy(a_pdf) # get entropy from probability values print("Entropy: ",entropy)
Entropy: 1.6688066853941022
Дивергенция Кульбака-Лейблера
Дивергенция Кульбака-Лейблера - это относительная энтропия двух вероятностных распределений. Он измеряет расстояние (сходство или несходство) одного распределения от другого эталонного распределения вероятностей. 0 Значение дивергенции Кульбака-Лейблера указывает на то, что оба распределения идентичны. Это может быть выражено как,
Звучит как мера расстояния, но это не так. Это связано с тем, что она асимметрична по своей природе, что означает, что метрика не является коммутативной. В общем случае можно сказать, что D(p, q) ≠D(q, p). Дивергенция KL часто используется в технике неконтролируемого машинного обучения «Вариационные автоэнкодеры».
# Import scipy.stats and numpy module import scipy.stats import numpy as np
# Create numpy arrays a=np.array([1,1,2,3,1,3,4,2,5,6,3,2,4,3]) b=np.array([1,1,3,4,2,4,5,2,5,6,3,2,4,3])
# Compute probability distribution a_pdf=scipy.stats.norm.pdf(a) b_pdf=scipy.stats.norm.pdf(b)
# compute relative entropy or KL Divergence kl_div=scipy.stats.entropy(a_pdf,b_pdf)
print("KL Divergence: ",kl_div)
KL Divergence: 0.26732496641464365
Градиентный спуск
Градиентный спуск — один из самых известных алгоритмов, используемых для оптимизации коэффициентов и смещения для линейной регрессии, логистической регрессии и нейронных сетей. Это итеративный процесс, который находит минимум любой заданной функции.
Три типа алгоритма градиентного спуска: полный пакетный, стохастический и мини-пакетный градиентный спуск. Полный пакетный градиентный спуск использует весь набор данных для вычисления градиента, в то время как стохастический градиентный спуск использует образец набора данных для вычисления градиента. Мини-градиентный спуск представляет собой комбинацию стохастического и пакетного градиентного спуска. Учебный набор разбит на несколько небольших групп, называемых партиями. Эти небольшие партии вычисляют потери один за другим и усредняют окончательный результат потерь.
Вывод
Поздравляем, вы добрались до конца этого урока!
Вы изучили основные математические понятия для глубокого обучения, такие как скаляр, вектор, матрица, тензор, собственные значения детерминанта, собственные векторы, функция NORM, разложение по сингулярным значениям (SVD), псевдообратная функция Мура-Пенроуза, продукт Адамара, энтропия, дивергенция Кульбака-Лейблера и градиентный спуск. .
Попутно вы также практиковали эти концепции в python, используя NumPy и SciPy.
Первоначально опубликовано на https://www.datacamp.com/community/tutorials/demystifying-mathematics-concepts-deep-learning
Хотите изучить науку о данных, загляните на DataCamp.
Больше таких статей вы можете найти в моем блоге Machine Learning Geek.
Свяжитесь со мной в Linkedin: https://www.linkedin.com/in/avinash-navlani/