Успех в учебе имеет решающее значение. Взрослые, добившиеся успехов в учебе, с большей вероятностью будут иметь возможности на работе. Кроме того, взрослые, достигшие успехов в учебе, менее склонны к преступной деятельности.

Не все студенты имеют одинаковый жизненный опыт. Некоторые учащиеся пользуются полной поддержкой своих семей, а также есть учащиеся, в чьих семьях отсутствует гармония. Многие вещи могут повлиять на успех студента в академии. С этой целью я создам модель машинного обучения, чтобы предсказать ценность как математических, так и португальских предметов на основе опыта учащегося. Наборы данных, которые я использовал, были взяты из UCI.

Профилирование данных

Импорт данных

#Importing Data
import pandas as pd
pd.set_option('display.max_columns',None)
df_mat = pd.read_csv('student-mat.csv',sep=';')
df_por = pd.read_csv('student-por.csv',sep=';')

Я буду использовать два набора наборов данных; первый — это набор данных, содержащий результаты урока математики, а второй — набор данных, содержащий курс португальского языка. Я назову первый набор данных df_mat, а второй набор данных назову df_por. Данные, загруженные из UCI, будут сохранены как student-mat.csv и student-por.csv.

Объединение двух наборов данных

#Merging Two Datasets
df = pd.concat([df_mat, df_por])

После импорта набора данных я бы объединил два набора данных в один набор данных, используя функцию .concat из Pandas, и назначил его как df.

Создание столбца общей оценки

#Creating The Total Grade Column
df['total grade'] = (df['G1']+df['G2']+df['G3'])/3
df = df.drop(['G1','G2','G3'],axis=1)

Следующим шагом я создам столбец общая оценка. Этот столбец содержит среднее значение для столбцов G1, G2 и G3. После создания столбца общей оценки я удалю столбцы G1, G2 и G3.

Отображение длины данных

#Showing The Length of The Data
print("\nThe Length of The Data: ", len(df))

Второй шаг — показать, сколько данных содержится в наборе данных, используя len(). В результате размер этих данных составляет 1044.

Отображение формы данных

#Showing The Shape of The Data
print("\nThe Shape of The Data: ", df.shape)

Третий шаг — отобразить форму данных с помощью .shape. В результате эти данные содержат 1044 строки и 31 столбец.

Отображение информации о данных

#Showing The Information of The Data
print("\nThe Information of The Data: ")
print(df.info())

Четвертый шаг — получение информации из данных с помощью функции .info().

Отображение статистических расчетов

#Showing The Statistical Calculations
print("\nThe Statistical Calculations: ")
print(df.describe().T)

Пятый шаг — отобразить статистический анализ данных с помощью .describe().

Отображение уникальных данных

#Showing The Unique Data
print("\nThe Unique Data: ")
print(df.nunique())

Шестой шаг профилирования данных — отображение уникальных данных из каждого столбца с помощью функции .nunique().

Изменение имени столбца и значения столбца

df.columns = df.columns.str.capitalize()
df.rename(columns={'Famsize': 'Family Size',
                   'Pstatus': 'Parent Cohabitation Status',
                   'Medu': 'Mother Education',
                   'Fedu': 'Father Education',
                   'Mjob': 'Mother Job',
                   'Fjob': 'Father Job',
                   'Traveltime': 'Travel Time',
                   'Studytime': 'Study Time',
                   'Schoolsup': 'Extra Educational Support',
                   'Famsup': 'Family Educational Support',
                   'Paid': 'Extra Paid Course',
                   'Activities': 'Extracurricular Activities',
                   'Nursery': 'Attending Nursery School',
                   'Higher': 'Wants To Take Higher Ed',
                   'Internet': 'Internet Access',
                   'Romantic': 'Romantic Relationship',
                   'Famrel': 'Family Relationship',
                   'Freetime': 'Free Time After School',
                   'Goout': 'Going Out With Friends',
                   'Dalc': 'Workday Alcohol Consumption',
                   'Walc': 'Weekend Alcohol Consumption',
                   'Health': 'Current Health Status',
                   'Absences': 'Number of School Absences',
                   'Total grade': 'Total Grade'}, inplace=True)

В поисках корреляции

#Looking For A Correlation
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
plt.figure(figsize=(17, 15))
corr_mask = np.triu(df.corr())
h_map = sns.heatmap(df.corr(), mask=corr_mask, annot=True, cmap='Blues')
plt.yticks(rotation=360)
plt.xticks(rotation=90)
plt.show()

