Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
семестр 1 / Задания ИТиП.docx
Скачиваний:
0
Добавлен:
13.05.2026
Размер:
45.02 Кб
Скачать

Лабораторная работа № 19. Полиномиальная регрессия

Цель работы: Научиться выполнять полиномиальную регрессию

Дан набор данных о стоимости домов в King County, США

https://drive.google.com/file/d/1iFfqaTL3_nChHSlsP6YJ9V-ZE1OsYh_S/view?usp=sharing

(набор данных взят из ресурса kaggle URL:https://www.kaggle.com/datasets/harlfoxem/housesalesprediction)

Задача. Составить скрипт, выполняющий полиномиальную регрессию и определяющий стоимость дома (столбец "price") по параметру.

Номер варианта: (100 * i + j) % 5 + 1

Найти:

1. Создать код, рассчитывающий необходимые параметры регрессии 4 порядка (максимальная степень - 4) (гипотезу, функцию стоимости, её производные, ...)

Параметр зависит от номера варианта:

1: bathrooms

2: sqft_living

3: grade

4: sqft_above

5: sqft_living15

3. Найти минимум функции стоимости с помощью scipy.optimize.minimize.

4.а Построить график зависимости функции стоимости от номера итерации алгоритма

4.б Построить график зависимости коэффициентов theta от номера итерации алгоритма

5. Построить график гипотезы от параметра. Нанести на него исходные данные для сравнения.

Примечание: Некоторые значения исходных данных записаны в файле в кавычках. Для преобразования в число, эти кавычки нужно убрать, поэтому для каждой строки следует выполнить функцию str.replace(str_from, str_to), заменяющую определённую подстроку на другую, в данном случае двойные кавычки на ничего:

line = line.replace('"', '')

Лабораторная работа № 20. Логистическая регрессия

Цель работы: Научиться выполнять логистическую регрессию

Дан набор данных о параметрах опухоли и её злокачественности/доброкачественности

https://drive.google.com/file/d/14KZQObrsE6XHSE7EBEw2hmfsZ7smrSRc/view?usp=sharing

(набор данных взят из ресурса kaggle URL:https://www.kaggle.com/datasets/uciml/breast-cancer-wisconsin-data)

Задача. Составить скрипт, выполняющий логистическую регрессию по параметрам опухоли.

Дано:

Использовать параметры: area_mean (средняя площадь) и symmetry_mean (средняя симметрия)

Диагноз diagnosis : M - злокачественная (y = 1), B - доброкачественная (y = 0)

Найти:

1. Построить график исходных данных. По осям отложить два заданных параметра. Диагноз отметить цветом точек.

2. Создать код, рассчитывающий необходимые параметры логистической регрессии (гипотезу, функцию стоимости, её производные, ...)

3. Найти минимум функции стоимости с помощью градиентного спуска.

4.а Построить график зависимости функции стоимости от номера итерации алгоритма

4.б Построить график зависимости коэффициентов theta от номера итерации алгоритма

5. На графике исходных данных нанести найденную границу решения (по вероятности 0.5)

6. Сделать выводы.

Примечания:

numpy позволяет делать бинарные срезы массивов (то есть срез по условию). Так можно выделить часть массива, для которой диагноз одинаковый. Например:

x1,x2, y = data # x1 и x2 – параметры, y –диагноз (0 или 1)

plt.scatter(x1[y == 0],x2[y == 0]) # отобразит только точки, для которых y = 0

Границу решения можно нарисовать с помощью контурного графика с одним уровнем. Для этого надо создать наборы параметров x1, x2 так, чтобы они образовывали сетку (функция meshgrid ниже), рассчитать гипотезу для всех элементов из набора, и построить контурный график гипотезы от x1, x2 (выбрав один контур по уровню 0.5)

x_grid, y_grid = meshgrid(x,y) – создаёт двумерную координатную сетку значений из одномерных массивов x, y так, что для каждого i, j x_grid[i,j] =x[i], а y_grid[i,j] = y[j]. Например:

Данные матрицы определяют значения соответствующего параметра в координате. Так, во всех элементах первого столбца x_grid стоит первое значений x, а во всех элементах первой строки y_grid стоит первой значение y.

Поскольку при определении гипотезы каждый параметр – одномерный массив значений, то массивы надо преобразовать в одномерный вид (функция flatten()). При этом матрицы выше примут вид (то есть все сочетания x, y, а также единичный столбец:

После этого для полученных X можно найти гипотезу и преобразовать её обратно в двумерный массив, получив три матрицы: координаты x_grid, y_grid, результат h_grid, от которых можно построить график:

grid_n = 100 # Сетка 100х100 элементов

# Считаем по 100 значений каждого параметра в диапазоне данных

x1_p= np.linspace(min(x1), max(x1), grid_n)

x2_p = np.linspace(min(x2), max(x2), grid_n)

# meshgrid создаёт две матрицы сетки значений параметров

x1_grid, x2_grid = np.meshgrid(x1_p, x2_p)

# Создаём матрицу параметров для нахождения гипотез

X = np.empty((x1_grid.size, 3))

X[:, 0] = 1

X[:, 1] = x1_grid.flatten()

X[:, 2] = x2_grid.flatten()

# Находим гипотезу для каждого набора параметров

h = ...

# Делаем из вектора гипотез сетку гипотез

h_grid = np.reshape(h, (grid_n, grid_n))

# Строим график гипотез с одним уровнем (0.5)

plt.contour(x1_grid, x2_grid, h_grid, levels=[0.5])

plt.show()

Соседние файлы в папке семестр 1