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

Так вы сможете лучше понять, как работает линейная регрессия

Хотя использование Excel / Google Sheet для решения реальной проблемы с алгоритмами машинного обучения может быть плохой идеей, реализация алгоритма с нуля с помощью простых формул и простого набора данных очень полезна. чтобы понять, как работает алгоритм. После того, как я проделал это почти для всех распространенных алгоритмов, включая нейронную сеть, это мне очень помогает.

В этой статье я расскажу, как я реализовал простую линейную регрессию с градиентным спуском. Вы можете использовать ссылку Простая линейная регрессия с градиентным спуском, чтобы получить файл Excel / Google Sheet.

А теперь пачкаем руки!

Использование простого набора данных

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

Создание линейной модели

В Google Sheet или Excel вы можете добавить линию тренда. Итак, вы получите результат линейной регрессии.

Но если вы хотите использовать модель для прогнозирования, тогда необходимо реализовать модель, и в этом случае модель довольно проста: для каждого нового наблюдения x мы можем просто создать формулу: y = a * x + б. Где a и b — параметры модели.

Функция стоимости модели

Как мы можем получить параметры a и b? Что ж, оптимальные значения для a и b — это те, которые минимизируют функцию стоимости, которая является квадратом ошибки модели. Таким образом, для каждой точки данных мы можем вычислить квадратичную ошибку.

Квадратная ошибка = (прогнозируемое действительное значение) ² = (a * x + b-действительное значение) ²

Чтобы найти минимум функции стоимости, мы используем алгоритм градиентного спуска.

Простой градиентный спуск

Перед реализацией градиентного спуска для линейной регрессии мы можем сначала сделать это для простой функции: (x-2) ^ 2.

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

  • Сначала мы случайным образом выбираем начальное значение.
  • Затем для каждого шага мы вычисляем значение производной функции df (для этого значения x): df (x)
  • И следующее значение x получается путем вычитания значения производной, умноженного на размер шага: x = x — step_size * df (x)

Вы можете изменить два параметра градиентного спуска: начальное значение x и размер шага.

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

Градиентный спуск для линейной регрессии

Принцип алгоритма градиентного спуска тот же, что и для линейной регрессии: мы должны вычислить частные производные функции стоимости по параметрам a и b. Обозначим их как da и db.

Квадратная ошибка = (прогнозируемое действительное значение) ² = (a * x + b-действительное значение) ²

da = 2 (a * x + b-действительное значение) * x

db = 2 (a * x + b-действительное значение)

На следующем графике вы можете увидеть, как a и b сходятся к целевому значению.

На практике у нас есть много наблюдений, и это нужно делать для каждой точки данных. Вот тут-то и сходят с ума в Google Sheet. Итак, мы используем всего 10 точек данных.

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

Если вы откроете Google Sheet, вы можете поиграть, изменив параметры градиентного спуска: начальные значения a и b и размер шага. Наслаждаться!

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

Лазаренко Виктория Сергеевна студент, Ставропольский государственный педагогический институт, РФ, г. Ставрополь Кузина Наталья николаевна научный руководитель, Старший преподаватель кафедры математики и информатики, Ставропольский государственный педагогический институт, РФ, г. Ставрополь

« РЕАЛИЗАЦИЯ МНОГОМЕРНЫХ ЗАДАЧ ОПТИМИЗАЦИИ В excel» Аннотация: В статье рассмотрены основные методы многомерной оптимизации, ПРИВЕДЁН ПРИМЕР РЕАЛИЗАЦИИ ЗАДАЧИ БЕЗУСЛОВНОЙ ОПТИМИЗАЦИИ (МЕТОДА ПОКООРДИНАТНОГО СПУСКА) В среде Excel. КЛЮЧЕВЫЕ СЛОВА: многомерная оптимизация, условная оптимизация, БЕЗУСЛОВНАЯ ОПТИМИЗАЦИЯ.