Последним этапом профилирования данных является поиск корреляции каждых данных путем их визуализации. В этой части я буду использовать Seaborn, Matplotlib и Numpy.

Очистка данных

Поиск пропущенного значения в каждом столбце

#Looking For The Missing Value in Each Column
print("\nLooking For The Missing Value in Each Column: ")
print(df.isnull().sum())

Я использую isnull() и sum(), чтобы узнать, сколько пропущенного значения. Оказывается, в этом наборе данных нет пропущенного значения.

Проверка школьной колонки

#Checking The School Column
sns.countplot(x='School', data=df, palette='flare')
plt.show()

На рис. 12 этот набор данных был собран по двум школам: GP как Gabriel Pereira и MS как Mousinho da Silveira. В этом наборе данных ученики Габриэля Перейры превосходят учеников Мусиньо да Силвейры.

Проверка секс-колонки

#Checking The Sex Column
mask_sex = {'F':'Female',
            'M':'Male'}
df['Sex'] = df['Sex'].map(mask_sex)
sns.countplot(x=df['Sex'], palette='flare')
plt.show()

На Рис. 13 учащихся женского пола больше, чем учащихся мужского пола.

sns.countplot(x='School', hue='Sex', data=df, palette='flare')
plt.show()

На рис. 14 учениц Габриэля Перейры больше, чем юношей. Точно так же в Mousinho da Silveira учащихся женского пола больше, чем учащихся мужского пола.

Проверка столбца «Возраст»

#Checking The Age Column
sns.countplot(x=df['Age'], palette='flare')
plt.show()

sns.countplot(x='Sex', hue='Age', data=df, palette='flare')
plt.show()

sns.catplot(x='School', hue='Sex', col='Age', data=df, kind='count', palette='flare')
plt.show()

Проверка столбца адреса

#Checking The Address Column
mask_address = {'U':'Urban',
                'R':'Rural'}
df['Address'] = df['Address'].map(mask_address)
sns.countplot(x=df['Address'], palette='flare')
plt.show()

sns.countplot(x='Sex', hue='Address', data=df, palette='flare')
plt.show()

sns.catplot(x='School', hue='Sex', col='Address', data=df, kind='count', palette='flare')
plt.show()

Проверка столбца «Размер семьи»

#Checking The Family Size Column
mask_famsize = {'LE3':'Less Or Equal To 3',
                'GT3':'Greater Than 3'}
df['Family Size'] = df['Family Size'].map(mask_famsize)
sns.countplot(x=df['Family Size'], palette='flare')
plt.show()

sns.countplot(x='Sex', hue='Family Size', data=df, palette='flare')
plt.show()

sns.catplot(x='School', hue='Sex', col='Family Size', data=df, kind='count', palette='flare')
plt.show()

Проверка столбца статуса совместного проживания родителей

#Checking The Parent Cohabitation Status Colum
mask_pstatus = {'T':'Living Together',
                'A':'Apart'}
df['Parent Cohabitation Status'] = df['Parent Cohabitation Status'].map(mask_pstatus)
sns.countplot(x=df['Parent Cohabitation Status'], palette='flare')
plt.show()

sns.countplot(x='Sex', hue='Parent Cohabitation Status', data=df, palette='flare')
plt.show()

sns.catplot(x='School', hue='Sex', col='Parent Cohabitation Status', data=df, kind='count', palette='flare')
plt.show()

Проверка колонки «Образование матери»

#Checking The Mother Education Column
sns.countplot(x=df['Mother Education'], palette='flare')
plt.show()

0 = нет
1 = начальное образование (4 класс)
2 = 5–9 классы
3 = среднее образование
4 = высшее образование

sns.countplot(x='Sex', hue='Mother Education', data=df, palette='flare')
plt.show()

sns.catplot(x='School', hue='Sex', col='Mother Education', data=df, kind='count', palette='flare')
plt.show()

Проверка столбца «Образование отца»

#Checking The Father Education Column
sns.countplot(x=df['Father Education'], palette='flare')
plt.show()

0 = нет
1 = начальное образование (4 класс)
2 = 5–9 классы
3 = среднее образование
4 = высшее образование

sns.countplot(x='Sex', hue='Father Education', data=df, palette='flare')
plt.show()

sns.catplot(x='School', hue='Sex', col='Father Education', data=df, kind='count', palette='flare')
plt.show()

