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:
commit
40f7706378
1001
madyshev_egor_lab_5/StudentsPerformance.csv
Normal file
1001
madyshev_egor_lab_5/StudentsPerformance.csv
Normal file
File diff suppressed because it is too large
Load Diff
57
madyshev_egor_lab_5/main.py
Normal file
57
madyshev_egor_lab_5/main.py
Normal 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))
|
41
madyshev_egor_lab_5/readme.md
Normal file
41
madyshev_egor_lab_5/readme.md
Normal 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
|
||||||
|
|
||||||
|
Логическая регрессия не подошла так как требует чтобы переменная ответа была двоичной.
|
||||||
|
Из результатов четырех моделей видно, что для решения задачи предсказания оценки по математике неплохо подходит модель Линейной регрессии.
|
||||||
|
Модель гребневой регрессии имеет схожие результаты. Далее идет лассо, и хуже всех полиномиальная регрессия.
|
||||||
|
|
||||||
|
Вывод: Для решения задачи предсказания результатов экзамена по математике неплохо подходят линейные модели, а именно линейная регрессия и гребневая регрессия
|
Loading…
Reference in New Issue
Block a user