Введение

Привет всем, я рад сообщить, что я выполнил задание 1 в рамках моей стажировки по науке о данных и бизнес-аналитике в фонде sparks в рамках программы стажировок для выпускников.

Сценарий

В фонде Sparks был консультант, который консультировал многих студентов на своем пути консультирования.

И теперь она получила повышение до старшего советника в The Sparks Foundation
вместе с этим, теперь ей приходится консультировать 25 студентов из группы, которые только что сдали 12-й стандарт.

Основываясь на его опыте консультирования, она знает, что студенты очень рады узнать, какой процент оценок они получат, если будут учиться столько времени.

Поэтому он решил дать им ответ, основанный на каком-то факте, а не на мнении.

Понимание контекста

Она собрала данные от студентов предыдущего набора о том, сколько часов они учились и сколько процентов они получили.
А потом она обратилась ко мне (стажеру в The Sparks Foundation) за предоставлением модели для прогнозирования процентных оценок на основе от количества часов, изучаемых студентами.

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

Сбор требований

Давайте посмотрим набор данных наших студентов из предыдущей партии.
Но перед импортом набора данных мы должны импортировать некоторые необходимые библиотеки, которые будут использоваться при создании модели.

Импорт библиотек

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
print("Libraries Imported Successfully")
Libraries Imported Successfully

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

Теперь мы импортируем наш набор данных, который хранится в CSV-файле с именем student_data.csv.

df = pd.read_csv("student_data.csv") 
print("Data imported Successfully")
Data imported Successfully

Проверка набора данных

После импорта набора данных мы проверим наши данные, в которых мы проверим 5 верхних и нижних записей набора данных.

#Print the top 5 records of df
df.head()

#Print the bottom 5 records of df
df.tail()

Для большего понимания мы будем использовать информационный метод DataFrame Panda, который предоставит исчерпывающую информацию о нет. столбцов и строк в наборе данных, а также типов данных и ненулевых значений и т. д.

dataset.info()

Проверка пропущенных значений

dataset.isnull().sum()

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

Визуализация данных

sns.set()
plt.figure(figsize=(12,6))
plt.scatter(dataset["Hours"],dataset["Scores"])
plt.title("Percentage of an student based on Study Hours",fontsize=18)
plt.xlabel("Hours",fontsize=12)
plt.ylabel("Percentage",fontsize=12)
plt.xticks(np.arange(1,10.0000001,0.5))
plt.grid()
plt.show()

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

мы также можем проверить силу корреляции между атрибутами (например, количеством часов обучения и процентными баллами) с помощью правильного метода.

Проверка корреляции между различными функциями набора данных

dataset.corr()

С коэффициентом корреляции 0,9762, что считается очень высокой положительной корреляцией между атрибутами.

Пока мы не завершили нашу часть проверки данных, и теперь мы переключимся на процесс построения модели.

Подготовка данных

Прежде всего, мы разделим наш набор данных на две части, одна из которых называется набором атрибутов, а другая — метками.

Преобразование DataFrame в ndarray

X = dataset.iloc[:, :-1].values   # converting DataFrame into ndarray(2D)
y = dataset.iloc[:,-1].values     # converting Series into ndarray(1D)
print(X[:5])

print(y[:5])

Разделение набора данных на обучающий набор и тестовый набор

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

Здесь я собираюсь использовать очень популярную библиотеку машинного обучения scikit-learn, которая очень легко справится с этой задачей.

Я взял класс train_test_split из модуля sklearn model_selection и предоставил некоторые аргументы, связанные с размером теста = 0,2 (например, 20% записей, хранящихся для проверки точности окончательной модели).

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.2,random_state=1)
print(X_train[:5])

print(y_train[:5])

print(X_test)

print(y_test)

Обучение простой модели линейной регрессии на обучающем наборе

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

Для обучения нашей модели линейной регрессии я буду использовать класс LinearRegression из модуля linear_model Sklearn.
Он очень быстро обучит нашу модель.

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train,y_train)
print("Model Trained Successfully")
Model Trained Successfully

Предсказать результаты набора тестов

Теперь мы направляемся к прогнозированию некоторых результатов обучающих и тестовых наборов данных и визуализации их на диаграмме.

y_pred = regressor.predict(X_test)
y_pred

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

data = pd.DataFrame({'Actual':y_test,'predicted':y_pred})
print(data)

Визуализация результатов тренировочного набора

Теперь сначала я визуализирую набор обучающих данных с их обучающим набором и прогнозируемым набором.

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

plt.scatter(X_train,y_train, color='magenta')
plt.plot(X_train,regressor.predict(X_train), color="cyan")
plt.title('Marks Vs. Study Hours (Training Set)')
plt.xlabel("Study of hours")
plt.ylabel("Student Marks")
plt.show()

Визуализация результатов набора тестов

Точно так же мы можем визуализировать результаты набора тестов.

plt.scatter(X_test,y_test, color='magenta')
plt.plot(X_train,regressor.predict(X_train), color="cyan")
plt.title('Marks Vs. Study Hours (Test Set)')
plt.xlabel("Study of hours")
plt.ylabel("Student Marks")
plt.show()

Оценка модели

Последним шагом является оценка производительности алгоритма.

Этот шаг особенно важен для сравнения того, насколько хорошо алгоритмы работают с конкретным набором данных.
Для простоты здесь я выбрал показатель средней абсолютной ошибки.

Если вы хотите узнать среднее абсолютное расстояние модели при прогнозировании, вы можете использовать MAE. Другими словами, вы хотите знать, насколько прогнозы в среднем близки к реальной модели.

Просто имейте в виду, что низкие значения MAE указывают на то, что модель правильно предсказывает. Большие значения MAE указывают на то, что модель плохо прогнозирует.

from sklearn.metrics import mean_absolute_error
print("MAE",np.round(mean_absolute_error(y_test,y_pred),2))
MAE 7.88

Окончательная модель для передачи нашему старшему консультанту

Наконец, мы достигли нашей окончательной модели, которая выглядит красиво и готова передать нашему старшему консультанту, что будет очень полезно для нее, чтобы давать ответы своим ученикам.

study_hours = float(input("Enter no. of hours you want to give for your study in a day : "))
a=np.array(study_hours).reshape(-1,1)
pred = regressor.predict(a)
if a[0][0]>=8:
    ini="excellent"
    print("\nYou made an {} decision for studying {} hours in a day, then I will say you can score {} percentage of Marks.".format(ini,a[0][0],np.round(pred[0],0)))
elif a[0][0]>5 and a[0][0]<8:
    ini="average"
    print("\nYou made a {} decision for studying {} hours in a day, then I will say you can score {} percentage of Marks.".format(ini,a[0][0],np.round(pred[0],0)))
else:
    ini="poor"
    print("\nYou made a {} decision for studying {} hours in a day, then I will say you can score {} percentage of Marks."
Enter no. of hours you want to give for your study in a day : 8

You made an excellent decision for studying 8.0 hours in a day, then I will say you can score 82.0 percentage of Marks.

Спасибо, что прочитали объяснение модели, и не стесняйтесь оставлять свои ценные отзывы. Я буду рад видеть вас там.