Category: Математика

14
Апр
2021

Вычисление синуса,используя ряд Тейлора

Учитель задал написать программу,вычисляющую значение sin(x) рядом Тейлора.Проблема в том,что не понимаю как ввести понятие периода.Иначе говоря чем большее число мы вводим,тем большее значение получаем.
Вот код:
#include <stdio.h> …

13
Апр
2021

Java найти пересечение двух отрезков

Для данного класса Point и скелета класса Segment реализуйте Segment методы:
конструктор с начальной и конечной точками в качестве параметров.
Убедитесь, что созданный сегмент существует и не является дегенеративным, что означает, что нача…

03
Апр
2021

Расстояние между 2 точками координаты

Я хочу найти расстояние между точкой x и точкой y. В методе getDistance сама формула (взял ее за основу, так как на всех форумах ее предлагают, так как в математике я не силен). Вот только возвращает по итогу постоянно 0. Я точно сверил фо…

02
Апр
2021

math.js derivative работает не правильно

Я делаю простую нейросеть, и для нее мне нужна функция активации и ее производная.
Есть два поля ввода: f(x) и f'(x)
Пользователь вводит f(x), например: 1/(1 + exp(-x)). Программа автоматически вставляет в f'(x) результат данного кода:
mat…

01
Апр
2021

Привет, помогите написать (исправить мой) код, не понимаю ошибки

Напишите функцию, которая вычисляет по заданному в десятичной системе счисления числу N количество единиц в двоичной записи этого числа (0 <= N <= 10^6)
def numberOfOnes(N):
a = 0
while N > 0:
if N % 2 == 1:
a += 1

30
Мар
2021

Нарисовать правильный треугольник вписанный в окружность

Задача: нарисовать окружность радиуса R, а в нее вписать правильный треугольник.
Для треугольника ABC (основание BC параллельно оси x) получаем такие координаты точек

A: (R, 0)

Для R = 50 получается картинка

<svg version=’1.0′ x…

23
Мар
2021

Найти точку – сумма расстояний до которой от заданного набора точек минимальна

Условный магазин стоит размещать поближе к центру города и складу, но подальше, например от свалки и тюрьмы…
Хочу написать функцию решающую так называемую "Задачу Вебера с притяжением и отталкиванием", суть которой состоит в то…

19
Мар
2021

Ближайшее вхождение суммы двух чисел в массиве к числу n PHP

Собственно, задача такая: необходимо найти ближайшую сумму двух чисел в отсортированном массиве к определённому значению n.
Каким способом можно реализовать подобное? Благодарю.

05
Мар
2021

Проблема с графиком matplotlib

Написал по проекту прогу, которая должна считывать пульс лица по видеокамере(в настоящем времени), с помощью opencv и numpy. Проблема заключается в том что для того чтобы вывести мат. формулу, обязательную по проекту, необходимо отследить …

05
Мар
2021

Проблема с графиком matplotlib

Написал по проекту прогу, которая должна считывать пульс лица по видеокамере(в настоящем времени), с помощью opencv и numpy. Проблема заключается в том что для того чтобы вывести мат. формулу, обязательную по проекту, необходимо отследить …

02
Мар
2021

Проверка кода Python. Проверка введенных значений. Тестовые данные