Введение

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

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

Численные методы многомерной оптимизации

Численные методы оптимизации различаются по характеру изменения целевой функции: если нет никаких ограничений ни на изменение независимых переменных, ни на значения целевой функции, то это методы безусловной оптимизации. Сущность методов безусловной оптимизации состоит в поиске минимуму функции Y = Dх) путем многократных вычислений, при различных значениях параметров х = {xk}, k = 0, 1, 2, …, причем на каждом k-м шаге вычислений контролируют выполнение условий. При наличии каких-либо ограничений используются методы условной оптимизации. Задача условной оптимизации заключается в поиске минимального или максимального значения скалярной функции f(x) n-мерного векторного аргументах. Решение задачи основывается на линейной или квадратичной аппроксимации целевой функции для определения приращений x1, …,xn на каждой итерации.

Кроме того, методы многомерной оптимизации классифицируются по возможности использования частных производных от целевой функции: если производные не используются, то это — методы прямого поиска,основанные на вычислении только значений целевой функции; градиентные методы, в которых используются точные значения первых производных функции.

Существуют различные методы безусловной и условной оптимизации:

Безусловная оптимизация: Метод покоординатного спуска;

Безусловная оптимизация: метод наискорейшего спуска;

Безусловная оптимизация: подпрограмма EXCEL “Поиск решения”;

Условная оптимизация: метод штрафных функций;

Условная оптимизация: подпрограмма EXCEL “Поиск решения”;

Условная оптимизация: линейное программирование.

Рассмотрим наиболее подробно безусловную оптимизацию, её методы и реализацию примера в Excel.

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

а) формулу целевой функции f(X1,X2, … , Xn),

б) Е — точность нахождения значений независимых переменных, при которых функция достигает минимума,

в) начальные приближения X10,X20 … , Xn0.

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

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

Условие задачи: число независимых переменных равняется двум. Ограничения отсутствуют. Требуется найти минимум функции

u = (X2-X12)2+ (1-X1)2

из начальной точки (0,5;0,5) c точностью 0,0001. Проанализировав функцию, заметим, что она будет иметь минимум, равный нулю. Для чего и первое, и второе слагаемое тоже должны быть равны нулю. Откуда координаты точки минимума (1;1).

Решим эту задачу на EXCEL. Откроем новый рабочий лист, где столбец А -значения X1, столбец В — значения X2, а столбец С — значения целевой функции и, наконец, столбец D — значения погрешности D.

Занесем в ячейки А3 и В3 значения начальных приближений, равных 0,5 и в ячейку С3 формулу =(В3-А3^2)^2+(1-A3)^2. Скопируем эту формулу в блок ячеек С4:С17. На этом заканчивается подготовительный этап.

Опишем первую итерацию пошагово:

1 шаг. Скопируем содержимое ячейки В3 в ячейку В4. Сделаем текущей ячейку С4. Процесс одномерной оптимизации для нахождения X1выполним с помощью подпрограммы EXCEL Поиск решения. Вызовем эту подпрограмму командой меню Сервис- Поиск решения.

2 шаг. Скопируем содержимое ячейки А4 в ячейку А5. Сделаем текущей ячейку С5. Дадим команду меню Сервис- Поиск решения. В открывшемся диалоге в поле Установить целевую ячейку занесем адрес С5, а в поле Изменяя ячейки — адрес В5. В результате в ячейке В5 получим числовое значение, при котором целевая функция достигает минимального значения в ячейке С5 по координате X2.

3 шаг. Занесем в ячейку D5 формулу =ABS(A3-A5)+ABS(B3-B5) для вычисления погрешности решения на первом шаге. На этом заканчивается первая итерация.

Вторая и все последующие итерации проводятся аналогично, но с учетом соответствующих адресов ячеек.

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

Реализация метода покоординатного спуска представлена в Excel на рисунке 1.

Рисунок 1. Метод покоординатного спуска

Заключение

