Практикум 2.1 Моделирование функции гипотезы в виде однопараметрической линейной регрессии

2.1. Моделирование функции гипотезы в виде однопараметрической линейной регрессии

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

Задачи:

  • 1. Создать набор обучающих данных.
  • 2. Задать начальный параметр модели 0/ для функции гипотезы и построить её
  • о = 0).

3. Построить функцию стоимости:

4. Провести моделирование в OCTAVE/MATLAB, используя алгоритм градиентного спуска, для нахождения оптимального параметра модели. На каждой итерации алгоритма отображать на графике сходимость и получаемые линии регрессии.

ВНИМАНИЕ!

Для выполнения данного практикума необходимо установить систему для математических вычислений Octave. Программу можно скачать на сайте https://www.gnu.org/software/octave/download.html. Также работу можно выполнить, используя пакет MATLAB.

Ход выполнения:

  • 1. В директории ML.Lab-rab/lab2 открыть папку 1аЬ2.1.
  • 2. Создать в папке проекта файл Lab2_l_data.txt и заполнить его обучающими данными, соответствующих Вашей предметной области (чем больше будет данных, тем лучше).
  • 3. Создать в папке проекта файл Lab2_l.m, который будет содержать весь код программы.

Отображение обучающих данных на графике.

Для построения графика, отображающего обучающие данные, необходимо в файле Lab2_l.m написать следующий код:

clear ; close all; clc % Инициализация fprintf('Plotting Data ... ')

data = load('Lab2_l_data.txt'); % Загрузка данных из

файла в переменную data

X = data(:, 1); у = data(:, 2);

m = length(y); % Количество обучающих примеров figure(l); % Открытие нового окна

Задание 1

Графическое отображение результатов

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

Подсказка: plot(x, у, ' гх', ' MarkerSize' 10); - команда

построения графика с использованием красных крестиков, размером 10 пискелей.

Далее запустите проект, введя с консоли Lab2_l, в результате в графическом окне должно появиться изображение, аналогичное рисунку 2.9.

Графическое отображение обучающих данных

Рисунок 2.9 - Графическое отображение обучающих данных

Далее напишите нижеприведенный код в файле Lab2_l.m hold on

theta = 1; %свое значение Xh = 5:0.01:25; hh = theta*Xh; plot(Xh, hh)

В результате в графическом окне должно появиться изображение аналогичное рисунку 2.10

Подобранная гипотеза Построение функции стоимости

Рисунок 2.10 - Подобранная гипотеза Построение функции стоимости

Для построения графика однопараметрической функции стоимости, напишите следующий код в файле Lab2_l.m theta_l = -10:0.01:10;

J_mass =0; % Инициализируем массив значений функции

стоимости

for i = 1 : length(theta_l);

D(i) =l/(2*m)* sum( ( X * theta_l(i) - у) .Л 2); J_mass = [ D_mass ; 3(i) ];

if J(i) == min(;j_mass(2:end, 1)) && D_mass(i)!=0 disp(theta_l(i)) end end

J_mass = 3_mass(2 : end , 1); figure(2);

plot(theta_l, J_mass) hold on

xlabel('Theta_l‘); ylabel('Cost Function'); disp(min(3_mass)

Снова запустите проект и получите результат, аналогичный рисунку 2.11.

График функции стоимости

Рисунок 2.11 - График функции стоимости

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

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

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

Введите в файл Lab2_l.m следующий код, со своими параметрами: iterations = 10; alpha = 0.01;

D_history = zeros(iterations, 1); for iter = 1:iterations

Задание 2

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

После своего кода допишите следующее: hh = theta*Xh; hold on figure(l) hold on plot(Xh, hh)

fprintf(1 Program paused. Press enter to continue. ‘);

pause;

disp(theta)

end

Работа алгоритма градиентного спуска

Рисунок 2.12 - Работа алгоритма градиентного спуска

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

Пример правильного выполнения представлен на рисунке 2.12.

Благодаря функции disp(theta) ,в командной строке Octave будет выводиться значение параметра модели на каждой итерации, как показано на рисунке 2.13.

Изменение параметра модели в

Рисунок 2.13 - Изменение параметра модели в

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ   ОРИГИНАЛ   След >