diff --git a/belyaeva_ekaterina_lab_1/README.md b/belyaeva_ekaterina_lab_1/README.md new file mode 100644 index 0000000..3d605b5 --- /dev/null +++ b/belyaeva_ekaterina_lab_1/README.md @@ -0,0 +1,49 @@ +## Задание + +Вариант 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) + +## Как запустить лабораторную + +Запустить файл main.py + +## Используемые технологии + +Библиотеки matplotlib, scikit-learn, их компоненты, все описано ниже + +## Описание лабораторной (программы) + +Программа генерирует набор данных с помощью функции make_classification с параметрами из задания +Далее происходит разделение данных на обучащей и тестовый наборы с помощью функции train_test_split +Потом происходит обучение моделей на тестовой выборке +И предсказание уже на данных, которые остались +В конце программа строит графики, отображающие данные в задании модели и выводит в консоль оценку их работы + +## Результат + +В результате программа выводит графики, скриншоты которых находятся в репозитории, а также оценки производительности обучения, полученные через model.score: +Линейная регрессия: 0.92 +Полиномиальная регрессия: 0.96 +Гребневая полиномиальная регрессия: 0.7958276459808132 +Из результата видно, что наиболее качественной для решения данной задачи оказалась полиномиальная регрессия, наименее - гребневая полиномиальная + +После полученных результатов я решила провести несколько тестов и вот что из этого вышло: + +Если поменять test_size c 0.8 на 0.2, то результат работы моделей ухудшится, и чем хуже он был до этого, тем еще более хуже стал +Линейная регрессия: 0.8725 +Полиномиальная регрессия: 0.955 +Гребневая полиномиальная регрессия: 0.6678458571780717 + +Если изменить количество samples с 500 на 2500, то результат работы моделей значительно улучшится: +Линейная регрессия: 0.996 +Полиномиальная регрессия: 0.998 +Гребневая полиномиальная регрессия: 0.9701030991054763 +Несмотря на это, по качеству модели выстроены все в том же порядке, что и при вводе дефолтных данных, хотя по результату все они решают задачу достаточно хорошо при получении достаточного количества данных \ No newline at end of file diff --git a/belyaeva_ekaterina_lab_1/data.png b/belyaeva_ekaterina_lab_1/data.png new file mode 100644 index 0000000..1ff7b20 Binary files /dev/null and b/belyaeva_ekaterina_lab_1/data.png differ diff --git a/belyaeva_ekaterina_lab_1/linearRegression.png b/belyaeva_ekaterina_lab_1/linearRegression.png new file mode 100644 index 0000000..d43aa4c Binary files /dev/null and b/belyaeva_ekaterina_lab_1/linearRegression.png differ diff --git a/belyaeva_ekaterina_lab_1/main.py b/belyaeva_ekaterina_lab_1/main.py new file mode 100644 index 0000000..991c2f3 --- /dev/null +++ b/belyaeva_ekaterina_lab_1/main.py @@ -0,0 +1,74 @@ +import matplotlib.pyplot as plt +from sklearn.datasets import make_classification +from sklearn.model_selection import train_test_split +from sklearn.linear_model import LogisticRegression +from sklearn.preprocessing import PolynomialFeatures +from sklearn.pipeline import make_pipeline +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 + +# Генерируем данные +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.8, random_state=random_state) + +# Обучение моделей +# Линейная регрессия +linear_regression = LogisticRegression() +linear_regression.fit(X_train, y_train) +linear_regression_score = linear_regression.score(X_train, y_train) + +# Полиномиальная регрессия со степенью 4 +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) + +# Гребневая полиномиальная регрессия со степенью 4 и alpha = 1.0 +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) + +# Предсказание на тестовом наборе +linear_pred = linear_regression.predict(X_test) +poly_pred = poly_regression.predict(X_test) +ridge_pred = ridge_regression.predict(X_test) + +# Построение графиков +plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap="bwr") +plt.title("График исходных данных") +plt.xlabel("Признак 1") +plt.ylabel("Признак 2") +plt.show() + +plt.scatter(X_test[:, 0], X_test[:, 1], c=linear_pred, cmap="bwr") +plt.title("График предсказаний линейной регрессии") +plt.xlabel("Признак 1") +plt.ylabel("Признак 2") +plt.show() + +plt.scatter(X_test[:, 0], X_test[:, 1], c=poly_pred, cmap="bwr") +plt.title("График предсказаний полиномиальной регрессии") +plt.xlabel("Признак 1") +plt.ylabel("Признак 2") +plt.show() + +plt.scatter(X_test[:, 0], X_test[:, 1], c=ridge_pred, cmap="bwr") +plt.title("График предсказаний гребневой полиномиальной регрессии") +plt.xlabel("Признак 1") +plt.ylabel("Признак 2") +plt.show() + +print("Результаты моделей:") +print("Линейная регрессия: {}".format(linear_regression_score)) +print("Полиномиальная регрессия: {}".format(polynomial_regression_score)) +print("Гребневая полиномиальная регрессия: {}".format(ridge_regression_score)) \ No newline at end of file diff --git a/belyaeva_ekaterina_lab_1/polyRegression.png b/belyaeva_ekaterina_lab_1/polyRegression.png new file mode 100644 index 0000000..6d82905 Binary files /dev/null and b/belyaeva_ekaterina_lab_1/polyRegression.png differ diff --git a/belyaeva_ekaterina_lab_1/ridgePolyRegression.png b/belyaeva_ekaterina_lab_1/ridgePolyRegression.png new file mode 100644 index 0000000..663e5e0 Binary files /dev/null and b/belyaeva_ekaterina_lab_1/ridgePolyRegression.png differ