Добавил:
ИВТ (советую зайти в "Несортированное") ПИН МАГА Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1 лаба / БарановВС_1лр.pdf
Скачиваний:
0
Добавлен:
06.09.2025
Размер:
465.88 Кб
Скачать

МОСКОВСКИЙ ИНСТИТУТ ЭЛЕКТРОННОЙ ТЕХНИКИ

Институт системной и программной инженерии и информационных технологий (Институт СПИНТех)

Лабораторная работа № 1 по курсу «Интеллектуальные системы – Статистическое обучение»

Линейная регрессия как задача контролируемого (индуктивного) обучения

Выполнил: Баранов В.С. гр.ПИН-11М

Проверил преподаватель: проф., д.ф.-м. н. Рычагов М.Н.

Москва, МИЭТ, 2025 г.

Цель работы

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

Краткие теоретические сведения

Линейная регрессия — это метод моделирования зависимости между зависимой переменной y и одной или несколькими независимыми переменными X путем построения линейной модели.

Гипотеза (Hypothesis): h_θ(x) = θ^T * X = θ x + θ x + ... + θ x (где x = 1)

Функция стоимости (Cost Function): Для оценки точности модели используется функция стоимости J(θ), обычно — метод наименьших квадратов: J(θ) = (1 / 2m) * Σ(h_θ(x^(i)) - y^(i))² Градиентный спуск (Gradient Descent): Итеративный алгоритм для поиска минимума функции стоимости. Параметры θ обновляются на каждом шаге: θ_j := θ_j - α * (1 / m) * Σ(h_θ(x^(i)) - y^(i)) * x_j^(i)где α — скорость обучения

(learning rate).Нормальные уравнения (Normal Equations):Аналитический метод нахождения θ без итераций: θ = (X^T * X)^(-1) * X^T * y

Ход работы

Врамках лабораторной работы было создано интерактивное веб-приложение

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

Реализованные функции Код ключевых функций, согласно заданию: codePython

# Функция вычисления стоимости def computeCost(X, y, theta):

m = len(y)

predictions = X.dot(theta)

sqrErrors = (predictions - y) ** 2

J = (1 / (2 * m)) * np.sum(sqrErrors) return J

# Функция градиентного спуска

def gradientDescent(X, y, theta, alpha, num_iters): m = len(y)

J_history = np.zeros(num_iters) for i in range(num_iters):

predictions = X.dot(theta) errors = predictions - y

delta = (1 / m) * (X.T.dot(errors)) theta = theta - (alpha * delta) J_history[i] = computeCost(X, y, theta)

return theta, J_history

#Функция нормализации признаков def featureNormalize(X):

X = X.astype(float)

mu = np.mean(X, axis=0) sigma = np.std(X, axis=0)

sigma[sigma == 0] = 1 # Предотвращение деления на ноль

X_norm = (X - mu) / sigma return X_norm, mu, sigma

#Функция нормальных уравнений

def normalEqn(X, y):

theta = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y) return theta

Часть 1: Простая линейная регрессия

Задача: Прогнозирование прибыли сервисного центра в зависимости от населения города. Данные: service_center.csv

1.1. Визуализация исходных данных

На первом этапе данные были загружены и отображены в виде точечной диаграммы для наглядного представления зависимости.

1.2. Результаты градиентного спуска

Был применен метод градиентного спуска для нахождения оптимальных параметров θ. В результате были получены следующие графики:

Линейный тренд: показывает, как построенная модель соответствует исходным данным.

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

1.3. Визуализация функции стоимости J(θ)

Для глубокого понимания процесса оптимизации была визуализирована сама функция стоимости в 3D и в виде контурного графика. Красный маркер указывает на найденный минимум, что соответствует оптимальным параметрам θ и θ .