Ку
Буду благодарна за пару подсказок
Необходимо было составить программу, производящую некоторые вычисления (их я прописала в комментариях к коду).
Составила:
import math
x = int(input(‘Введите любое число ‘))
a = int(input(‘Введите любое …

26
Фев
2021

👨‍🎓️ 5 простых шагов: как подготовиться к поступлению в «Школу анализа данных»?

Поступить и учиться в ШАД от Яндекс – мечта многих начинающих специалистов по Data Science. Рассказываем, как это можно сделать, пройдя пять простых шагов.

В апреле 2021 года начинается набор в «Школу анализа данных» – это бесплатная двухгодичная программа Яндекс для желающих освоить профессию Data Scientist или стать архитектором систем хранения и обработки больших данных. Мы составили небольшой гид по подготовке к поступлению и обучению в этой школе.

Набор проходит в три этапа:

  1. Онлайн-тестирование: решение заданий теста за 5 часов;
  2. Для поступающих в московское отделение второй этап состоит из двух частей: первая математика и алгоритмы, вторая программирование и основы анализа данных;
  3. Заключительный этап очное собеседование, во время которого придется решать задачи по математике, алгоритмам и программированию.
<a href="https://upload.wikimedia.org/wikipedia/commons/a/a8/%D0%9B%D0%9E%D0%93%D0%9E_%D0%A8%D0%90%D0%94.png" target="_blank" rel="noopener noreferrer nofollow">Источник</a>
Источник

Шаг 1: Выясните, каких знаний вам не хватает

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

Шаг 2: Математическая подготовка

Перед тем, как приступить к изучению специфических областей математики, ознакомьтесь с нашим материалом «Обучение Data Science: какие знания по математике нужны специалисту по анализу данных?», в котором собраны общие понятия и ресурсы, с помощью которых их можно освоить.


Алгeбра

Чек-лист из программы для поступления в «Школу анализа данных»:

  • Определение, четность, произведение подстановок. Разложение подстановок в произведение транспозиций и независимых циклов.
  • Комплексные числа. Геометрическое изображение, алгебраическая и тригонометрическая форма записи, извлечение корней, корни из единицы.
  • Системы линейных уравнений. Прямоугольные матрицы. Приведение матриц и систем линейных уравнений к ступенчатому виду. Метод Гаусса.
  • Линейная зависимость и ранг. Линейная зависимость строк (столбцов). Основная лемма о линейной зависимости, базис и ранг системы строк (столбцов). Ранг матрицы. Критерий совместности и определенности системы линейных уравнений в терминах рангов матриц. Фундаментальная система решений однородной системы линейных уравнений.
  • Определитель квадратной матрицы, его основные свойства. Критерий равенства определителя нулю. Формула разложения определителя матрицы по строке (столбцу).
  • Операции над матрицами и их свойства. Теорема о ранге произведения двух матриц. Определитель произведения квадратных матриц. Обратная матрица, ее явный вид (формула), способ выражения с помощью элементарных преобразований строк.
  • Векторное пространство, его базис и размерность. Преобразования координат в векторном пространстве. Подпространства как множества решений систем однородных линейных уравнений. Связь между размерностями суммы и пересечения двух подпространств. Линейная независимость подпространств. Базис и размерность прямой суммы подпространств.
  • Линейные отображения, их запись в координатах. Образ и ядро линейного отображения, связь между их размерностями. Сопряженное пространство и сопряженные базисы. Изменение матрицы линейного оператора при переходе к другому базису.
  • Билинейные функции, их запись в координатах. Изменение матрицы билинейной функции при переходе к другому базису. Ортогональное дополнение к подпространству относительно симметрической билинейной функции. Связь между симметричными билинейными и квадратичными функциями. Существование ортогонального базиса для симметрической билинейной функции. Нормальный вид вещественной квадратичной функции. Закон инерции.
  • Евклидовы пространства. Неравенство Коши-Буняковского. Ортогональные базисы. Ортогонализация Грама-Шмидта. Ортогональные операторы.
  • Собственные векторы и собственные значения линейного оператора. Собственные подпространства линейного оператора, их линейная независимость. Условие диагонализируемости оператора.

Дополнительный материал: «Как линейная алгебра используется в машинном обучении?».

Математически анализ

Чек-лист из программы для поступления в «Школу анализа данных»:

  • Пределы и непрерывность. Пределы последовательностей и функций. Непрерывные функции.
  • Ряды. Числовые и функциональные ряды. Признаки сходимости (Даламбера, Коши, интегральный, Лейбница). Абсолютно и условно сходящиеся ряды.
  • Дифференцирование. Дифференцирование функций. Применение производной для нахождения экстремумов функций. Формула Тейлора.
  • Функции многих переменных. Частные производные. Градиент и его геометрический смысл. Гессиан. Метод градиентного спуска. Поиск экстремумов функций от многих переменных.
  • Интегрирование. Определенный и неопределенный интегралы. Методы интегрирования функций. Первообразные различных элементарных функций. Кратные интегралы (двойные, тройные), замена координат, связь с повторными.
  • Элементы функционального анализа: нормированные, метрические пространства, непрерывность, ограниченность.

Дополнительный материал: «Для чего нужен математический анализ в машинном обучении».

Комбинаторика

Чек-лист из программы для поступления в «Школу анализа данных»:

  • Основные правила комбинаторики. Правило подсчета количества комбинаторных объектов. Принцип Дирихле. Примеры.
  • Множества. Круги Эйлера, операции на множествах. Формула включений и исключений. Примеры.
  • Сочетания. Размещения, перестановки и сочетания. Бином Ньютона. Треугольник Паскаля. Сочетания с повторениями.

Дополнительный материал: «Первое занятие нашего курса по математике для Data Science доступно на YouTube».


Теория вероятностей

Чек-лист из программы для поступления в «Школу анализа данных»:

  • Основные понятия теории вероятностей. Определение вероятностного пространства, простейшие дискретные случаи (выборки с порядком и без него, упорядоченные и неупорядоченные), классическая вероятностная модель. Случайная величина, функция распределения.
  • Условные вероятности. Определение условной вероятности, формула полной вероятности, формула Байеса.
  • Математическое ожидание, дисперсия, корреляция. Определение математического ожидания, дисперсии, ковариации и корреляции, их свойства.
  • Независимость событий. Попарная независимость и независимость в совокупности.
  • Основные теоремы теории вероятностей. Неравенство Чебышева. Закон больших чисел. Центральная предельная теорема.
  • Распределения. Стандартные дискретные и непрерывные распределения, их математические ожидания, дисперсии и свойства: биномиальное; равномерное; нормальное; пуассоновское; показательное; геометрическое.

Дополнительный материал: «Зачем в науке о данных нужны теория вероятностей и статистика».


Шаг 3: Программирование

Для Data Scientist также важны сбор, очистка, обработка и систематизация данных. При решении этих задач и реализации моделей машинного обучения используются Python и R. Для поступления в «Школу анализа данных» нужно владеть хотя бы одним из основных языков программирования. Какой из них стоит выбрать для работы, мы обсуждали в статье «От “R против Python” к “R и Python”».

Чек-лист из программы для поступления в «Школу анализа данных»:

  • Простейшие конструкции языка программирования. Циклы, ветвления, рекурсия.
  • Анализ алгоритмов. Понятие о сложности по времени и по памяти. Асимптотика, O-символика. Инварианты, пред- и пост- условия. Доказательство корректности алгоритмов.
  • Простейшие структуры данных. Массивы, стеки, очереди, связные списки, Сравнение временных затрат при различных типах операций.
  • Строки и операции над ними. Представление строк. Вычисление длины, конкатенация.
  • Сортировки. Нижняя теоретико-информационная оценка сложности задачи сортировки. Алгоритмы сортировки вставками, пузырьком, быстрая сортировка, сортировка слиянием. Оценка сложности.
  • Указатели.Указатели и динамическое управление памятью.

Курсы для подготовки:


Шаг 4: Анализ данных

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

Чек-лист из программы для поступления в «Школу анализа данных»:

  • Основные машинного обучения: классификация, регрессия, ранжирование, кластеризация. Обучение с учителем и без учителя.
  • Предобработка и очистка данных. Работа с пропущенными значениями.
  • Feature Engineering. Работа с категориальными признаками.
  • Переобучение: как его обнаружить и как с ним бороться. Разделение на обучающую и тестовую выборки. Методы регуляризации.
  • Сравнение моделей. Метрики в задачах классификации и регрессии. Методология подборара гиперпараметров.
  • Основные модели классификации и регрессии: линейные модели, решающие деревья. Ансамбли алгоритмов.

Курсы для подготовки:

Шаг 5: Практика

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

Примеры упражнений:

***

Если вы хотите наработать необходимую для поступления в «Школу анализа данных» математическую базу и подготовиться к обучению на Data Scientist, обратите внимание на онлайн-курс «Библиотеки программиста». С помощью опытных преподавателей из МГУ сделать это будет намного проще, чем самостоятельно по книгам. Студенты могут выбрать отдельные разделы (например, линейную алгебру) или оплатить весь курс целиком с существенной скидкой.

22
Фев
2021

🎲 Зачем в науке о данных нужны теория вероятностей и статистика

Завершает наш небольшой цикл обзор методов и понятий теории вероятностей и статистики, используемых в машинном обучении и науке о данных.

В двух первых статьях мы рассказали о роли математического анализа и линейной алгебры в машинном обучении. Продолжая тему, поговорим о теории вероятностей и статистике в науке о данных. Более углубленно эти темы будут рассмотрены в нашем «Онлайн-курсе по математике в Data Science Pro».

С одной стороны, роль теории вероятностей и статистики в машинном обучении сравнительно невелика: используются лишь базовые понятия, хотя и довольно широко. С другой стороны, разведочный анализ данных, их очистка, подготовка и конструирование новых признаков – это чистая статистика. А поскольку эти операции в прикладной науке о данных (Data Science) занимают 90-95% времени, самый важный раздел математики для Data Scientist’ов – именно статистика. Кстати, это отлично демонстрирует разницу между машинным обучением и наукой о данных.

“Вероятности” классификации

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

Функции сигмоиды с разными параметрами
Функции сигмоиды с разными параметрами

Число p, являющееся результатом сигмоиды, считается “вероятностью” принадлежности результата к одному из классов, а “вероятность” принадлежности к другому классу равна 1-p. Разумеется, это не настоящие вероятности – строго говоря, в данном случае вообще нет смысла говорить о вероятности, ведь результат классификации однозначен. Возможно, в данном случае было бы правильнее называть результат степенью уверенности: например, модель считает, что данный экземпляр принадлежит к классу 1 с уверенностью 74%. Тем не менее, принято называть этот показатель именно вероятностью.

Если классов больше двух, вместо сигмоиды используется Softmax – функция, преобразующая вектор вещественных чисел z размерности N в вектор неотрицательных чисел той же размерности, сумма которых равна 1 (sigma):

σ(z)i=ezi∑k=1Nezk

В результате мы получаем “вероятности” принадлежности к каждому классу, которые можно интерпретировать по-разному. Традиционно результатом классификации считается класс с максимальной “вероятностью”, но ничто не мешает принять какие-то особые меры в тех случаях, когда модель “не уверена” в результате – например, если разница между двумя максимальными “вероятностями” невелика.

Если для классификации используется нейронная сеть, и классов больше двух, последним слоем этой сети практически всегда будет слой Softmax.

Все будет нормально

Нормальное распределение, или распределение Гаусса – это семейство функций плотности распределения вероятности с двумя параметрами: mu (среднее значение, оно же медиана и мода) и sigma (стандартное или среднеквадратическое отклонение). Иногда вместо sigma используется параметр sigma2 – дисперсия нормального распределения:

ϕμ,σ2(x)=1σ2πe−(x−μ)22σ2

График функции плотности нормального распределения похож на колокол. Его центральная координата равна mu, а стандартное отклонение sigma определяет уровень “крутизны” графика: чем оно меньше, чем большая доля значений переменной будет находиться недалеко от центра.

Функции плотности нормального распределения с разными параметрами
Функции плотности нормального распределения с разными параметрами

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

Нормальное распределение настолько важно, что многие методы машинного обучения работают намного лучше, если данные нормально распределены (или даже вообще не работают в противном случае). Поэтому нормализация данных – очень часто выполняемая операция, а для нейронных сетей даже разработан слой пакетной нормализации (batch normalization).

Разведочный анализ данных

Разведочный анализ данных (exploratory data analysis, EDA) – это изучение данных для принятия решений по поводу их применения, очистки, преобразования и конструирования новых признаков. Как сказано выше, EDA – это чистая статистика, и основные цели его первого этапа – понять вид распределения признаков, основные параметры этого распределения, обнаружить выбросы и т.д.

В первую очередь для анализа данных обычно применяются гистограммы и “ящики с усами”. Гистограмма просто разбивает весь диапазон данных на несколько отрезков, и для каждого отрезка выводит количество элементов набора данных, попадающих в этот отрезок. Легко заметить, что гистограмма отдаленно похожа на график функции плотности распределения вероятности, так что по ней очень легко определить, распределен ли признак нормально или имеет какое-то иное распределение. Обычно выводятся гистограммы сразу для нескольких признаков.


“Ящик с усами” не позволяет увидеть общую картину распределения, зато предоставляет ценную информацию о его параметрах, особенно квантилях. Квантиль – это такое значение признака, что заданный процент значений этого признака в наборе данных меньше этого квантиля. Например, квантиль 50% – это такое значение, что половина значений признака меньше, а вторая половина – больше него, этот квантиль называется медианой. Квантили 0%, 25%, 50%, 75% и 100% называются квартилями, поскольку они делят область определения признака на четыре части.

"Ящик с усами" и его параметры. Минимум и максимум не учитывают выбросы (на рисунке не показаны)
“Ящик с усами” и его параметры. Минимум и максимум не учитывают выбросы (на рисунке не показаны)

“Усы” выводятся без учета выбросов (outliers) – значений, больших Q3+1.5*IQR или меньших Q1-1.5*IQR. Принято считать, что выбросы скорее свидетельствуют об ошибках ввода данных, чем о реальных значениях признаков, и с ними надо что-то делать – например, удалить. На нашем рисунке выбросы не показаны, а в реальных “ящиках с усами” они выводятся в виде кружков за пределами “усов”. Все понятия, о которых мы говорили, изучает статистика.

Анализ зависимостей между признаками

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

Попарная диаграмма четырех признаков пингвинов (для трех разных видов, обозначенных цветами). Рисунок взят из документации по Seaborn.
Попарная диаграмма четырех признаков пингвинов (для трех разных видов, обозначенных цветами). Рисунок взят из документации по Seaborn.

Коэффициент корреляции между двумя признаками x и y по набору данных, состоящему из n записей, считается следующим образом (“x с крышкой” и “y с крышкой” – средние значения x и y):

rxy=∑i=1n(xi−x¯)(yi−y¯)∑i=1n(xi−x¯)2∑i=1n(yi−y¯)2

Коэффициент корреляции всегда находится в интервале [-1, 1], и его значение показывает, насколько велика линейная зависимость между признаками. Если его значение близко к 1, то зависимость очень сильна, если к -1, то признаки противоположны друг другу, а если к 0 – совершенно не зависят друг от друга. Для анализа многих признаков сразу обычно выводится матрица корреляции, в которой цвет каждого коэффициента соответствует его значению.

Матрица корреляции для набора данных о "Титанике".
Матрица корреляции для набора данных о “Титанике”.

Например, из матрицы корреляции для набора данных о “Титанике” легко увидеть, что какая-то положительная корреляция есть только между количеством родителей и количеством детей на борту: люди плыли либо парами/в одиночку, либо целыми семьями. Отрицательная корреляция есть между пассажирским классом и ценой проезда (естественно, билеты низших по номеру классов стоили дороже) и между полом и признаком выжившего: мужчины уступали места в шлюпках дамам.

Заключение

Как мы уже говорили, статистика занимает особое место в науке о данных, поскольку все данные собираются и обрабатываются именно методами статистики. Более того, иногда вся работа Data Scientist’а, включая создание и усовершенствование моделей, проводится только для того, чтобы доказать или опровергнуть какую-нибудь статистическую гипотезу! А это значит, что каждый Data Scientist обязан знать статистику на профессиональном уровне – по крайней мере, именно такие требования к ним предъявляют на Западе. Помимо статистики придется освоить основы математического анализа и линейной алгебры, о которых шла речь в первых публикациях нашего небольшого цикла.

***

Если вы хотите наработать необходимую для изучения Data Science математическую базу и подготовиться к углубленным занятиям в «Школе обработки данных» или Computer Science Center, обратите внимание на онлайн-курс «Библиотеки программиста». С помощью опытных преподавателей из МГУ сделать это будет намного проще, чем самостоятельно по книгам. Студенты могут выбрать отдельные разделы (например, линейную алгебру) или оплатить весь курс целиком с существенной скидкой.

17
Фев
2021

∀ Как линейная алгебра используется в машинном обучении?

Математика по праву считается царицей наук, без которой немыслимы все современные компьютерные дисциплины. Рассказываем о самых популярных приложениях линейной алгебры в машинном обучении.

Продолжая серию публикаций к запуску авторского «Онлайн-курса по математике в Data Science Pro», поговорим о применении линейной алгебры в машинном обучении. За примерами далеко ходить не нужно: напротив, очень трудно найти такую сферу машинного обучения, в которой не используется линейная алгебра. Причем не только ее основные методы, вроде операций с векторами и матрицами, но и продвинутые вроде сингулярного разложения матрицы (Singular Value Decomposition, SVD), метода главных компонент (Principal Component Analysis, PCA) и метода опорных векторов (Support Vector Machines, SVM). Последний – один из основных алгоритмов машинного обучения.

Далеко не каждый курс линейной алгебры, даже на математических факультетах, рассматривает все ее приложения в машинном обучении. (То же самое можно сказать и о статистике, которая также является одной из основ Data Science и машинного обучения). Это обусловливает необходимость специальных курсов математики для Data Science.

Основы

Линейная алгебра работает с векторами и матрицами – а точнее, с их линейными комбинациями, также являющимися векторами и матрицами. Математически вектор можно представить набором действительных чисел:

j¯=[a1,a2,…an]∈Rn

Такой набор может представлять очень разные сущности: например, геометрический вектор в некоторой системе координат (при этом числа ai умножаются на векторы базиса), полином (числа ai умножаются на xi) и вообще любую линейную комбинацию каких-либо элементов. Матрица – это такой же набор действительных чисел, но организованный в виде прямоугольника. Матрицу тоже можно представить в виде длинного вектора, если поставить ее столбцы друг на друга.

Q=∥a11a12…a1na21a22…a2n…………am1am2…amn∥∈Rm∗n

Что в машинном обучении можно представить в виде векторов и матриц? Практически всё! Например, одна строка из набора данных – это вектор, каждый элемент которого представляет значение некоторого признака. Весь тренировочный набор данных (или, в случае нейронной сети, один batch из этого набора) – это матрица. Изображение, которое будет распознавать сверточная нейронная сеть – тоже матрица чисел, соответствующих отдельным пикселям. Градиент функции потерь – это вектор, и так далее.

Произведение векторов, умножение матрицы на вектор и произведение матриц – все это используется в машинном обучении. Например, модель линейной регрессии с вектором весов w и вектором признаков x можно записать в виде произведения векторов, если добавить в вектор признаков x[0] = 1:

Mw(x)=w[0]+w[1]×x[1]+w[2]×x[2]+…+w[m]×x[m]=w[0]+∑j=1mw[j]×x[j]=w¯⋅x¯

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

Prediction=A⋅x¯=y~;Loss=L(y~−y)

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

Tθ=∥cos(θ)−sin(θ)sin(θ)cos(θ)∥
Поворот исходного изображения (Original) на 112.5 градусов
Поворот исходного изображения (Original) на 112.5 градусов

Измерения

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

L1=∥x¯∥1:=∑i=1n|xi|;L2=∥x¯∥2:=∑i=1nxi2=x¯⊤x¯
Геометрическое место точек, у которых норма равна единице: <b>L<sub class="cdx-sub">1</sub></b> (слева) и <b>L<sub class="cdx-sub">2</sub></b> (справа)
Геометрическое место точек, у которых норма равна единице: L1 (слева) и L2 (справа)

Норма L2(x-y) – это расстояние между векторами x и y. Обе нормы используются в машинном обучении для регуляризации функции потерь: лассо-регуляризация использует L1, регуляризация ТихоноваL2, а эластичная сеть – и ту, и другую.

Косинус угла между двумя векторами x и y линейная алгебра определяет так:

cos(θ)=x¯⊤y¯∥x∥⋅∥y∥

Эта формула – самый популярный метод оценки сходства двух векторов. Если косинус угла близок к единице, то угол между векторами минимален, то есть векторы направлены почти одинаково. Если он близок к минус единице, векторы направлены почти противоположно. Наконец, если косинус близок к нулю, то векторы перпендикулярны (ортогональны), то есть, совершенно не зависят друг от друга.

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

Разумеется, оценка сходства широко применяется и в моделях кластеризации – например, метод k-Nearest Neighbors размечает кластеры именно по степени сходства элементов друг с другом.

Сингулярное разложение матриц (SVD)

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

A⋅A⊤=I=A⊤⋅AA−1=A⊤

Сингулярное разложение матрицы вводится следующей теоремой линейной алгебры: любую невырожденную прямоугольную матрицу Am*n можно представить в виде произведения трех матриц Um*m, Em*n и Vn*n, где U и V – ортогональные матрицы, а E – прямоугольная матрица, в которой все элементы, кроме диагональных, равны нулю.


Сингулярное разложение широко используется в рекомендательных системах. Оно позволяет найти базисы пространства строк и пространства столбцов, то есть элементарные признаки обоих пространств. Например, если строки матрицы соответствуют читателям, столбцы – книгам, а сама матрица содержит оценки, которые пользователи поставили книгам, то сингулярное разложение матрицы выделит “типичных читателей” и “типичные книги”. Каждого реального читателя и каждую реальную книгу можно представить линейной комбинацией “типичных”, после чего будет достаточно легко рассчитать ожидаемую оценку любой книги любым читателем.

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

Метод главных компонент (PCA)

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

PCA находит проекцию данных (синие точки) на пространство меньшей размерности (линию)
PCA находит проекцию данных (синие точки) на пространство меньшей размерности (линию)

Продемонстрируем работу метода главных компонент на примере двухмерного набора данных, который мы будем проецировать на одномерное подпространство (линию). Метод состоит из нескольких шагов:

  1. Вычитаем среднее значение, чтобы набор данных имел среднее значение 0. Это сокращает риск возникновения числовых проблем.
  2. Стандартизируем. Делим элементы данных на стандартное отклонение sigmad по каждому измерению d. Теперь данные не имеют единиц измерения, а их дисперсия по каждой оси равна 1, что отмечено на рис. в) голубыми стрелками.
  3. Выполняем спектральное разложение матрицы ковариации. Вычисляем матрицу ковариации данных, ее собственные векторы и собственные значения. На рис. г) собственные векторы масштабированы соответствующими собственными значениями (голубые стрелки), и более длинный вектор соответствует подпространству главных компонент. Матрица ковариации данных изображена в виде эллипса.
  4. Проецируем данные в подпространство. Рисунок е) показывает итоговую проекцию, перенесенную в исходное пространство данных.

