Исследование работы L2-регуляризатора в задачах регрессии
Автор: Евгений Евгений • Декабрь 24, 2023 • Лабораторная работа • 760 Слов (4 Страниц) • 99 Просмотры
Кафедра «Цифровые технологии»
Лабораторная работа №3
«Исследование работы L2-регуляризатора в задачах регрессии»
по дисциплине
«Интеллектуальные системы и технологии»
Вариант 4
Выполнил:
магистрант группы ИСТм-22
Инжеватов Е.А.
Проверил: Иванов Д.В.
Самара 2023
Цель и задание
Цель работы: изучить особенности работы L2-регуляризатора на примере задачи аппроксимации функции линейной моделью.
Выполнение работы
Начнем с создания обучающей выборки из функции и обучения модели. В этом случае, мы будем аппроксимировать полиномом 13-й степени. Затем мы вычислим значения коэффициентов вектора ω для квадратичной функции потерь.
import numpy as np
import matplotlib.pyplot as plt
# Функция для аппроксимации
def true_function(x):
return x**3 - 2*x**2 + x
# Создание обучающей выборки
X_train = np.linspace(-5, 5, 100)
y_train = true_function(X_train)
# Формирование обучающей выборки
X_train_even = X_train[::2]
y_train_even = y_train[::2]
# Функция потерь
def loss_function(M):
return M**2
# Градиент
def gradient(w, X, y):
M = np.dot(X, w) - y
grad = 2 * np.dot(X.T, M)
return grad
# Градиентный спуск
def gradient_descent(X, y, learning_rate=0.01, epochs=1000):
w = np.zeros(X.shape[1]) # Начальные веса
for epoch in range(epochs):
M = np.dot(X, w) - y
Q = np.sum(loss_function(M))
grad = gradient(w, X, y)
w -= learning_rate * grad
if epoch % 100 == 0:
print(f"Epoch: {epoch}, Loss: {Q}")
return w
# Создание матрицы X для полинома 13-й степени
X_poly = np.column_stack([X_train_even**i for i in range(14)])
# Обучение модели
learned_weights = gradient_descent(X_poly, y_train_even)
# Вывод коэффициентов
print("Learned Weights:", learned_weights)
Теперь, у вас есть обученные веса модели. Далее, вы можете использовать их для вычисления прогнозов и построения графика.
# Вычисление прогнозов функции для всего диапазона значений
X_range = np.linspace(-5, 5, 100)
X_range_poly = np.column_stack([X_range**i for i in range(14)])
predictions = np.dot(X_range_poly, learned_weights)
# Построение графика
plt.plot(X_train, y_train, label='True Function', color='blue')
plt.scatter(X_train_even, y_train_even, label='Training Points', color='red')
plt.plot(X_range, predictions, label='Predictions', color='green')
plt.xlabel('X')
plt.ylabel('y')
plt.title('Polynomial Regression')
plt.legend()
plt.grid(True)
plt.show()
Конечный код
import numpy as np
import matplotlib.pyplot as plt
# Функция для аппроксимации
def true_function(x):
return x**2
# Создание обучающей выборки
X_train = np.linspace(0, 10, 100)
y_train = true_function(X_train)
# Формирование обучающей выборки
...