Проверка столбца «Работа матери»

#Checking The Mother Job Column
mask_mjob = {'teacher':'Teacher',
             'health':'Health',
             'services':'Services',
             'at_home':'At Home',
             'other':'Other'}
df['Mother Job'] = df['Mother Job'].map(mask_mjob)
sns.countplot(x=df['Mother Job'], palette='flare')
plt.show()

sns.countplot(x='Sex', hue='Mother Job', data=df, palette='flare')
plt.show()

sns.catplot(x='School', hue='Sex', col='Mother Job', data=df, kind='count', palette='flare')
plt.show()

Проверка столбца «Работа отца»

#Checking The Father Job Column
mask_fjob = {'teacher':'Teacher',
             'health':'Health',
             'services':'Services',
             'at_home':'At Home',
             'other':'Other'}
df['Father Job'] = df['Father Job'].map(mask_fjob)
sns.countplot(x=df['Father Job'], palette='flare')
plt.show()

sns.countplot(x='Sex', hue='Father Job', data=df, palette='flare')
plt.show()

sns.catplot(x='School', hue='Sex', col='Father Job', data=df, kind='count', palette='flare')
plt.show()

Проверка столбца «Причина»

#Checking The Reason Column
mask_reason = {'home':'Home',
               'reputation':'Reputation',
               'course':'Course',
               'other':'Other'}
df['Reason'] = df['Reason'].map(mask_reason)
sns.countplot(x=df['Reason'], palette='flare')
plt.show()

В этом столбце указаны причины, по которым учащиеся выбрали школу: близость к «Домашняя», школа «Репутация», предпочтения «Курс». или «Другое».

Проверка колонки Guardian

#Checking The Guardian Column
mask_guardian = {'mother':'Mother',
                 'father':'Father',
                 'other':'Other'}
df['Guardian'] = df['Guardian'].map(mask_guardian)
sns.countplot(x=df['Guardian'], palette='flare')
plt.show()

В этом столбце содержится информация о том, кто является опекуном учащегося: «Мать», «Отец» или «Другое».

Проверка столбца времени в пути

#Checking The Travel Time Column
sns.countplot(x=df['Travel Time'], palette='flare')
plt.show()

Этот столбец содержит информацию о том, как долго учащийся едет в школу: 1 = ‹15 минут, 2 = от 15 до 30 минут, 3 = от 30 минут до 1 часа или 4 = >1 час.

Проверка столбца времени обучения

#Checking The Study Time Column
sns.countplot(x=df['Study Time'], palette='flare')
plt.show()

Этот столбец содержит информацию о еженедельном времени обучения: 1 = ‹2 часа, 2 = от 2 до 5 часов, 3 = от 5 до 10 часов или 4 = 10 часов.

Проверка столбца «Ошибки»

#Checking The Failures Column
sns.countplot(x=df['Failures'], palette='flare')
plt.show()

Этот столбец содержит информацию о количестве прошлых отказов класса.

Проверка столбца «Дополнительная образовательная поддержка»

#Checking The Extra Educational Support Column
mask_shoolsup = {'yes':'Yes',
                 'no':'No'}
df['Extra Educational Support'] = df['Extra Educational Support'].map(mask_shoolsup)
sns.countplot(x=df['Extra Educational Support'], palette='flare')
plt.show()

В этом столбце содержится информация о том, получает ли учащийся дополнительную образовательную поддержку или нет.

Проверка колонки поддержки семейного образования

#Checking The Family Educational Support Column
mask_famsup = {'yes':'Yes',
               'no':'No'}
df['Family Educational Support'] = df['Family Educational Support'].map(mask_famsup)
sns.countplot(x=df['Family Educational Support'], palette='flare')
plt.show()

В этом столбце содержится информация о том, получает ли учащийся семейную образовательную поддержку или нет.

Проверка столбца «Дополнительный платный курс»

#Checking The Extra Paid Course Column
mask_paid = {'yes':'Yes',
             'no':'No'}
df['Extra Paid Course'] = df['Extra Paid Course'].map(mask_paid)
sns.countplot(x=df['Extra Paid Course'], palette='flare')
plt.show()

В этом столбце содержится информация о том, посещает ли студент платный курс или нет.

Проверка столбца «Внеклассная деятельность»

#Checking The Extracurricular Activities Column
mask_activities = {'yes':'Yes',
                   'no':'No'}