Из описания метода главных компонент видно, что в нем используются понятия не только линейной алгебры, но и статистики (среднее значение, дисперсия, отклонение, матрица ковариации). Тем не менее, основные операции выполняются методами линейной алгебры, ведь именно она описывает проекции из одного пространства в другое, собственные векторы и собственные значения, а также спектральное разложение матриц.

Метод опорных векторов (SVM)

Один из основных методов построения моделей машинного обучения – это метод опорных векторов (Support Vector Machine). Этот метод основан на построении гиперплоскости, максимально разделяющей объекты разных классов – то есть, обеспечивающей максимальное расстояние между граничными точками. Мы не будем вдаваться в детали его реализации, поскольку они достаточно сложны и выходят за рамки нашей статьи. Метод очень подробно, с примерами кода и анимацией, описан в статье на Хабре, откуда взята следующая иллюстрация:

Иллюстрация метода опорных векторов (опорные векторы отмечены красным цветом)
Иллюстрация метода опорных векторов (опорные векторы отмечены красным цветом)

Метод опорных векторов широко используется для задач бинарной классификации, а также сегментации изображений и многих других задач. Существует множество различных вариаций этого метода, причем он позволяет задать спрямляющее ядро, при правильном выборе которого результирующая модель зачастую оказывается более точной, чем модели на основе нейронных сетей – однако это ядро невозможно подобрать автоматически, так что его выбор представляет собой искусство Data Scientist’а. Метод хорошо работает с данными небольшого объема и с данными, имеющими большое количество признаков.

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