Сегодня оптимизационные задачи и задачи принятия решений моделируются и решаются в самых различных областях техники [1]. К навыкам математического обоснования принятия решений относятся навыки математического моделирования оптимизационных задач, выбора адекватного математического обеспечения (метода, алгоритма, программной системы) с необходимым обоснованием.

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

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

Список литературы

1. Корнеенко В. П. Методы оптимизации: Учебник / В. П. Корнеенко. — М.: Высш. шк., 2007.

2. Пантелеев А. В. Методы оптимизации в примерах и задачах: Учеб. пособие / А. В. Пантелеев, Т. А. Летова. — М.: Высш. шк., 2005.

3. Батищев Д. И. Оптимизация в САПР: Учебник / Д. И. Батищев, Я. Е. Львович, В. Н. Фролов. — Воронеж: Изд-во ВГУ, 1997.

Искусственный интеллект использует excel и python для достижения градиентного спуска унарных и двоичных функций

    • Резюме и сравнение метода градиентного спуска и метода Ньютона
      • Один, метод градиентного спуска
      • 1. Метод пакетного градиентного спуска
      • 2. Метод стохастического градиентного спуска.
      • 3. Сравнение стохастического градиентного спуска и градиентного спуска.
      • 2. Метод Ньютона.
      • 3. Сравнение метода Ньютона и метода градиентного спуска.
    • Унарная функция градиентного спуска
    • Бинарная функция градиентного спуска
    • 1. Реализуйте с помощью excel
    • 2. Реализуйте с помощью кода Python
      • Импортируйте необходимые библиотечные функции
      • f2 — исходная функция; hx1 — частная производная от x1; hx2 — частная производная от x2.
      • Создать случайную матрицу для облегчения рисования
      • Установите начальное значение на x1 = 1 x2 = 2 Установите точность итерации на 0,1. Инициализируйте количество итераций на 0.
      • Видимый: результаты, полученные с помощью кода python, точно такие же, как и результаты, полученные с помощью excel.

Резюме и сравнение метода градиентного спуска и метода Ньютона

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

Обычно используются методы оптимизации: метод градиентного спуска, метод Ньютона, метод квазиньютона и др. Суть этих методов оптимизации заключается в обновлении параметров.

Один, метод градиентного спуска

0, идея градиентного спуска

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

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

1. Метод пакетного градиентного спуска


2. Метод стохастического градиентного спуска.

3. Сравнение стохастического градиентного спуска и градиентного спуска.

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

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

Стохастический градиентный спуск: 1. Оптимизация функции потерь для каждой выборки. Функция потерь, полученная на каждой итерации, каждый раз не приближается к глобальному оптимуму, а обычно приближается к глобальному оптимуму, и конечный результат часто близок к оптимальному решению.

2. Когда целевая функция выпуклая, результатом должно быть глобальное оптимальное решение.

3. Подходит для обучения на больших выборках.

Небольшой пакетный градиентный спуск

Объедините два вышеуказанных метода. Каждый раз небольшая часть данных используется для обновления параметров итерации. То есть выборка находится между 1 и m.

2. Метод Ньютона.

Прежде всего, метод Ньютона — это метод нахождения значения независимой переменной, когда значение функции равно 0.

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

Итерационный процесс состоит в том, чтобы найти касательную функции в текущей позиции x0 и точку x1 пересечения касательной и оси x в качестве нового x0, повторять этот процесс до тех пор, пока точка пересечения не совпадет с нулевой точкой функции. Значение параметра в это время является значением параметра, при котором целевая функция получает экстремальное значение.

Итерационный процесс выглядит следующим образом:

Итерационная формула выглядит следующим образом:

Когда θ — вектор, метод Ньютона может быть выражен следующей формулой:

где H называется матрицей Гессе, которая фактически является второй производной целевой функции по параметру θ.

3. Сравнение метода Ньютона и метода градиентного спуска.

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