df['Extracurricular Activities'] = df['Extracurricular Activities'].map(mask_activities)
sns.countplot(x=df['Extracurricular Activities'], palette='flare')
plt.show()

В этом столбце содержится информация о том, есть ли у учащихся внеклассные занятия или нет.

Проверка столбца «Посещение детского сада»

#Checking The Attending Nursery School Column
mask_nursery = {'yes':'Yes',
                'no':'No'}
df['Attending Nursery School'] = df['Attending Nursery School'].map(mask_nursery)
sns.countplot(x=df['Attending Nursery School'], palette='flare')
plt.show()

В этом столбце содержится информация о том, посещали ли учащиеся детский сад или нет.

Проверка в колонке «Хочет получить высшее образование»

#Checking The Wants To Take Higher Ed Column
mask_higher = {'yes':'Yes',
               'no':'No'}
df['Wants To Take Higher Ed'] = df['Wants To Take Higher Ed'].map(mask_higher)
sns.countplot(x=df['Wants To Take Higher Ed'], palette='flare')
plt.show()

В этом столбце содержится информация о том, хотят ли студенты получать высшее образование или нет.

Проверка столбца доступа к Интернету

#Checking The Internet Access Column
mask_internet = {'yes':'Yes',
                 'no':'No'}
df['Internet Access'] = df['Internet Access'].map(mask_internet)
sns.countplot(x=df['Internet Access'], palette='flare')
plt.show()

В этом столбце содержится информация о том, есть ли у учащихся доступ в Интернет дома или нет.

Проверка колонки романтических отношений

#Checking The Romantic Relationship Column
mask_romantic = {'yes':'Yes',
                 'no':'No'}
df['Romantic Relationship'] = df['Romantic Relationship'].map(mask_romantic)
sns.countplot(x=df['Romantic Relationship'], palette='flare')
plt.show()

В этом столбце содержится информация о том, есть ли у студентов романтические отношения или нет.

Проверка столбца семейных отношений

#Checking The Family Relationship Column
sns.countplot(x=df['Family Relationship'], palette='flare')
plt.show()

В этой колонке содержится информация о качестве семейных отношений, 1 — очень плохо, 5 — отлично.

Проверка колонки «Свободное время после школы»

#Checking The Free Time After School Column
sns.countplot(x=df['Free Time After School'], palette='flare')
plt.show()

В этой колонке содержится информация о том, сколько свободного времени у учащихся после школы; 1 — очень низкий, 5 — очень высокий.

Проверка колонки «В гостях у друзей»

#Checking The Going Out With Friends Column
sns.countplot(x=df['Going Out With Friends'], palette='flare')
plt.show()

В этом столбце содержится информация о том, сколько времени учащийся провел в компании друзей; 1 — очень низкий, 5 — очень высокий.

Проверка столбца «Потребление алкоголя в рабочий день»

#Checking The Workday Alcohol Consumption Column
sns.countplot(x=df['Workday Alcohol Consumption'], palette='flare')
plt.show()

В этой колонке содержится информация о том, сколько алкоголя студент выпивает за рабочий день; 1 — очень низкий, 5 — очень высокий.

Проверка колонки потребления алкоголя в выходные дни

#Checking The Weekend Alcohol Consumption Column
sns.countplot(x=df['Weekend Alcohol Consumption'], palette='flare')
plt.show()

В этом столбце содержится информация о том, сколько алкоголя студент выпивает в выходные дни; 1 — очень низкий, 5 — очень высокий.

Проверка столбца текущего состояния работоспособности

#Checking The Current Health Status Column
sns.countplot(x=df['Current Health Status'], palette='flare')
plt.show()

В этом столбце содержится информация о текущем состоянии здоровья; 1 — очень плохо, 5 — очень хорошо.

Преобразование меток в наборе данных

