Всех с наступающим Новым годом и Рождеством!!

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

Если есть какие-либо вопросы, не стесняйтесь обращаться ко мне в любое время.

Ранее я опубликовал статью в этом блоге, объясняющую теорию градиентного спуска. Не стесняйтесь проверить это здесь.

Давай начнем.

Резюме…

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

В нашем объяснении мы используем данные домов для демонстрации градиентного спуска. Эти данные были загружены с kaggle и извлечены на локальный ПК, загружены обратно на диск, а затем использованы в совместной работе Google. Ссылка на набор данных здесь

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

  • NumPy — Статистический и математический пакет
  • Matplotlib — графический пакет, в основном используемый для построения графиков и визуальных представлений.
  • Pandas — это пакет для обработки данных с полезными функциями.

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

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

Цена : цена дома (целое число)

Площадь: площадь дома (целое число)

Спальни: количество спален в доме (целое число)

Ванные комнаты: количество ванных комнат в доме (целое число)

Главная дорога : Если это была главная дорога, минуйте дом (логическое значение)

Комната для гостей: если в доме была отдельная комната для гостей (логическое значение)

Подвал: если в доме есть подвал (логическое значение)

Горячая вода: если установлена ​​система горячего водоснабжения (логическое значение)

Кондиционер: если была установлена ​​система кондиционирования воздуха (логическое значение)

Парковка: если в доме есть парковочные места (логическое значение)

Меблировка: был ли дом полностью меблирован или нет (логическое значение)

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

#разделение данных

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

Глядя на фрагмент кода выше, мы выбираем два столбца из набора данных площадь и спальни в качестве признаков для нашего прогноза. После сохранения его в переменной X мы пытаемся понять форму и тип, а также преобразовать его в число с плавающей запятой (причина этого будет объяснена позже). Точно так же мы делаем то же самое с переменной Y и выбираем столбец price в качестве целевой переменной.

Примечание: видно, что массив, который мы получаем в X, является двумерным массивом, поскольку мы используем 2 столбца, если мы выбрали N столбцов, он становится N-мерным массивом.

Поскольку этот проект просто показывает, как работает градиентный спуск, мы не реализуем какую-либо модель, а скорее нормализуем значения. Когда-нибудь в другой статье я подробно расскажу, почему мы нормализуем, но сейчас это сделано, потому что, если мы посмотрим на площадь и столбец спальни, столбец площади почти в 1000 раз больше, чем спальни. Это создает своего рода несоответствие, и, следовательно, мы нормализуем функции.

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

Затем мы определяем две функции: cost и градиентный спуск. Мы определяем эти две функции, поскольку они являются ключевыми игроками в нашем проекте, которые помогут нам понять градиентный спуск. Если вы посмотрите внимательно, то увидите, что буквально те же самые уравнения стоимости написаны на функциях, чтобы мы могли понять и построить это правильно.

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

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

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

Надеюсь, это помогло.

Вот ссылка на совместную работу.

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

Сценарист: Рохит Санджай (проповедник искусственного интеллекта)

Подпишитесь на наш блог: Блог AIPlus