diff --git a/martysheva_tamara_lab_1/README.md b/martysheva_tamara_lab_1/README.md new file mode 100644 index 0000000..e9336ec --- /dev/null +++ b/martysheva_tamara_lab_1/README.md @@ -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). +Персептрон может хорошо работать в задачах классификации, если данные хорошо разделимы линейно. Гребневая полиномиальная регрессия показала среднюю точность. +Дополнительно в данные был добавлен случайный шум, что тоже могло повлиять на результаты оценки качества моделей. diff --git a/martysheva_tamara_lab_1/lab1.py b/martysheva_tamara_lab_1/lab1.py new file mode 100644 index 0000000..2bf812e --- /dev/null +++ b/martysheva_tamara_lab_1/lab1.py @@ -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") \ No newline at end of file diff --git a/martysheva_tamara_lab_1/linear_plot.png b/martysheva_tamara_lab_1/linear_plot.png new file mode 100644 index 0000000..2a16e6e Binary files /dev/null and b/martysheva_tamara_lab_1/linear_plot.png differ diff --git a/martysheva_tamara_lab_1/perseptron_plot.png b/martysheva_tamara_lab_1/perseptron_plot.png new file mode 100644 index 0000000..bfcd31f Binary files /dev/null and b/martysheva_tamara_lab_1/perseptron_plot.png differ diff --git a/martysheva_tamara_lab_1/rid_poly_plot.png b/martysheva_tamara_lab_1/rid_poly_plot.png new file mode 100644 index 0000000..569cbd0 Binary files /dev/null and b/martysheva_tamara_lab_1/rid_poly_plot.png differ