Скорость сходимости очень высокая.

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

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

2. Метод градиентного спуска: это параметр, при котором минимальное значение целевой функции напрямую решается через направление градиента и длину шага.

Чем ближе к оптимальному значению, тем размер шага следует постоянно уменьшать, иначе он будет колебаться около оптимального значения.

Унарная функция градиентного спуска

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import math
from mpl_toolkits.mplot3d import Axes3D
import warnings

"""
 Найдите точку минимума для текущего одномерного исходного изображения:
 1. Возьмите случайную точку (абсцисса - x) и установите значение параметра alpha.  
 2. Найдите производную этой точки x = x-α * (dY / dx).  
 3. Повторите второй шаг и установите итерацию y меньше, чем то, насколько изменение не приведет к продолжению итерации.
"""
# Производная
def h1(x):
    return 0.5 * 2 * (x-0.25)
X = np.arange(-4,4,0.05)
Y = np.array(list(map(lambda t: f1(t),X)))
Y

 
x = 4
alpha = 0.5
f_change = f1(x) # y изменение
iter_num = 0 # Количество итераций
GD_X = [x] # Сохраните точки, полученные при градиентном спуске
GD_Y = [f1(x)]
 
while(f_change > 1e-10) and iter_num<100:
    tmp = x - alpha * h1(x)
    f_change =  np.abs(f1(x) - f1(tmp))
    x = tmp
    GD_X.append(x)
    GD_Y.append(f1(x))
    iter_num += 1
    
print(u«Окончательный результат: (% .5f,%. 5f)»%(x,f1(x)))
print(u«Значение X во время итерации, количество итераций:% d» % iter_num)
print(GD_X)
 
%matplotlib inline
plt.figure(facecolor='w')
plt.plot(X,Y,'r-',linewidth=2) # Третий параметр - это цвет и форма, красный круг - это ро-, красная прямая линия - р-
plt.plot(GD_X, GD_Y, 'bo-', linewidth=2)
plt.title(u'Функция $ y = 0,5 * (x-0,25) ^ 2 $;  nОбучение% .3f; Окончательное решение: (% .3f,%. 3f), количество итераций:% d'%(alpha,x,f1(x),iter_num))

Бинарная функция градиентного спуска

1. Реализуйте с помощью excel


2. Реализуйте с помощью кода Python

Импортируйте необходимые библиотечные функции

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import math
from mpl_toolkits.mplot3d import Axes3D
import warnings

f2 — исходная функция; hx1 — частная производная от x1; hx2 — частная производная от x2.

def f2(x, y):
    return 41.5*x-0.3*y+65.3
## Частичная функция
def hx1(x, y):
    return 41.5
def hx2(x, y):
    return 0.3

Создать случайную матрицу для облегчения рисования

X1 = np.arange(-4,4,0.2)
X2 = np.arange(-4,4,0.2)

X1, X2 = np.meshgrid(X1, X2) # Сгенерировать xv, yv, превратить X1 и X2 в матрицы размером n * m для облегчения последующего рисования
Y = np.array(list(map(lambda t : f2(t[0],t[1]),zip(X1.flatten(),X2.flatten()))))
Y.shape = X1.shape Изображение Y # 1600 восстановлено до исходного (40,40)

Установите начальное значение на x1 = 1 x2 = 2 Установите точность итерации на 0,1 Инициализируйте количество итераций на 0

x1 = 1
x2 = 1
alpha = 0.1
# Сохраняем точки, пройденные градиентным спуском
GD_X1 = [x1]
GD_X2 = [x2]
GD_Y = [f2(x1,x2)]
# Определить изменение y и количество итераций
y_change = f2(x1,x2)
iter_num = 0
while(y_change > 1e-10 and iter_num < 100) :
    tmp_x1 = x1 - alpha * hx1(x1,x2)
    tmp_x2 = x2 - alpha * hx2(x1,x2)
    tmp_y = f2(tmp_x1,tmp_x2)
    
    f_change = np.absolute(tmp_y - f2(x1,x2))
    x1 = tmp_x1
    x2 = tmp_x2
    GD_X1.append(x1)
    GD_X2.append(x2)
    GD_Y.append(tmp_y)
    iter_num += 1
