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

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

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

Задачи:

  • 1. Используя имеющийся обучающий набор из файла Lab2_l_data.txt (практикум 2.1), задать начальные параметры модели в0 ивi для функции гипотезы двухпараметрической линейной регрессии и построить её.
  • 2. Построить функцию стоимости (поверхность J ь в 2)):

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

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

  • 1. В директории ML.Lab-rab/lab2 открытье папку 1аЬ2.2.
  • 2. Копировать файл Lab2_l_data.txt из практикума 2.1 в папку.
  • 3. Создать в папке проекта файл Lab2_2.m, который будет содержать весь код программы.

График функции гипотезы двухпараметрической линейной регрессии Для построения графика, отображающего обучающие данные, необходимо в файле Lab2_2.m написать следующий код: clear; close all; clc

fprintf(1Postroenie obuchaushih dannih... 1) data = loadCLab2_l_data.txt');

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

m = length(y);

figurel();

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

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

Подсказка: plot(x, у, ' bo', ' MarkerSize', 15); - Команда

построения графика с использованием синих кружков размером 15 пискелей.

Запустите проект, введя в консоль Lab2_2, в результате должно получиться, как показано на рисунке 2.14.

Графическое отображение обучающих данных Задание 2. Отображение функции гипотезы на графике

Рисунок 2.14 - Графическое отображение обучающих данных Задание 2. Отображение функции гипотезы на графике.

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

X = [ones(m, 1), data(:,l)];

theta = [-5; 3]; iter = 1500;alpha = 0.001;hold on;

Далее самостоятельно напишите код для построения функции гипотезы двухпараметрической линейной регрессии на графике. Результат выполнения команд показан на рисунке 2.15.

Подобранная гипотеза

Рисунок 2.15 - Подобранная гипотеза

Построение функции стоимости (поверхность J(6 в 2)).

Перед тем как строить поверхность J(#b в2), реализуем алгоритм градиентного спуска.

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

Напишите следующий код в файле Lab2_2.m для инициализации переменных, необходимых для реализации алгоритма градиентного спуска. Значения альфа и количество итераций подберите самостоятельно для вашего набора данных: iter = 1500; alpha = 0.001;

J_history = zeros(iter, 1); theta0_history = zeros(iter,1); thetal_history = zeros(iter,l);

Далее напишите код, реализующий алгоритм градиентного спуска, как показано ниже: for iter = lriter х=Х(:,2);

h=theta(l)+(theta(2)*x); theta0=theta(l)-alpha*(l/m)*sum(h-y); thetal=theta(2)-alpha*(l/m)*sum((h-y). *x); theta=[theta0;thetal];

theta0_history(iter)=theta0; thetal_history(iter)=thetal; predict=X*(theta); sqrErr=(predict-y).л2;

J=l/(2*m)*sum(sqrErr); J_history(iter) = 3; end

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

С помощью данных команд выведем оптимальные значения параметров в 1 и в2, а также минимальное значение функции стоимости: fprintf(1 Founded parameters: '); fprintf('%f %f ’, theta(l), theta(2)); fprintf(1 Founded min cost function: '); fprintf('%f 1,min(J_history));

Далее самостоятельно постройте функцию стоимости с найденными оптимальными параметрами вх и в2.

Задание 4. Построение функции стоимости (поверхность J(0b 02)). Напишите следующие команды в файле Lab2_2.m для построения поверхности J(0i, 02):

theta0_vals = linspace(-10, 10, 100); thetal_vals = linspace(-l, 4, 100);

J_vals = zeros(length(theta0_vals), length(thetal_vals)); for i = 1:length(theta0_vals)

for j = 1:length(thetal_vals) t = [theta0_vals(i); thetal_vals(j)];

predict=X*(t); sqrErr=(predict-y).Л2;

J=l/(2*m)*sum(sqrErr); l_vals(i,j) = 3; end

end

J_vals = D_vals'; figure;

surf(theta0_vals, thetal_vals, l_vals) xlabel(' heta_01); ylabel(' heta_l1); zlabel('J( heta_0j heta_l)');

В результате в новом окне должна появиться поверхность J(0b в2), как показано на рисунке 2.16.

Графическое отображение функции стоимости J(#i, в)

Рисунок 2.16. - Графическое отображение функции стоимости J(#i, в2)

Построение изолиний на графике

Для построения изолиний получившейся поверхности J(0b в2) введите следующие команды:

figure; contour(theta0_vals, thetal_vals, J_vals, logspace(-2, 3, 20))

xlabel(' heta_0'); ylabel(' heta_l'); hold on;

Результат выполнения данных команд показан на рисунке 2.17.

Изолинии поверхности J(#i, в)

Рисунок 2.17 - Изолинии поверхности J(#i, в2)

Задание 5. Алгоритм перехода по изолиниям

Введите следующие команды для реализации алгоритма перехода по изолиниям к их центру: for i = 1:100

plot(theta0_history(i), thetal_history(i), 1 rx', 'MarkerSize', 10, 'LineWidth', 2); hold on end

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

Отображение перехода по изолиниям

Рисунок 2.18 - Отображение перехода по изолиниям

Задание 6. Построение найденных функций гипотез Используя цикл for самостоятельно реализуйте отображение на графике с обучающими примерами всех гипотез с параметрами, найденными при реализации алгоритма градиентного спуска. Пример отображения всех гипотез представлен на рисунке 2.19 (представлено 100 гипотез):

Отображение найденных гипотез

Рисунок 2.19 - Отображение найденных гипотез

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