#Label Conversion on The Dataset
print("\nLabel Conversion on The Dataset")
school = pd.get_dummies(df['School'], drop_first=True)
sex = pd.get_dummies(df['Sex'], drop_first=True)
address = pd.get_dummies(df['Address'], drop_first=True)
famsize = pd.get_dummies(df['Family Size'], drop_first=True)
pstatus = pd.get_dummies(df['Parent Cohabitation Status'], drop_first=True)
mjob = pd.get_dummies(df['Mother Job'], drop_first=True)
fjob = pd.get_dummies(df['Father Job'], drop_first=True)
reason = pd.get_dummies(df['Reason'], drop_first=True)
guardian = pd.get_dummies(df['Guardian'], drop_first=True)
schoolsup = pd.get_dummies(df['Extra Educational Support'], drop_first=True)
famsup = pd.get_dummies(df['Family Educational Support'], drop_first=True)
paid = pd.get_dummies(df['Extra Paid Course'], drop_first=True)
activities = pd.get_dummies(df['Extracurricular Activities'], drop_first=True)
nursery = pd.get_dummies(df['Attending Nursery School'], drop_first=True)
higher = pd.get_dummies(df['Wants To Take Higher Ed'], drop_first=True)
internet = pd.get_dummies(df['Internet Access'], drop_first=True)
romantic = pd.get_dummies(df['Romantic Relationship'], drop_first=True)

df = df.drop(['School',
              'Sex',
              'Address',
              'Family Size',
              'Parent Cohabitation Status',
              'Mother Job',
              'Father Job',
              'Reason',
              'Guardian',
              'Extra Educational Support',
              'Family Educational Support',
              'Extra Paid Course',
              'Extracurricular Activities',
              'Attending Nursery School',
              'Wants To Take Higher Ed',
              'Internet Access',
              'Romantic Relationship'], axis=1)

df = pd.concat([school,
                sex,
                address,
                famsize,
                pstatus,
                mjob,
                fjob,
                reason,
                guardian,
                schoolsup,
                famsup,
                paid,
                activities,
                nursery,
                higher,
                internet,
                romantic,
                df], axis=1)

Разделение функций и меток

#Separating Features and Labels
X = df.drop('Total Grade', axis=1)
y = df['Total Grade'].astype(int)

В этой части я создам две переменные; первая переменная — Xтолько с функциями и yтолько с меткой.

Подготовка обучения, тестирования и проверки набора данных

#Preparing Training, Testing, And Validating Dataset
from sklearn.model_selection import train_test_split
X_train_full, X_test, y_train_full, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
X_train, X_val, y_train, y_val = train_test_split(X_train_full, y_train_full, test_size=0.2, random_state=42)

Создайте модель машинного обучения

Следующим шагом является построение модели машинного обучения. Я буду сравнивать между LinearRegression, DecissionTreeRegressor, RandomForestRegressor, Lasso и Ridge.

Линейная регрессия

#Build a Machine Learning Model LinearRegression
from sklearn.linear_model import LinearRegression
model_linreg = LinearRegression()
model_linreg = model_linreg.fit(X_train, y_train)
y_pred_linreg = model_linreg.predict(X_test)

#Evaluating The Machine Learning Model
from sklearn.metrics import mean_squared_error, mean_absolute_error
import numpy as np

#Mean Squared Error
mse = mean_squared_error(y_test, y_pred_linreg)
print('\nMean squared error dari Testing Set:', round(mse, 2))

#Mean Absolute Error
mae = mean_absolute_error(y_test, y_pred_linreg)
print('Mean absolute error dari Testing Set:', round(mae, 2))

#Root Mean Squared Error
rmse = np.sqrt(mse)
print('Root Mean Squared Error dari Testing Set:', round(rmse, 2))

Регрессор дерева решений

#Build a Machine Learning Model DecisionTree
from sklearn.tree import DecisionTreeRegressor
model_dtr = DecisionTreeRegressor(random_state=42)
model_dtr = model_dtr.fit(X_train, y_train)
y_pred_dtr = model_dtr.predict(X_test)

#Evaluating The Machine Learning Model
from sklearn.metrics import mean_squared_error, mean_absolute_error
import numpy as np

#Mean Squared Error
mse = mean_squared_error(y_test, y_pred_dtr)
print('\nMean squared error dari Testing Set:', round(mse, 2))

#Mean Absolute Error
mae = mean_absolute_error(y_test, y_pred_dtr)
print('Mean absolute error dari Testing Set:', round(mae, 2))

#Root Mean Squared Error
rmse = np.sqrt(mse)
print('Root Mean Squared Error dari Testing Set:', round(rmse, 2))

Случайный лесной регрессор

#Build a Machine Learning Model RandomForest
from sklearn.ensemble import RandomForestRegressor
model_rfr = RandomForestRegressor(random_state=42)
model_rfr = model_rfr.fit(X_train, y_train)
y_pred_rfr = model_rfr.predict(X_test)

