Merge pull request 'martysheva lab1 don' (#28) from martysheva_tamara_lab_1 into main
Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/28
This commit is contained in:
commit
0446928927
46
martysheva_tamara_lab_1/README.md
Normal file
46
martysheva_tamara_lab_1/README.md
Normal file
@ -0,0 +1,46 @@
|
||||
# Лабораторная работа 1. Работа с типовыми наборами данных и различными моделями
|
||||
### Вариант № 18
|
||||
Используя код из пункта «Регуляризация и сеть прямого распространения», сгенерируйте определенный тип данных и сравните на нем 3 модели (по варианту). Постройте графики, отобразите качество моделей, объясните полученные результаты.
|
||||
|
||||
**Данные**: make_classification (n_samples=500, n_features=2, n_redundant=0, n_informative=2, random_state=rs, n_clusters_per_class=1)
|
||||
|
||||
**Модели**:
|
||||
* Линейную регрессию
|
||||
* Персептрон
|
||||
* Гребневую полиномиальную регрессию (со степенью 3, alpha = 1.0)
|
||||
***
|
||||
## *Как запустить лабораторную работу:*
|
||||
Чтобы запустить программу, открываем файл lab1 в PyCharm и нажимаем на зеленый треугольник в правом верхнем углу.
|
||||
***
|
||||
## *Использованные технологии:*
|
||||
**Scikit-learn** - один из наиболее широко используемых пакетов Python для Data Science и Machine Learning. Он позволяет выполнять множество операций и предоставляет множество алгоритмов.
|
||||
|
||||
**Matplotlib** — это комплексная библиотека для создания статических, анимированных и интерактивных визуализаций на Python.
|
||||
|
||||
**NumPy** — это фундаментальный пакет для научных вычислений на Python.
|
||||
***
|
||||
## *Что делает ЛР:*
|
||||
В данной работе генерируется определенный тип данных (при помощи генератора линейных задач make_classification). На данном типе данных проверяется работа трёх моделей: линейная регрессия, персептрон и гребневая полиномиальная регрессия.
|
||||
|
||||
**Результатом работы программы** являются: вывод показателей качества моделей (в консоли) и 3 изображения с графиками, на которых показаны сами данные, разбитые на два класса (тренировочные и тестовые), а также разбиение по классам по моделям.
|
||||
***
|
||||
## *Пример выходных данных:*
|
||||
>Вывод в консоли:
|
||||
|
||||
![](https://sun9-27.userapi.com/impg/Xc_p5nTj7wWRVxuKx8PXcvnnJcPRYXM5PijZsA/bQJSoWPqZqo.jpg?size=602x76&quality=96&sign=5797d8960621a547a08ba7bdc1e83965&type=album)
|
||||
|
||||
>График линейной регрессии:
|
||||
|
||||
![](https://sun9-28.userapi.com/impg/DaF38aVW1XXfrsbt8d1eNYgyssVpffN3kgZTpA/UvJiTp6ACW0.jpg?size=604x423&quality=96&sign=74a0543fa50da772fc72214c6d695e81&type=album)
|
||||
|
||||
>График персептрона:
|
||||
|
||||
![](https://sun9-72.userapi.com/impg/6NLpLzpUvR5EVGIy2kPAwLWp7TGjUZWdL3Jb2w/Pbu6IPLsUuc.jpg?size=604x423&quality=96&sign=83e2340b57fe60de0adda95fe1ad686d&type=album)
|
||||
|
||||
>График гребневой полиномиальной регрессии:
|
||||
|
||||
![](https://sun9-27.userapi.com/impg/DzhYdeV18GWPbay__0W88Zg6oEDipT62zVB2Og/k5SfwXDyKhU.jpg?size=604x423&quality=96&sign=a6c08a960b55b6aec9aa0aa2307d1978&type=album)
|
||||
***
|
||||
**Вывод**: Для сгенерированного типа данных лучшей моделью оказалась модель персептрона (с точностью 0.795), а худшей модель линейной регрессии (с точностью 0.44).
|
||||
Персептрон может хорошо работать в задачах классификации, если данные хорошо разделимы линейно. Гребневая полиномиальная регрессия показала среднюю точность.
|
||||
Дополнительно в данные был добавлен случайный шум, что тоже могло повлиять на результаты оценки качества моделей.
|
57
martysheva_tamara_lab_1/lab1.py
Normal file
57
martysheva_tamara_lab_1/lab1.py
Normal file
@ -0,0 +1,57 @@
|
||||
import numpy as np
|
||||
from sklearn.datasets import make_classification
|
||||
from sklearn.preprocessing import StandardScaler
|
||||
from sklearn.model_selection import train_test_split
|
||||
from matplotlib.colors import ListedColormap
|
||||
from matplotlib import pyplot as plt
|
||||
from sklearn.linear_model import LinearRegression, Perceptron, Ridge
|
||||
from sklearn.preprocessing import PolynomialFeatures
|
||||
from sklearn.pipeline import Pipeline
|
||||
|
||||
#Создаем набор данных
|
||||
X, Y = make_classification(n_samples=500, n_features=2, n_redundant=0, n_informative=2, random_state=0, n_clusters_per_class=1)
|
||||
rng = np.random.RandomState(2)
|
||||
X += 2 * rng.uniform(size=X.shape)
|
||||
X = StandardScaler().fit_transform(X)
|
||||
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=.4, random_state=40)
|
||||
|
||||
#Создаем модели
|
||||
linear = LinearRegression()
|
||||
perseptron = Perceptron()
|
||||
ridge = Ridge(alpha=1.0)
|
||||
polynomial_features = PolynomialFeatures(degree=3)
|
||||
rid_poly = Pipeline([("polynomial_features", polynomial_features),("ridge_regression", ridge)])
|
||||
|
||||
#Тренируем модель
|
||||
def train(model, description):
|
||||
model.fit(X_train, Y_train)
|
||||
Y_pred = model.predict(X_test)
|
||||
print(description + ", качество модели = ", model.score(X_test, Y_test))
|
||||
|
||||
#Выводим результат на график
|
||||
def plot(model, name):
|
||||
cmap = ListedColormap(['#8b00ff', '#ff294d'])
|
||||
plt.figure(figsize=(10, 7))
|
||||
subplot = plt.subplot(111)
|
||||
h = .5 # шаг регулярной сетки
|
||||
x0_min, x0_max = X[:, 0].min() - .5, X[:, 0].max() + .5
|
||||
x1_min, x1_max = X[:, 1].min() - .5, X[:, 1].max() + .5
|
||||
xx0, xx1 = np.meshgrid(np.arange(x0_min, x0_max, h), np.arange(x1_min, x1_max, h))
|
||||
|
||||
Z = model.predict(np.c_[xx0.ravel(), xx1.ravel()])
|
||||
Z = Z.reshape(xx0.shape)
|
||||
subplot.contourf(xx0, xx1, Z, cmap=cmap, alpha=.3)
|
||||
|
||||
subplot.scatter(X_train[:, 0], X_train[:, 1], c=Y_train, cmap=cmap)
|
||||
subplot.scatter(X_test[:, 0], X_test[:, 1], c=Y_test, cmap=cmap, alpha=0.4)
|
||||
|
||||
plt.savefig(name + ".png")
|
||||
|
||||
#Вызов функций
|
||||
train(linear, "Линейная регрессия")
|
||||
train(perseptron, "Персептрон")
|
||||
train(rid_poly, "Гребневая полиномиальная регрессия")
|
||||
|
||||
plot(linear, "linear_plot")
|
||||
plot(perseptron, "perseptron_plot")
|
||||
plot(rid_poly, "rid_poly_plot")
|
BIN
martysheva_tamara_lab_1/linear_plot.png
Normal file
BIN
martysheva_tamara_lab_1/linear_plot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 99 KiB |
BIN
martysheva_tamara_lab_1/perseptron_plot.png
Normal file
BIN
martysheva_tamara_lab_1/perseptron_plot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 96 KiB |
BIN
martysheva_tamara_lab_1/rid_poly_plot.png
Normal file
BIN
martysheva_tamara_lab_1/rid_poly_plot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 102 KiB |
Loading…
Reference in New Issue
Block a user