print(u«Конечный результат: (% .5f,% .5f,% .5f)» % (x1, x2, f2(x1,x2)))
print(u«Значение X во время итерации, количество итераций:% d» % iter_num)
print(GD_X1)
Окончательный результат: (-414.00000, -2.00000, -17115.10000)
 Значение X на итерации, количество итераций: 100
[1, -3.1500000000000004, -7.300000000000001, -11.450000000000001, -15.600000000000001, -19.75, -23.9, -28.049999999999997, -32.199999999999996, -36.349999999999994, -40.49999999999999, -44.64999999999999, -48.79999999999999, -52.94999999999999, -57.09999999999999, -61.249999999999986, -65.39999999999999, -69.55, -73.7, -77.85000000000001, -82.00000000000001, -86.15000000000002, -90.30000000000003, -94.45000000000003, -98.60000000000004, -102.75000000000004, -106.90000000000005, -111.05000000000005, -115.20000000000006, -119.35000000000007, -123.50000000000007, -127.65000000000008, -131.80000000000007, -135.95000000000007, -140.10000000000008, -144.25000000000009, -148.4000000000001, -152.5500000000001, -156.7000000000001, -160.8500000000001, -165.0000000000001, -169.15000000000012, -173.30000000000013, -177.45000000000013, -181.60000000000014, -185.75000000000014, -189.90000000000015, -194.05000000000015, -198.20000000000016, -202.35000000000016, -206.50000000000017, -210.65000000000018, -214.80000000000018, -218.9500000000002, -223.1000000000002, -227.2500000000002, -231.4000000000002, -235.5500000000002, -239.70000000000022, -243.85000000000022, -248.00000000000023, -252.15000000000023, -256.30000000000024, -260.4500000000002, -264.6000000000002, -268.75000000000017, -272.90000000000015, -277.0500000000001, -281.2000000000001, -285.3500000000001, -289.50000000000006, -293.65000000000003, -297.8, -301.95, -306.09999999999997, -310.24999999999994, -314.3999999999999, -318.5499999999999, -322.6999999999999, -326.84999999999985, -330.99999999999983, -335.1499999999998, -339.2999999999998, -343.44999999999976, -347.59999999999974, -351.7499999999997, -355.8999999999997, -360.04999999999967, -364.19999999999965, -368.3499999999996, -372.4999999999996, -376.6499999999996, -380.79999999999956, -384.94999999999953, -389.0999999999995, -393.2499999999995, -397.39999999999947, -401.54999999999944, -405.6999999999994, -409.8499999999994, -413.9999999999994]

Видимый: результаты, полученные с помощью кода python, точно такие же, как и результаты, полученные с помощью excel.

# Рисование
fig = plt.figure(facecolor='w',figsize=(20,18))
ax = Axes3D(fig)
ax.plot_surface(X1,X2,Y,rstride=1,cstride=1,cmap=plt.cm.jet)
ax.plot(GD_X1,GD_X2,GD_Y,'ko-')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
ax.set_title(u'$ y = x1^2+2(x2)^2 - 4(x1)-2(x1) (x2) $')
ax.set_title(u'Функция;  n Скорость обучения:% .3f; Окончательное решение: (% .3f,% .3f,% .3f); Количество итераций:% d' % (alpha, x1, x2, f2(x1,x2), iter_num))
plt.show()

Понравилась статья? Поделить с друзьями:
  • Градиентная шкала в excel
  • Градиентная заливка таблицы в excel
  • Градиентная заливка в excel это
  • Градиентная заливка в excel в зависимости от значения
  • Градиент от зеленого к красному excel