arzamaskina_milana_lab_1 is ready
This commit is contained in:
parent
a8c58683dd
commit
c3aa36cc7b
52
arzamaskina_milana_lab_1/README.md
Normal file
52
arzamaskina_milana_lab_1/README.md
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
## Задание
|
||||||
|
Работа с типовыми наборами данных и различными моделями.
|
||||||
|
Сгенерируйте определенный тип данных и сравните на нем 3 модели
|
||||||
|
|
||||||
|
Вариант №2
|
||||||
|
|
||||||
|
Данные: make_circles(noise=0.2, factor=0.5, random_state=1)
|
||||||
|
|
||||||
|
Модели:
|
||||||
|
+ Линейная регрессия
|
||||||
|
+ Полиномиальная регрессия (degree=3)
|
||||||
|
+ Гребневая рекрессия (degree=3, alpha=1.0)
|
||||||
|
|
||||||
|
## Используемые технологии
|
||||||
|
В лабораторной были использованы библиотеки:
|
||||||
|
+ matplotlib - используется для создания графиков
|
||||||
|
+ sklearn - используется для работы с моделями машинного обучения
|
||||||
|
|
||||||
|
## Как запустить
|
||||||
|
Запустить файл main.py, который выполнит необходимые действия над моделями
|
||||||
|
и выведет графики на экран.
|
||||||
|
|
||||||
|
## Что делает программа
|
||||||
|
Генерирует набор данных типа circles, делит его на обучающую и тестовую выборки.
|
||||||
|
По очереди обучает на данных обучающей выборки 3 модели:
|
||||||
|
модель линейной регрессии, модель полиномиальной регрессии со степенью 3 и
|
||||||
|
модель гребневой регрессии со степенью 3 и alpha=1.0.
|
||||||
|
|
||||||
|
После обучения предсказания моделей проверяются на тестовых данных.
|
||||||
|
Строится 4 графика, один для отображения первоначальных тестовых и обучающих данных, где:
|
||||||
|
`o` - точки обучающей выборки первого и второго типа.
|
||||||
|
`x` - точки тестовой выборки первого и второго типа.
|
||||||
|
И по одному графику для каждой модели, где:
|
||||||
|
`o` - точки тестовой выборки первого и второго типа.
|
||||||
|
|
||||||
|
Далее программа выведет оценки точности моделей. Полученные оценки:
|
||||||
|
+ Линейная регрессия - 0.268
|
||||||
|
+ Полиномиальная регрессия со степенью 3 - 0.134
|
||||||
|
+ Гребневая регрессия со степенью 3, alpha=1.0 - 0.131
|
||||||
|
|
||||||
|
## Скриншоты работы программы
|
||||||
|
График для отображения первоначальных тестовых и обучающих данных и
|
||||||
|
полученные графики разбиения точек на классы:
|
||||||
|
|
||||||
|
Линейная регрессия - Полиномиальная регрессия (со степенью 3) - Гребневая регрессия (со степенью 3, alpha=1.0)
|
||||||
|
![img.png](img_screen_1.png)
|
||||||
|
|
||||||
|
Вывод анализа точности работы моделей:
|
||||||
|
![img.png](img_screen_2.png)
|
||||||
|
|
||||||
|
## Вывод
|
||||||
|
Исходя из этого, можно сделать вывод: лучший результат показала модель линейной регрессии.
|
BIN
arzamaskina_milana_lab_1/img_screen_1.png
Normal file
BIN
arzamaskina_milana_lab_1/img_screen_1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 332 KiB |
BIN
arzamaskina_milana_lab_1/img_screen_2.png
Normal file
BIN
arzamaskina_milana_lab_1/img_screen_2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 64 KiB |
87
arzamaskina_milana_lab_1/main.py
Normal file
87
arzamaskina_milana_lab_1/main.py
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
from matplotlib import pyplot as plt
|
||||||
|
from matplotlib.colors import ListedColormap
|
||||||
|
from sklearn.datasets import make_circles
|
||||||
|
from sklearn.linear_model import LinearRegression, Ridge
|
||||||
|
from sklearn.metrics import mean_squared_error
|
||||||
|
from sklearn.model_selection import train_test_split
|
||||||
|
from sklearn.pipeline import make_pipeline
|
||||||
|
from sklearn.preprocessing import PolynomialFeatures, StandardScaler
|
||||||
|
|
||||||
|
# Нелинейный генератор - позволяет сгенерировать такие классы-признаки,
|
||||||
|
# что признаки одного класса геометрически окружают признаки другого класса
|
||||||
|
X, y = make_circles(noise=0.2, factor=0.5, random_state=1)
|
||||||
|
X = StandardScaler().fit_transform(X)
|
||||||
|
|
||||||
|
# Разделение на обучающую и тестовую выборки (40% данных будет использовано для тестов)
|
||||||
|
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4, random_state=42)
|
||||||
|
|
||||||
|
# Создание необходимых для оценки моделей
|
||||||
|
def models():
|
||||||
|
# Линейная регрессия
|
||||||
|
linear_regression = LinearRegression()
|
||||||
|
linear_regression.fit(X_train, y_train)
|
||||||
|
|
||||||
|
# Полиномиальная регрессия (degree=3)
|
||||||
|
poly_regression = make_pipeline(PolynomialFeatures(degree=3), LinearRegression())
|
||||||
|
poly_regression.fit(X_train, y_train)
|
||||||
|
|
||||||
|
# Гребневая рекрессия (degree=3, alpha=1.0)
|
||||||
|
ridge_regression = make_pipeline(PolynomialFeatures(degree=3), Ridge(alpha=1.0))
|
||||||
|
ridge_regression.fit(X_train, y_train)
|
||||||
|
|
||||||
|
models = [linear_regression, poly_regression, ridge_regression]
|
||||||
|
|
||||||
|
# Предсказанные y
|
||||||
|
linear_predict = linear_regression.predict(X_test)
|
||||||
|
poly_predict = poly_regression.predict(X_test)
|
||||||
|
ridge_predict = ridge_regression.predict(X_test)
|
||||||
|
|
||||||
|
pred = [linear_predict, poly_predict, ridge_predict]
|
||||||
|
|
||||||
|
# Среднеквадратичные ошибки
|
||||||
|
lin_mse = mean_squared_error(y_test, linear_predict)
|
||||||
|
poly_mse = mean_squared_error(y_test, poly_predict)
|
||||||
|
rr_mse = mean_squared_error(y_test, ridge_predict)
|
||||||
|
|
||||||
|
mse = [lin_mse, poly_mse, rr_mse]
|
||||||
|
|
||||||
|
grafics(pred, mse, models)
|
||||||
|
|
||||||
|
# Графики
|
||||||
|
def grafics(pred, mse, models):
|
||||||
|
fig, ax = plt.subplots(nrows=2, ncols=2, figsize=(8, 8))
|
||||||
|
cm_color1 = ListedColormap(['r', 'g'])
|
||||||
|
|
||||||
|
plt.suptitle('Лабораторная работа 1. Вариант 2.', fontweight='bold')
|
||||||
|
|
||||||
|
# График данных
|
||||||
|
plt.subplot(2, 2, 1)
|
||||||
|
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cm_color1, marker='o', label='тренировочные данные')
|
||||||
|
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cm_color1, marker='x', label='тестовые данные')
|
||||||
|
plt.title('Датасет circles', fontsize=10, loc='left')
|
||||||
|
plt.legend(loc='upper left')
|
||||||
|
|
||||||
|
# График линейной модели
|
||||||
|
plt.subplot(2, 2, 2)
|
||||||
|
plt.scatter(X_test[:, 0], X_test[:, 1], c=pred[0], cmap=cm_color1)
|
||||||
|
plt.title('Линейная регрессия', fontsize=10, loc='left')
|
||||||
|
|
||||||
|
# График полиномиальной модели (degree=3)
|
||||||
|
plt.subplot(2, 2, 3)
|
||||||
|
plt.scatter(X_test[:, 0], X_test[:, 1], c=pred[1], cmap=cm_color1)
|
||||||
|
plt.title('Полиномиальная регрессия (degree=3)', fontsize=10, loc='left')
|
||||||
|
plt.xlabel('X')
|
||||||
|
plt.ylabel('Y')
|
||||||
|
|
||||||
|
# График гребневой модели (degree=3, alpha=1.0)
|
||||||
|
plt.subplot(2, 2, 4)
|
||||||
|
plt.scatter(X_test[:, 0], X_test[:, 1], c=pred[2], cmap=cm_color1)
|
||||||
|
plt.title('Гребневая регрессия (degree=3, alpha=1.0)', fontsize=10, loc='left')
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
# Сравнение качества
|
||||||
|
print('Линейная MSE:', mse[0])
|
||||||
|
print('Полиномиальная (degree=3) MSE:', mse[1])
|
||||||
|
print('Гребневая (degree=3, alpha=1.0) MSE:', mse[2])
|
||||||
|
|
||||||
|
models()
|
Loading…
Reference in New Issue
Block a user