Заключение

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

Надеюсь, что вы по-настоящему любите математику, или, по крайней мере, она вас не пугает.

***

Если вы хотите наработать необходимую для изучения Data Science математическую базу и подготовиться к углубленным занятиям в «Школе обработки данных» или Computer Science Center, обратите внимание на онлайн-курс «Библиотеки программиста». С помощью опытных преподавателей из МГУ сделать это будет намного проще, чем самостоятельно по книгам. Студенты могут выбрать отдельные разделы (например, линейную алгебру) или оплатить весь курс целиком с существенной скидкой.

16
Фев
2021

Можно ли полагаться на sqrt при работе с целыми числами

В математике x == sqrt(x * x)
В C++ есть функция sqrt.
Если мы работает с целыми числами (int,long) можем ли мы быть уверенными, что
i == (int) sqrt(i * i)

Для всего положительного диапазона целых чисел таких, что i * i <= MAX_INTEGER…

15
Фев
2021

📈 Для чего нужен математический анализ в машинном обучении

Математика – одна из основ науки о данных. Сегодня мы разберемся, как методы математического анализа используются в машинном обучении и зачем их осваивать будущему Data Scientist.

Математический анализ – основа всей высшей математики. Он необходим во многих разделах царицы наук: особенно это относится к производным и интегралам. К запуску авторского «Онлайн-курса по математике в Data Science Pro» мы начинаем публикацию серии статей об использовании математических методов в науке о данных. Сегодня рассмотрим несколько самых очевидных применений матанализа в машинном обучении.

