diff --git a/.idea/IIS_2023_1.iml b/.idea/IIS_2023_1.iml index 4e6ce24..f2c30eb 100644 --- a/.idea/IIS_2023_1.iml +++ b/.idea/IIS_2023_1.iml @@ -1,8 +1,10 @@ - - + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index b6db721..fde0489 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,9 @@ - + + + diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 42c41de..95c3327 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,6 +5,8 @@ + + + + + @@ -52,7 +65,7 @@ - + + + + + + \ No newline at end of file diff --git a/senkin_alexander_lab_1/Linear.png b/senkin_alexander_lab_1/Linear.png new file mode 100644 index 0000000..d877b57 Binary files /dev/null and b/senkin_alexander_lab_1/Linear.png differ diff --git a/senkin_alexander_lab_1/Polynomial.png b/senkin_alexander_lab_1/Polynomial.png new file mode 100644 index 0000000..d97d552 Binary files /dev/null and b/senkin_alexander_lab_1/Polynomial.png differ diff --git a/senkin_alexander_lab_1/README.md b/senkin_alexander_lab_1/README.md new file mode 100644 index 0000000..24ef0d1 --- /dev/null +++ b/senkin_alexander_lab_1/README.md @@ -0,0 +1,38 @@ +Вариант 2 + +Задание на лабораторную работу: + +По данным построить графики 3 моделей: + +- Линейную регрессию +- Полиномиальную регрессию (со степенью 3) +- Гребневую полиномиальную регрессию (со степенью 3, alpha = 1.0) + +Данные: make_circles (noise=0.2, factor=0.5, random_state=rs) + +Как запустить лабораторную работу: + +Чтобы увидеть работу программы, нужно запустить исполняемый питон файл senkin_alexander_lab_1.py, после чего будут отрисованы 3 графика, которые также можно увидеть в формате png в папке проекта. + +Библиотеки + +Matplotlib. Используется для создания графиков. + +Sklearn. Предоставляет инструменты и алгоритмы, которые упрощают задачи, связанные с машинным обучением. + +Описание программы: + +- Генерируем набор данных из 100 точек данных используя функцию make_circles +- С помощью функции train_test_split разделяем данные на тестовые и обучающие в соотношении 20 к 80 +- Создаем 3 модели: +- Линейную регрессию +- Полиномиальную регрессию (со степенью 3) +- Гребневую полиномиальную регрессию (со степенью 3, alpha = 1.0) +- Модели используем для предсказания классов с помощью метода predict +- Оцениваем точность каждой модели +- Строим графики для визуального представления и оценивая работ моделей +- Сравниваем точности моделей и выбираем наиболее точную + +![Linear.png](Linear.png)![Polynomial.png](Polynomial.png)![Ridge.png](Ridge.png) + +Изходя из результатов: Линейная - 0.30, Полиномиальная - 0.45, Гребневая полиномиальная - 0.47, делаем вывод, что наиболее точная модель - Гребневая полиномиальная. \ No newline at end of file diff --git a/senkin_alexander_lab_1/Ridge.png b/senkin_alexander_lab_1/Ridge.png new file mode 100644 index 0000000..2994eda Binary files /dev/null and b/senkin_alexander_lab_1/Ridge.png differ diff --git a/senkin_alexander_lab_1/senkin_alexander_lab_1.py b/senkin_alexander_lab_1/senkin_alexander_lab_1.py new file mode 100644 index 0000000..2a18a03 --- /dev/null +++ b/senkin_alexander_lab_1/senkin_alexander_lab_1.py @@ -0,0 +1,60 @@ +import matplotlib.pyplot as plt +from sklearn.datasets import make_circles +from sklearn.linear_model import LinearRegression +from sklearn.linear_model import Ridge +from sklearn.metrics import r2_score +from sklearn.model_selection import train_test_split +from sklearn.preprocessing import PolynomialFeatures + +# Создаем данные +rs = 42 #желаемый random_state +X, y = make_circles(n_samples=100, noise=0.2, factor=0.5, random_state=rs) + +# Разделяем данные на обучающий и тестовый наборы +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=rs) + +# Обучаем модели +# Линейная регрессия +lr = LinearRegression() +lr.fit(X_train, y_train) +y_lr_pred = lr.predict(X_test) +r2_lr = r2_score(y_test, y_lr_pred) + +# Полиномиальная регрессия с полиномом 3-й степени +poly = PolynomialFeatures(degree=3) +X_poly = poly.fit_transform(X_train) +lr_poly = LinearRegression() +lr_poly.fit(X_poly, y_train) +X_test_poly = poly.transform(X_test) +y_poly_pred = lr_poly.predict(X_test_poly) +r2_poly = r2_score(y_test, y_poly_pred) + +# Гребневая полиномиальная регрессия с полиномом 3-й степени и alpha = 1.0 +ridge = Ridge(alpha=1.0) +ridge.fit(X_poly, y_train) +y_ridge_pred = ridge.predict(X_test_poly) +r2_ridge = r2_score(y_test, y_ridge_pred) + +# Функция для отображения точек на графике +def plot_with_labels(X, y, title, xlabel, ylabel): + plt.figure(figsize=(12, 6)) + plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis', marker='.', label='Тестовые данные') + plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap='viridis', marker='o', edgecolors='black', linewidths=0.5, label='Обучающие данные') + plt.title(title) + plt.xlabel(xlabel) + plt.ylabel(ylabel) + plt.legend() + plt.show() + + +# График для линейной регрессии +plot_with_labels(X_test, y_lr_pred, 'Линейная регрессия', 'Признак 1', 'Признак 2') +print(f'Линейная регрессия - Точность: {r2_lr:.2f}') + +# График для полиномиальной регрессии +plot_with_labels(X_test, y_poly_pred, 'Полиномиальная регрессия', 'Признак 1', 'Признак 2') +print(f'Полиномиальная регрессия - Точность: {r2_poly:.2f}') + +# График для гребневой полиномиальной регрессии +plot_with_labels(X_test, y_ridge_pred, 'Гребневая полиномиальная регрессия', 'Признак 1', 'Признак 2') +print(f'Гребневая полиномиальная регрессия - Точность: {r2_ridge:.2f}') \ No newline at end of file