diff --git a/faskhutdinov_idris_lab_1/Linear_Regression.png b/faskhutdinov_idris_lab_1/Linear_Regression.png new file mode 100644 index 0000000..5213c27 Binary files /dev/null and b/faskhutdinov_idris_lab_1/Linear_Regression.png differ diff --git a/faskhutdinov_idris_lab_1/Polynomial_Regression.png b/faskhutdinov_idris_lab_1/Polynomial_Regression.png new file mode 100644 index 0000000..97cab8b Binary files /dev/null and b/faskhutdinov_idris_lab_1/Polynomial_Regression.png differ diff --git a/faskhutdinov_idris_lab_1/Readme.md b/faskhutdinov_idris_lab_1/Readme.md new file mode 100644 index 0000000..58e9fd0 --- /dev/null +++ b/faskhutdinov_idris_lab_1/Readme.md @@ -0,0 +1,40 @@ +# Лабораторная работа №1. Работа с типовыми наборами данных и различными моделями +## 6 вариант +### Задание: +Используя код из пункта «Регуляризация и сеть прямого +распространения» из источника (стр. 228), сгенерируйте определенный тип данных и +сравните на нем 3 модели (по варианту). Постройте графики, отобразите +качество моделей, объясните полученные результаты. + +Данные: make_classification (n_samples=500, n_features=2, +n_redundant=0, n_informative=2, random_state=rs, n_clusters_per_class=1) + +Модели: +* Линейную регрессию +* Полиномиальную регрессию (со степенью 4) +* Гребневую полиномиальную регрессию (со степенью 4, alpha = 1.0) + +### Как запустить лабораторную +1. Запустить файл main.py + +### Используемые технологии +1. Библиотека matplotlib +2. Библиотека scikit-learn +3. Python +4. IDE PyCharm + +### Описание лабораторной работы + +Программа генерирует набор данных с помощью функции make_classification в функции main. +После чего делит данные на тестовую и обучающую выборки. В итоге запускает функции linear_regression, polin_regression_4, gr_polin_regression_4, +передавая им набор данных как аргументы. В вышеперечисленных функциях происходит обучение моделей на тестовой выборке, после чего предсказываются +данные на оставшейся выборке. В заключении строятся графики, которые отображают модели, в консоль выводится оценка их работы + +### Результат +Программа выводит в консоль следующие данные: +Линейная регрессия: 0.8857142857142857 +Полиномиальная регрессия: 0.9714285714285714 +Гребневая полиномиальная регрессия: 0.7732479926366043 +Выходит, что наиболее качественная для решения задачи-полиномиальная регрессия, а хуже всего справилась гребневая полиномиальная. + +Скриншоты работы программы представлены в папке с лабораторной работой. diff --git a/faskhutdinov_idris_lab_1/Ridge_Poly_Regression.png b/faskhutdinov_idris_lab_1/Ridge_Poly_Regression.png new file mode 100644 index 0000000..8432f6d Binary files /dev/null and b/faskhutdinov_idris_lab_1/Ridge_Poly_Regression.png differ diff --git a/faskhutdinov_idris_lab_1/main.py b/faskhutdinov_idris_lab_1/main.py new file mode 100644 index 0000000..8bd49c7 --- /dev/null +++ b/faskhutdinov_idris_lab_1/main.py @@ -0,0 +1,91 @@ +# 6 вариант +# Данные: make_classification (n_samples=500, n_features=2, +# n_redundant=0, n_informative=2, random_state=rs, n_clusters_per_class=1) +# Модели: +# · Линейная регрессия +# · Полиномиальная регрессия (со степенью 4) +# · Гребневая полиномиальная регрессия (со степенью 4, alpha = 1.0) +import numpy as np +import matplotlib.pyplot as plt +from matplotlib.colors import ListedColormap +from sklearn.model_selection import train_test_split +from sklearn.linear_model import LogisticRegression, LinearRegression +from sklearn.preprocessing import PolynomialFeatures, StandardScaler +from sklearn.pipeline import make_pipeline +from sklearn.datasets import make_moons, make_circles, make_classification +from sklearn.neural_network import MLPClassifier +from sklearn.linear_model import Ridge + +# Задаем параметры генерации данных +n_samples = 500 +n_features = 2 +n_redundant = 0 +n_informative = 2 +random_state = 42 +n_clusters_per_class = 1 + + +def main(): + # Генерация данных + X, y = make_classification(n_samples=n_samples, + n_features=n_features, + n_redundant=n_redundant, + n_informative=n_informative, + random_state=random_state, + n_clusters_per_class=n_clusters_per_class) + # Тестовая и обучающая выборки + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.65, random_state=random_state) + + # Создание моделей + linear_regression(X_train, X_test, y_train, y_test) + polin_regression_4(X_train, X_test, y_train, y_test) + gr_polin_regression_4(X_train, X_test, y_train, y_test) + +# Создание линейной регрессии +def linear_regression(X_train, X_test, y_train, y_test): + linear_regression = LogisticRegression() + linear_regression.fit(X_train, y_train) + linear_regression_score = linear_regression.score(X_train, y_train) + + linear_pred = linear_regression.predict(X_test) + + plt.scatter(X_test[:, 0], X_test[:, 1], c=linear_pred, cmap="bwr") + plt.title("Линейная регрессия") + plt.xlabel("Признак 1") + plt.ylabel("Признак 2") + plt.show() + print("Линейная регрессия: {}".format(linear_regression_score)) + +#Создание полиномиальной регрессии со степенью 4 +def polin_regression_4(X_train, X_test, y_train, y_test): + poly_regression = make_pipeline(PolynomialFeatures(degree=4), LogisticRegression()) + poly_regression.fit(X_train, y_train) + polynomial_regression_score = poly_regression.score(X_train, y_train) + + poly_pred = poly_regression.predict(X_test) + + plt.scatter(X_test[:, 0], X_test[:, 1], c=poly_pred, cmap="bwr") + plt.title("Полиномиальная регрессия") + plt.xlabel("Признак 1") + plt.ylabel("Признак 2") + plt.show() + print("Полиномиальная регрессия: {}".format(polynomial_regression_score)) + + + +#Создание гребневой полиномиальной регрессии со степенью 4 и alpha = 1.0 +def gr_polin_regression_4(X_train, X_test, y_train, y_test): + ridge_regression = make_pipeline(PolynomialFeatures(degree=4), Ridge(alpha=1.0)) + ridge_regression.fit(X_train, y_train) + ridge_regression_score = ridge_regression.score(X_train, y_train) + + ridge_pred = ridge_regression.predict(X_test) + + plt.scatter(X_test[:, 0], X_test[:, 1], c=ridge_pred, cmap="bwr") + plt.title("Гребневая полиномиальная регрессия") + plt.xlabel("Признак 1") + plt.ylabel("Признак 2") + plt.show() + print("Гребневая полиномиальная регрессия: {}".format(ridge_regression_score)) + +main() \ No newline at end of file