#Evaluating The Machine Learning Model
from sklearn.metrics import mean_squared_error, mean_absolute_error
import numpy as np

#Mean Squared Error
mse = mean_squared_error(y_test, y_pred_rfr)
print('\nMean squared error dari Testing Set:', round(mse, 2))

#Mean Absolute Error
mae = mean_absolute_error(y_test, y_pred_rfr)
print('Mean absolute error dari Testing Set:', round(mae, 2))

#Root Mean Squared Error
rmse = np.sqrt(mse)
print('Root Mean Squared Error dari Testing Set:', round(rmse, 2))

Лассо

#Build a Machine Learning Model Lasso
from sklearn.linear_model import Lasso
model_lasso = Lasso(random_state=42)
model_lasso = model_lasso.fit(X_train, y_train)
y_pred_lasso = model_lasso.predict(X_test)

#Evaluating The Machine Learning Model
from sklearn.metrics import mean_squared_error, mean_absolute_error
import numpy as np

#Mean Squared Error
mse = mean_squared_error(y_test, y_pred_lasso)
print('\nMean squared error dari Testing Set:', round(mse, 2))

#Mean Absolute Error
mae = mean_absolute_error(y_test, y_pred_lasso)
print('Mean absolute error dari Testing Set:', round(mae, 2))

#Root Mean Squared Error
rmse = np.sqrt(mse)
print('Root Mean Squared Error dari Testing Set:', round(rmse, 2))

хребет

#Build a Machine Learning Model Ridge
from sklearn.linear_model import Ridge
model_ridge = Ridge(random_state=42)
model_ridge = model_ridge.fit(X_train, y_train)
y_pred_ridge = model_ridge.predict(X_test)

#Evaluating The Machine Learning Model
from sklearn.metrics import mean_squared_error, mean_absolute_error
import numpy as np

#Mean Squared Error
mse = mean_squared_error(y_test, y_pred_ridge)
print('\nMean squared error dari Testing Set:', round(mse, 2))

#Mean Absolute Error
mae = mean_absolute_error(y_test, y_pred_ridge)
print('Mean absolute error dari Testing Set:', round(mae, 2))

#Root Mean Squared Error
rmse = np.sqrt(mse)
print('Root Mean Squared Error dari Testing Set:', round(rmse, 2))

Оценка модели машинного обучения

Следующим этапом после построения модели машинного обучения является оценка этой модели. В этом процессе оценки я рассмотрю значения среднеквадратичной ошибки, средней абсолютной ошибки и среднеквадратичной ошибки. Я возьму наименьшее значение RMSE, чтобы решить, какое из них лучше.

Линейная регрессия

Результат использования линейной регрессии: 5,302784 MSE, 1,862362 MAE и 2,302777 RMSE.

Регрессор дерева решений

Результат использования регрессора дерева решений: 13,40311 MSE, 2,796651 MAE и 3,661026 RMSE.

Случайный лесной регрессор

Результат использования регрессора случайного леса: 5,381274 MSE, 1,817679 MAE и 2,319757 RMSE.

Лассо

Результат использования Lasso: 7,84599 MSE, 2,238661 MAE и 2,801069 RMSE.

хребет

Результат использования Ridge составляет 5,299022 MSE, 1,862247 MAE и 2,301961 RMSE.

Исходя из этой оценки, модель машинного обучения с использованием метода Риджа имеет наименьшее среднеквадратичное отклонение.

Визуализируйте модель машинного обучения

#Visualize The Machine Learning Model
fig = plt.figure(figsize=(17, 10))
df = df.sort_values(by=['Total Grade'])
X = df.drop('Total Grade', axis=1)
y = df['Total Grade']
plt.scatter(range(X.shape[0]), model_ridge.predict(X), marker='.', label='Predict')
plt.scatter(range(X.shape[0]), y, color='red', label='Real')
plt.legend(loc='best', prop={'size': 10})
plt.show()

Проверка модели машинного обучения

#Validating The Machine Learning Model
for i in range(10):
    real = y_val.iloc[i]
    pred = int(model_ridge.predict(X_val.iloc[i].to_frame().T)[0])
    print(f'Real Value      ----->>>>> {real}\n'
          f'Predicted Value ----->>>>> {pred}')
    print()

Это от меня; Вы можете связаться со мной, если у вас есть критика, совет или вопрос об этом проекте. Спасибо, я очень ценю, что вы нашли время, чтобы прочитать это.