Введение в технологии искусственного интеллекта

Введение в технологии искусственного интеллекта

Задание 1. Базовые функции.

A1. В этой части упражнения Вам надо установить в качестве текущей ту директорию, в которой находятся файлы лабораторной работы №1. Для этого используйте командами pwd и cd.

A2. Создайте и выведите на экран единичную матрицу A размером 5х5.

№ пп. Задание Ответ
A1 Установите в качестве текущей ту директорию, в которой находятся файлы лабораторной работы №1. Для этого используйте команды pwd и cd. pwd; cd ‘C:\Octave\ex1’;
A2 Создайте и выведите на экран единичную матрицу A размером 5х5 A=eye(5)

 

Задание 2. Вывод диаграмм

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

Файл dan1_1.txt содержит набор данных для первой задачи по линейной регрессии. Первый столбец - это население города, а второй столбец - это прибыль грузовика с едой в этом городе. Отрицательное значение прибыли указывает на убыток.

 

№ пп. Задание Ответ
B1 Установите в качестве текущей ту директорию, в которой находятся файлы лабораторной работы №1. Для этого используйте команды pwd и cd. pwd; cd ‘C:\Octave\pt1’;
B2 Загрузите данные из файла dan1_1.txt: Вектора X(1 столбец) и y(2 столбец), Переменная m(размер тренировочного набора) data= load(‘dan1_1.txt’); x = data(:,1); y = data(:,2); m = length(y);
B3 Выведите на экран диаграмму тренировочных данных. figure; plot (x, y, ‘rx’, ‘MarkerSize’, 10);
B4 Добавьте на диаграмму вывод подписей вдоль осей Х: ‘10000 people’ и Y: ‘Profit in 10000 USD’ ylabel (‘Profit in 10000 USD’); xlabel (‘10000 people’);
B5 Сделайте бизнес-выводы по полученной диаграмме.  

 

Задание 3. Функция стоимости и градиентный спуск

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

Цель применения линейной регрессии - минимизировать функцию затрат (то есть найти самое выгодное бизнес-решение), математическая модель которой приведена ниже:

где гипотеза h (x) задается линейной моделью

Напомним, что для этой модели параметрами являются значения Өj. Это значения, которые вы должны изменить так, чтобы минимизировать затраты J(Ө). Один из способов сделать это - использовать алгоритм пакетного (многосерийного) градиентного спуска. При пакетном градиентном спуске каждая итерация обновления вычисляется как

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

Примечание по реализации: Мы храним каждый пример как строку в матрице X в Octave / MATLAB. Чтобы учесть параметр (Ө0), мы добавляем дополнительный первый столбец к X и устанавливаем всем его элементам значение единицы. Это позволяет нам рассматривать Ө0 как просто еще одну «особенность» математической модели.

 

В следующих строках кода Octave мы добавляем еще одно измерение к нашим данным, чтобы учесть параметр Ө0. А также инициализируем начальные параметры равными 0 и скорость обучения альфа равной 0,01.

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

Ваша следующая задача - завершить код в файле computeCost.m, который представляет собой функцию, вычисляющую J (Ө). При этом помните, что переменные X и y не являются скалярными значениями, так как являются матрицами (векторами), строки которых являются примерами из обучающего набора.

После того, как вы завершили функцию, следующий шаг в ex1_1.m запустит computeCost один раз, используя инициализацию нуля, и вы увидите стоимость, выведенную на экран (для контроля – должно получиться значение = 32,07).

Наконец, Вы должны реализовать градиентный спуск в функции, находящейся в файле gradientDescent.m. Структура цикла уже написана, Вы можете ее использовать.

В процессе программирования убедитесь, что вы пытаетесь оптимизировать и что обновляется. Имейте в виду, что стоимость J(Ө) параметризуется вектором, а не X и y. То есть мы минимизируем значение J(Ө), изменяя значения вектора Ө, а не изменяя X или y. Обратитесь к уравнениям в этом раздаточном материале и к материалам лекций, если вы не уверены в своих решениях.

Хороший способ проверить, что градиентный спуск работает правильно, - посмотреть на значение J(Ө) и убедиться, что оно соответствует каждому шагу. Исполнение кода функции gradientDescent.m вызывает функцию computeCost на каждой итерации и выводит значение стоимости. Предполагая, что вы реализовали градиентный спуск и функцию computeCost правильно, ваше значение J(θ) никогда не должно увеличиваться и должно сходиться к постоянному значению в конце алгоритма.

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

 

Полученные Вами оптимизированные значения Ө также будут использоваться для прогнозирования прибыли в городах с численностью жителей от 35 000 до 70 000 человек. Обратите внимание на то, что в следующих строках ex1_1.m используется матричное умножение, а не явное суммирование или цикл для вычисления прогнозов. Это пример векторизации кода в Octave / MATLAB:

Есть некоторые вещи, о которых следует помнить при реализации градиентного спуска:

· Индексация элементов массивов в Octave / MATLAB начинаются с единицы, а не с нуля. Если вы сохраняете θ0 и θ1 в векторе под названием theta, значениями будут theta(1) и theta(2).

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

· По умолчанию Octave / MATLAB интерпретируют математические операторы как матричные операторы. Это частый источник ошибок несовместимости размеров. Если Вы не хотите применения матричного умножения, вам нужно добавить точку после имени матрицы или матричного выражения ("точечную" нотацию), чтобы указать это Octave / MATLAB. Например, выражение A * B выполняется как матричное умножение, в то время как выражение A. * B (после A - точка) выполняется как поэлементное умножение.

 

Задание 4. Визуализация J

Чтобы лучше понять функцию стоимости J(θ), Вам надо построить график стоимости на 2-мерной сетке значений параметров θ0 и θ1. Вам не нужно ничего кодировать нового для этой части упражнения, но вы должны понимать, что код, который Вы написали, уже создает эти изображения.

На следующем этапе ex1_1.m выполняет код для вычисления J(θ) по сетке значений параметров с использованием написанной Вами функции computeCost.

После выполнения этих строк у вас будет двумерный массив значений J(θ). Затем скрипт ex1_1.m будет использовать эти значения для создания поверхностной и контурной диаграмм (графиков) J (θ) с использованием команд “surf” и “contour”. Графики параметров должны выглядеть наподобие тех, что показаны на рисунке 3:

Целью построения этих графиков (диаграмм) является желание показать Вам, как J(θ) изменяется в зависимости от изменения θ0 и θ1. Функция стоимости J(θ) имеет форму чаши и имеет глобальный минимум (это легче увидеть на контурном графике, чем на участке трехмерной поверхности). Этот минимум является оптимальной точкой для θ0 и θ1, и каждый шаг градиентного спуска приближает нас к этой точке.

А теперь вы должны представить тексты своих программ преподавателю.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: