diff --git a/antonov_dmitry_lab_1/README.md b/antonov_dmitry_lab_1/README.md new file mode 100644 index 0000000..be111c3 --- /dev/null +++ b/antonov_dmitry_lab_1/README.md @@ -0,0 +1,97 @@ +# Лаб 1 + +Работа с типовыми наборами данных и различными моделями + +# Вариант 3 + +Данные: make_classification (n_samples=500, n_features=2, +n_redundant=0, n_informative=2, random_state=rs, n_clusters_per_class=1) + +# Запуск + +Выполнением скрипта файла (вывод в консоль + рисует графики). + +# Модели: + +1. Линейная регрессия +1. Полиномиальная регрессия (со степенью 3) +1. Гребневая полиномиальная регрессия (со степенью 3, alpha = 1.0) + +# Графики + +
+Качество каждой модели может быть оценено на основе среднеквадратичной ошибки (MSE). +Более низкая MSE указывает на лучшее соответствие данным. +Однако выбор модели зависит от набора данных и лежащей в основе взаимосвязи между объектами и целевой переменной. + +Линейная регрессия: Линейная регрессия предполагает линейную зависимость между признаками и целевой переменной. +Это хорошо работает, когда взаимосвязь линейна, а шум в наборе данных минимален. +Лучше всего сработала на наборе лун. Хуже всего на кругах. +На линейном наборе показала себя на равне с остальными. + +Полиномиальная и гребневая показали примерно одинаково на всех наборах. + +Полиномиальная регрессия (степень=3): +Полиномиальная регрессия обеспечивает более гибкую подгонку за счет полинома более высокого порядка(кубическая кривая). +Она может выявить более сложные взаимосвязи между объектами и целевой переменной. +Она может сработать лучше, чем линейная регрессия, если истинная взаимосвязь нелинейна. + +Гребневая регрессия (степень= 3, альфа=1,0): +В случае полиномиальной регрессии с регуляризацией (альфа=1,0) модель добавляет коэффициент регуляризации +для управления сложностью обучения. Регуляризация помогает предотвратить переобучение, когда набор +данных содержит шум или когда он ограничен. +
+ +

+

Набор лун (moon_dataset)
+ +

+

+

Графики регрессии
+ + + +
+ Линейная MSE: 0.0936 + Полиномиальная (degree=3) MSE: 0.0674 + Гребневая (degree=3, alpha=1.0) MSE: 0.0682 +
+

+ +

+

Набор кругов (circles_dataset)
+ +

+

+

Графики регрессии
+ + + +
+ Линейная MSE: 0.2684 + Полиномиальная (degree=3) MSE: 0.1341 + Гребневая (degree=3, alpha=1.0) MSE: 0.1312 +
+

+ +

+

Набор линейный (linearly_dataset)
+ +

+

+

Графики регрессии
+ + + +
+ Линейная MSE: 0.1101 + Полиномиальная (degree=3) MSE: 0.1045 + Гребневая (degree=3, alpha=1.0) MSE: 0.1078 +
+