Градиентный спуск

Знак производной показывает, возрастает исходная функция (производная положительна) или убывает (отрицательна). Если производная существует и равна нулю, то мы находимся в точке экстремума (минимума или максимума).

Знаки производной в точке экстремума и в ее окрестности
Знаки производной в точке экстремума и в ее окрестности

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

∇L(w1,w2,…wn)=[∂L∂w1,∂L∂w2,…∂L∂wn]

В данном случае L – это функция потерь (Loss) нашей модели машинного обучения, а w1,…wn – внутренние параметры модели, которые должны изменяться в процессе ее обучения (веса). Функция потерь измеряет “качество” модели, она может быть очень разной в зависимости от задачи. Например, для модели, предсказывающей значение одной переменной, это может быть квадрат разности между истинным значением этой переменной и предсказанным.

Нам нужно найти глобальный минимум функции потерь в пространстве весов – то есть, такие значения весов, при которых модель будет оптимальной. Метод градиентного спуска на каждом шагу рассчитывает градиент в данной точке n-мерного пространства весов и переходит в следующую точку, двигаясь по направлению вектора градиента.

Градиентный спуск по поверхности функции потерь
Градиентный спуск по поверхности функции потерь

Идея метода градиентного спуска очень проста: «если идти все время вниз, то когда-нибудь достигнешь дна». Чтобы узнать, в каком направлении находится “низ”, мы и считаем вектор градиента.

