Логистическая регрессия
Логистическая регрессия — это статистический подход, используемый для моделирования вероятности определенного бинарного события, такого как «годен/не годен». Эта форма является основным принципом, который позже будет использоваться в распознавании изображений и других задачах классификации. Для классификации существует фактор точности, в отличие от регрессии, которая является всего лишь приближением. Логистическая регрессия используется для аппроксимации экспоненциального роста или экспоненциального затухания.
Сначала мы начнем наш пример с импорта всего нашего импорта.
В этом примере я буду заполнять список значениями, которые экспоненциально растут в течение двух периодов времени. Я использую формулу, но она также будет работать со случайными значениями, хотя ваш конечный результат не будет таким точным. Мы будем задавать вопрос, сколько времени потребуется, чтобы наша функция удвоилась?
Эта модель растет экспоненциально, однако с помощью некоторых манипуляций мы можем сделать ее линейной.
Результат очень похож на y=mx+b. Это означает, что мы можем использовать линейную регрессию.
Мы берем данные и вычисляем журнал каждого значения, мы устанавливаем список равным y. После того, как точки нанесены на график, появляется четкая линейная корреляция.
Поскольку значения по оси x настолько велики, наша оценка будет ошибочной, поэтому мы должны сначала центрировать значения x. Мы можем сделать это, вычитая среднее
Теперь модель должна быть создана
Последовательная модель подходит только для простого набора слоев, где каждый слой имеет ровно один входной тензор и один выходной тензор.
Входная форма — это кортеж целых чисел формы, который не включает размер пакета, поскольку наш ввод равен единице, что указывает на то, что ожидаемый ввод будет пакетом одномерных векторов.
Плотный слой — это обычная функция активации нейронной сети с весами и смещениями, это наиболее часто используемый слой.
Мы передаем 1 в наш плотный слой, потому что его 1 размерность выходного пространства
Мы также можем получить некоторую важную информацию из нашей модели, которая будет очень полезна, когда мы столкнемся с ошибками позже с моделью.
Затем модель компилируется для оптимизатора, который я использую SGD (стохастический градиентный спуск). Единственная причина, по которой мы используем SGD, заключается в том, чтобы просто формализовать всех с помощью разных оптимизаторов. Адам немного новее и пытается оптимизировать SGD. Однако при определенных обстоятельствах Адаму не удалось прийти к оптимальному решению, и он был преформирован SGD. Два параметра, которые мы передаем, — это скорость обучения и импульс.
Для функции потерь мы просто используем среднеквадратичную ошибку.
Функция планировщика скорости обучения принимает другую функцию с параметрами числа эпох и скорости обучения. Эпоха представляет собой количество раз, когда все обучающие векторы используются для обновления весов и смещений. Функция расписания очень полезна для более сложных ситуаций, например, для n числа эпох изменить скорость обучения на m.
Для каждой эпохи этот обратный вызов получает обновленное значение скорости обучения от функции планировщика. Затем текущая эпоха и скорость обучения применяются к скорости обучения оптимизатора. Количество эпох не имеет большого значения: чем больше эпох, тем больше будут обновляться ваши веса и тем больше времени потребуется вашей модели, чтобы соответствовать вашим данным.
Наши потери за итерацию сходятся, и это здорово, иначе нам пришлось бы проводить некоторую отладку.
get_weights возвращает веса слоев списка numpy. Итак, для наших целей он возвращает матрицу один за другим и вектор длины 1.
Таким образом, r или 0,49995455 — это наклон нашего линейного уравнения. Теперь нам нужно найти разницу между нашей первоначальной функцией целесообразного роста и нашей удвоенной функцией целесообразного роста. Так как мы хотим знать, сколько времени потребуется, чтобы удвоиться.
Однако наши значения были рассчитаны по нашей линейной формуле, поэтому скорость log r уже рассчитана.
Таким образом, время, необходимое этой функции для удвоения, составляет 2,000181810692627 единиц. Фактический ответ равен 2, поэтому ошибка составляет % 0,090905.
https://colab.research.google.com/drive/1S505dLc6hfVtYAqJTTh2xDRIUxLi8YzZ?usp=sharing