+ +
+Итоговая модель подбирается учитывая зависимость в данных, +как правило полиномиальная регрессия справляется лучше, а коэф регуляризации в гребневой регрессии помогает избежать +переобучения. +
\ No newline at end of file diff --git a/antonov_dmitry_lab_1/lab1.py b/antonov_dmitry_lab_1/lab1.py new file mode 100644 index 0000000..f92c5d4 --- /dev/null +++ b/antonov_dmitry_lab_1/lab1.py @@ -0,0 +1,97 @@ +import numpy as np +from matplotlib import pyplot as plt +from skimage.metrics import mean_squared_error +from sklearn.datasets import make_moons, make_circles, make_classification +from sklearn.linear_model import LinearRegression, Ridge +from sklearn.model_selection import train_test_split +from sklearn.pipeline import make_pipeline +from sklearn.preprocessing import StandardScaler, PolynomialFeatures + +X, y = make_classification( + 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) +linearly_dataset = (X, y) +moon_dataset = make_moons(noise=0.3, random_state=0) +circles_dataset = make_circles(noise=0.2, factor=0.5, random_state=1) +datasets = [moon_dataset, circles_dataset, linearly_dataset] + +""" +Данные: +· moon_dataset +· circles_dataset +· linearly_dataset +""" +for ds_cnt, ds in enumerate(datasets): + X, y = ds + X = StandardScaler().fit_transform(X) + X_train, X_test, y_train, y_test = train_test_split( + X, y, test_size=.4, random_state=42 + ) + """ + Модели: + · Линейную регрессию + · Полиномиальную регрессию (со степенью 3) + · Гребневую полиномиальную регрессию (со степенью 3, alpha = 1.0) + """ + + # Линейная + linear_regression = LinearRegression() + linear_regression.fit(X_train, y_train) + linear_predictions = linear_regression.predict(X_test) + linear_mse = mean_squared_error(y_test, linear_predictions) + + # Полиномиальная (degree=3) + poly_regression = make_pipeline(PolynomialFeatures(degree=3), LinearRegression()) + poly_regression.fit(X_train, y_train) + poly_predictions = poly_regression.predict(X_test) + poly_mse = mean_squared_error(y_test, poly_predictions) + + # Гребневая (degree=3, alpha=1.0) + poly_regression_alpha = make_pipeline(PolynomialFeatures(degree=3), Ridge(alpha=1.0)) + poly_regression_alpha.fit(X_train, y_train) + poly_alpha_predictions = poly_regression_alpha.predict(X_test) + poly_alpha_mse = mean_squared_error(y_test, poly_alpha_predictions) + + # График данных + plt.figure(figsize=(10, 6)) + plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap='coolwarm') + plt.title('Датасет №' + str(ds_cnt)) + plt.xlabel('X') + plt.ylabel('Y') + + # График линейной модели + plt.figure(figsize=(10, 6)) + plt.scatter(X_test[:, 0], X_test[:, 1], c=linear_predictions, cmap='coolwarm') + plt.title('Линейная ds'+ str(ds_cnt)) + plt.xlabel('X') + plt.ylabel('Y') + plt.show() + + # График полиномиальной модели (degree=3) + plt.figure(figsize=(10, 6)) + plt.scatter(X_test[:, 0], X_test[:, 1], c=poly_predictions, cmap='coolwarm') + plt.title('Полиномиальная (degree=3) ds' + str(ds_cnt)) + plt.xlabel('X') + plt.ylabel('Y') + plt.show() + + # График гребневой модели (degree=3, alpha=1.0) + plt.figure(figsize=(10, 6)) + plt.scatter(X_test[:, 0], X_test[:, 1], c=poly_alpha_predictions, cmap='coolwarm') + plt.title('Гребневая (degree=3, alpha=1.0) ds' + str(ds_cnt)) + plt.xlabel('X') + plt.ylabel('Y') + plt.show() + + # Сравнение качества + print('Линейная MSE:', linear_mse) + print('Полиномиальная (degree=3) MSE:', poly_mse) + print('Гребневая (degree=3, alpha=1.0) MSE:', poly_alpha_mse) + diff --git a/antonov_dmitry_lab_1/screens/myplot1.png b/antonov_dmitry_lab_1/screens/myplot1.png new file mode 100644 index 0000000..8341361 Binary files /dev/null and b/antonov_dmitry_lab_1/screens/myplot1.png differ diff --git a/antonov_dmitry_lab_1/screens/myplot10.png b/antonov_dmitry_lab_1/screens/myplot10.png new file mode 100644 index 0000000..ad58249 Binary files /dev/null and b/antonov_dmitry_lab_1/screens/myplot10.png differ diff --git a/antonov_dmitry_lab_1/screens/myplot11.png b/antonov_dmitry_lab_1/screens/myplot11.png new file mode 100644 index 0000000..a26f8ba Binary files /dev/null and b/antonov_dmitry_lab_1/screens/myplot11.png differ diff --git a/antonov_dmitry_lab_1/screens/myplot12.png b/antonov_dmitry_lab_1/screens/myplot12.png new file mode 100644 index 0000000..84e0d74 Binary files /dev/null and b/antonov_dmitry_lab_1/screens/myplot12.png differ diff --git a/antonov_dmitry_lab_1/screens/myplot2.png b/antonov_dmitry_lab_1/screens/myplot2.png new file mode 100644 index 0000000..0c50b29 Binary files /dev/null and b/antonov_dmitry_lab_1/screens/myplot2.png differ diff --git a/antonov_dmitry_lab_1/screens/myplot3.png b/antonov_dmitry_lab_1/screens/myplot3.png new file mode 100644 index 0000000..19cc7d4 Binary files /dev/null and b/antonov_dmitry_lab_1/screens/myplot3.png differ diff --git a/antonov_dmitry_lab_1/screens/myplot4.png b/antonov_dmitry_lab_1/screens/myplot4.png new file mode 100644 index 0000000..03c667b Binary files /dev/null and b/antonov_dmitry_lab_1/screens/myplot4.png differ diff --git a/antonov_dmitry_lab_1/screens/myplot5.png b/antonov_dmitry_lab_1/screens/myplot5.png new file mode 100644 index 0000000..de743ae Binary files /dev/null and b/antonov_dmitry_lab_1/screens/myplot5.png differ diff --git a/antonov_dmitry_lab_1/screens/myplot6.png b/antonov_dmitry_lab_1/screens/myplot6.png new file mode 100644 index 0000000..d22bdbc Binary files /dev/null and b/antonov_dmitry_lab_1/screens/myplot6.png differ diff --git a/antonov_dmitry_lab_1/screens/myplot7.png b/antonov_dmitry_lab_1/screens/myplot7.png new file mode 100644 index 0000000..29f6740 Binary files /dev/null and b/antonov_dmitry_lab_1/screens/myplot7.png differ diff --git a/antonov_dmitry_lab_1/screens/myplot8.png b/antonov_dmitry_lab_1/screens/myplot8.png new file mode 100644 index 0000000..d75641a Binary files /dev/null and b/antonov_dmitry_lab_1/screens/myplot8.png differ diff --git a/antonov_dmitry_lab_1/screens/myplot9.png b/antonov_dmitry_lab_1/screens/myplot9.png new file mode 100644 index 0000000..0ef0f8c Binary files /dev/null and b/antonov_dmitry_lab_1/screens/myplot9.png differ