Цепное правило и back-propagation

Изучая математический анализ, вы познакомитесь с цепным правилом вычисления производной – это правило вычисления производной сложной функции:


Поскольку все нейронные сети состоят из нескольких слоев, и входом каждого слоя сети, кроме первого, является выход предыдущего слоя, результат работы сети (прямого прохода) – это именно сложная функция, в которой функция активации нейронов каждого слоя выполняется над результатами функции активации предыдущего.

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

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

Такой метод расчета градиента называется обратным распространением ошибки, или просто обратным распространением (back-propagation). Именно этот метод дал старт широкому распространению всех видов нейронных сетей, которые изменили мир. История искусственных нейронных сетей началась еще в 1960-х, но лишь недавно появились вычислительные мощности, позволяющие реализовать обратное распространение.

Плотность распределения вероятности

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

Вероятность в виде интеграла функции плотности распределения
Вероятность в виде интеграла функции плотности распределения

Именно из этой формулы следует знаменитое правило трех сигм – эмпирическое правило, согласно которому 68% значений нормально распределенной случайной величины находятся в пределах одного стандартного отклонения от среднего значения, 95% значений – в пределах двух отклонений, и 99.7% (почти все) – в пределах трех отклонений.

Правило трех сигм
Правило трех сигм

Заключение

