- •Ссылки на лекции
- •Лабораторная работа № 2. Приложение линейной структуры
- •Лабораторная работа № 3. Техника проведения процесса отладки
- •Лабораторная работа № 4. Работа с массивами.
- •Лабораторная работа № 5. Исследование основных операций python
- •Лабораторная работа № 6. Изучение программ с ветвлением и циклами
- •Лабораторная работа № 7. Изучение программ с ветвлением.
- •Лабораторная работа № 8. Изучение проверки типов данных.
- •Лабораторная работа № 9. Алгоритмы с массивами и функциями.
- •Лабораторная работа № 10. Классы
- •Лабораторная работа № 11. Классы. Свойства и наследие.
- •Лабораторная работа № 12. Основные принципы Numpy
- •Лабораторная работа № 13. Решение задач с numpy
- •Лабораторная работа № 14. Линейные уравнения
- •Лабораторная работа № 15. Загрузка и подготовка данных
- •Лабораторная работа № 16. Линейная регрессия
- •Лабораторная работа № 17. Линейная регрессия нескольких параметров
- •Лабораторная работа № 18. Оптимизация минимизации
- •Лабораторная работа № 19. Полиномиальная регрессия
- •Лабораторная работа № 20. Логистическая регрессия
Лабораторная работа № 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()
