Merge pull request 'madyshev_egor_lab_5 is ready' (#122) from madyshev_egor_lab_5 into main

Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/122
This commit is contained in:
Alexey 2023-11-06 21:36:38 +04:00
commit 40f7706378
3 changed files with 1099 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,57 @@
import numpy as np
import pandas as pb
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression, Perceptron, LogisticRegression, Lasso, Ridge
from sklearn.neural_network import MLPClassifier, MLPRegressor
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import LabelEncoder, OneHotEncoder, MinMaxScaler
from sklearn.tree import DecisionTreeRegressor, DecisionTreeClassifier
from sklearn.preprocessing import PolynomialFeatures
df = pb.read_csv("StudentsPerformance.csv", sep=",", encoding="windows-1251")
df1 = df
print("Данные без подготовки:")
with pb.option_context('display.max_rows', None, 'display.max_columns', None, 'display.width', 1000):
print(df[:5])
def prepareStringData(columnName):
uniq = df[columnName].unique()
mp = {}
for i in uniq:
mp[i] = len(mp)
df[columnName] = df[columnName].map(mp)
print()
print("Данные после подготовки:")
prepareStringData("gender")
prepareStringData("race/ethnicity")
prepareStringData("parental level of education")
prepareStringData("lunch")
prepareStringData("test preparation course")
with pb.option_context('display.max_rows', None, 'display.max_columns', None, 'display.width', 1000):
print(df[:5])
X = df[["gender", "race/ethnicity", "lunch", "test preparation course", "parental level of education", "reading score", "writing score"]]
y = df["math score"]
X_train, X_Test, y_train, y_test = train_test_split(X, y, test_size=0.26, random_state=42)
lnr = LinearRegression()
lnr = lnr.fit(X_train,y_train)
poly_regression = make_pipeline(PolynomialFeatures(degree=4), LinearRegression())
poly_regression.fit(X_train, y_train)
lasso = Lasso()
lasso.fit(X_train, y_train)
ridge = Ridge()
ridge.fit(X_train, y_train)
print("Линейная регрессия: ", lnr.score(X_Test,y_test))
print("Полиномиальная регрессия: ", poly_regression.score(X_Test,y_test))
print("Лассо-регрессия: ", lasso.score(X_Test,y_test))
print("Гребневая регрессия: ", ridge.score(X_Test,y_test))

View File

@ -0,0 +1,41 @@
# Задание
Использовать регрессию по варианту для данных из таблицы 1 по варианту (таблица 10), самостоятельно сформулировав задачу. Оценить, насколько хорошо она подходит для решения сформулированной вами задачи.
## Задание по варианту
Полиномиальная регрессия
## Решение
### Запуск программы
Для запуска программы необходимо запустить файл main.py, содержащий код программы
### Используемые технологии
Программа использует следующие библиотеки:
- numpy - библиотека для работы с массивами и матрицами.
- matplotlib - библиотека для создания графиков и визуализации данных.
- sklearn - библиотека для машинного обучения и анализа данных.
### Что делает программа
Программа читает данные из csv файла. Подготавливает их для работы модели, приводя текстовые параметры к числам. И пытается научиться предсказывать оценку по математике на основании остальных данных с помощью различных моделей.
### Тесты
Данные без подготовки:
gender race/ethnicity parental level of education lunch test preparation course math score reading score writing score
0 female group B bachelor's degree standard none 72 72 74
1 female group C some college standard completed 69 90 88
2 female group B master's degree standard none 90 95 93
3 male group A associate's degree free/reduced none 47 57 44
4 male group C some college standard none 76 78 75
Данные после подготовки:
gender race/ethnicity parental level of education lunch test preparation course math score reading score writing score
0 0 0 0 0 0 72 72 74
1 0 1 1 0 1 69 90 88
2 0 0 2 0 0 90 95 93
3 1 2 3 1 0 47 57 44
4 1 1 1 0 0 76 78 75
Линейная регрессия: 0.8769480272687482
Полиномиальная регрессия: 0.736490555768213
Лассо-регрессия: 0.8299946331354273
Гребневая регрессия: 0.8768384994076267
Логическая регрессия не подошла так как требует чтобы переменная ответа была двоичной.
Из результатов четырех моделей видно, что для решения задачи предсказания оценки по математике неплохо подходит модель Линейной регрессии.
Модель гребневой регрессии имеет схожие результаты. Далее идет лассо, и хуже всех полиномиальная регрессия.
Вывод: Для решения задачи предсказания результатов экзамена по математике неплохо подходят линейные модели, а именно линейная регрессия и гребневая регрессия