Мы привели лишь несколько самых очевидных примеров применения математического анализа в машинном обучении. Менее очевидные встречаются буквально везде! Например, при выборе функции активации слоя нейронов надо учитывать опасность взрывных/исчезающих градиентов, то есть уметь анализировать поведение этой функции.

«Прикладное машинное обучение», в основном, это конструирование признаков.
Эндрю Ын.

Конструирование признаков (feature engineering) – это искусство создания нужных признаков на основе исследовательского анализа данных (exploratory data analysis, EDA). Например, анализ данных может показать квадратичную зависимость целевой переменной от некоторого признака – то есть, можно ввести признак, равный квадратному корню исходного, от которого целевая переменная будет зависеть линейно. Чтобы хотя бы заметить эту квадратичную зависимость, а тем более доказать ее, нужно очень хорошо знать математический анализ.

Поэтому самым правильным ответом на вопрос “для чего в машинном обучении нужен математический анализ”, будет “для всего”. Нет ни одной области машинного обучения (и науки о данных вообще), в которой он бы не применялся.

***

Если вы хотите наработать необходимую для изучения Data Science математическую базу, обратите внимание на онлайн-курс «Библиотеки программиста». С помощью опытных преподавателей из МГУ сделать это будет намного проще, чем самостоятельно по книгам. Студенты могут выбрать отдельные разделы (например, матанализ) или оплатить весь курс целиком с существенной скидкой.

13
Фев
2021

Сумма ряда с заданной точностью

Требует вычислить ряд с заданной точностью: x – x^3/3 + x^5/5 – x^7/7 + …
Программа вычисляет ряд только до первого слагаемого, в чем ошибка и как можно было бы ускорить программу ?
#include <stdio.h>
#include <stdlib.h>
int …

09
Фев
2021

В Java не работает присваивание

Пишу решатель матриц простых дробей методом Жордана-Гаусса. Программа просто зависает на вычислении элемента матрицы с помощью метода прямоугольника, при использовании дебаггера Intalij IDEA бесконечно идёт сбор данных моего объекта, причё…

28
Янв
2021

Определить пересекается ли квадрат с выделенной областью JS

Как определить пересекается ли квадрат с выделенной областью на экране. Пытался сделать через неравенства но шибко много их выходит и все равно не получаю тот результат, какой хотелось бы. Я думаю есть какое-то математическое правило, но в…

20
Янв
2021

Отрисовка картинки повернутой в направлении движения | Graphics | Graphics2D

Надо отрисовать картинку повернутую в направлении движения (поворот должен быть относительно центра картинки):
Пример:
Я знаю скорость по x и y, и положение картинки(x,y), и размер картинки(ширина и высота), а так же размер поля на которо…

17
Янв
2021

Реализация программы на С

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

13
Янв
2021

Как правильно посчитать азимут для поворота карты?

У меня есть карта, которую мне необходимо повернуть.
Делаю поворот я с помощью свойства bearing у Map.
Мне не совсем понятно как правильно делать поворот относительно текущего положения карты, то есть азимут я считаю следующим разом
conste…