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

О наборе данных

Перед командой по исследованию рынка в AdRight поставлена ​​задача определить профиль типичного покупателя для каждого продукта беговой дорожки, предлагаемого CardioGood Fitness. Группа по исследованию рынка решает выяснить, существуют ли различия между линейками продуктов в отношении характеристик клиентов. Команда решает собрать данные о лицах, купивших беговую дорожку в розничном магазине CardioGoodFitness в течение предыдущих трех месяцев. Данные хранятся в файле CardioGoodFitness.csv.

Команда определяет следующие переменные клиента для изучения:

Товар — TM195, TM498 или TM798.
Пол —мужской или женский
Возраст
— в годах
Образование — в годах
Семейное положение — одиночка или партнерша
Доход — Годовой доход от дома($)
Использование – среднее количество раз, которое клиент планирует использовать на беговой дорожке каждую неделю.
Мили –среднее количество миль, которые клиент планирует проходить/пробегать каждую неделю.
Фитнес (целевой столбец) – самооценка физической формы по шкале от 1 до 5, где 1 – плохая форма, а 5 – отличная форма.

Вы можете скачать набор данных с Kaggle.
Ссылка на набор данных —



Важные библиотеки

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

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

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

Давайте визуализируем набор данных с помощью Pandas.

df = pd.read_csv("CardioGoodFitness.csv")
df.head()

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

Столбцы, которые имеют только 2 типа категорий, таких как «Пол — мужчина или женщина» и «Семейное положение» — «Не замужем» или «Партнерство», мы назначим 0 и 1 категориям этих столбцов.

df['Gender'] = df['Gender'].replace('Male', 0)
df['Gender'] = df['Gender'].replace('Female', 1)
df['MaritalStatus'] = df['MaritalStatus'].replace('Single', 0)
df['MaritalStatus'] = df['MaritalStatus'].replace('Partnered', 1)
df.head()

Горячее кодирование

Для столбцов, имеющих более двух категорий, мы будем применять горячее кодирование к этим столбцам. то есть Продукт. Горячее кодирование — это метод преобразования категорийных значений в одномерный числовой вектор.

one_hot = pd.get_dummies(df['Product'])
# Drop column Product as it is now encoded
df = df.drop('Product',axis = 1)
# Join the encoded df
df = df.join(one_hot)
df.head()

Обучение

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

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

from sklearn.model_selection import train_test_split
y=df['Fitness']
x=df.drop('Fitness',axis=1)
x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.70,test_size=0.30, random_state=0)

Мы использовали функцию train_test_split(), которую мы импортировали из sklearn, для разделения данных. Обратите внимание, что мы использовали test_size=0.30, чтобы сделать тестовые данные 30% исходных данных. Остальные 70% используются для обучения.

Обучение модели с использованием различных методов регрессии

Теперь мы будем обучать различные модели, используя различные методы регрессии с использованием Python. Мы сравним эти модели на основе показателей регрессии, а именно MAE (средняя абсолютная ошибка), MSE ( среднеквадратическая ошибка) и (R в квадрате).

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

Линейная регрессия использует линейную модель для прогнозирования связи между двумя или более переменными или факторами.

#Linear Regression
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import r2_score
linearRegressor = LinearRegression()
linearRegressor.fit(x_train, y_train)
y_predicted = linearRegressor.predict(x_test)
mse = mean_squared_error(y_test, y_predicted)
r = r2_score(y_test, y_predicted)
mae = mean_absolute_error(y_test,y_predicted)
print("Mean Squared Error:",mse)
print("R score:",r)
print("Mean Absolute Error:",mae)

Вы также можете проверить прогнозируемое значение с помощью следующего кода:

out = pd.DataFrame(y_predicted,columns=['a'])
b = list(out['a'])
print("Predicted results:",b)
print("Actual results:",list(y_test))

Полиномиальная регрессия

Полиномиальная регрессия – это форма регрессионного анализа, в которой взаимосвязь между независимой переменной x и зависимой переменной y моделируется как полином n-й степени от x.

#Polynomial Regression
from sklearn.preprocessing import PolynomialFeatures
polynomial_features= PolynomialFeatures(degree=2)
x_poly = polynomial_features.fit_transform(x_train)
x_poly_test = polynomial_features.fit_transform(x_test)
model = LinearRegression()
model.fit(x_poly, y_train)
y_predicted_p = model.predict(x_poly_test)
mse = mean_squared_error(y_test, y_predicted_p)
r = r2_score(y_test, y_predicted_p)
mae = mean_absolute_error(y_test,y_predicted_p)
print("Mean Squared Error:",mse)
print("R score:",r)
print("Mean Absolute Error:",mae)

Дерево решений — КОРЗИНА

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

# Decision Tree - CART
from sklearn.tree import DecisionTreeRegressor
regressor = DecisionTreeRegressor(random_state = 0)
regressor.fit(x_train, y_train)
y_predicted_d = regressor.predict(x_test)
mse = mean_squared_error(y_test, y_predicted_d)
r = r2_score(y_test, y_predicted_d)
mae = mean_absolute_error(y_test,y_predicted_d)
print("Mean Squared Error:",mse)
print("R score:",r)
print("Mean Absolute Error:",mae)

Кроме того, вы можете визуализировать дерево, используя следующий код

from sklearn.tree import export_graphviz
import graphviz
export_graphviz(regressor, out_file="mytree.dot")
%matplotlib inline
with open("mytree.dot") as f:
    dot_graph = f.read()
graphviz.Source(dot_graph)

Случайный лес

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

# Random Forest
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier()
rf.fit(x_train,y_train);
y_predicted_r = rf.predict(x_test)
mse = mean_squared_error(y_test, y_predicted_r)
r = r2_score(y_test, y_predicted_r)
mae = mean_absolute_error(y_test,y_predicted_r)
print("Mean Squared Error:",mse)
print("R score:",r)
print("Mean Absolute Error:",mae)

Нейронная сеть

Нейронная сеть – это сеть или цепь нейронов, или, в современном понимании, искусственная нейронная сеть, состоящая из искусственных нейронов или узлов.

# Neural Networks
import warnings
warnings.filterwarnings('ignore')
from keras.models import Sequential,model_from_json
from keras.layers import Dense
from keras.optimizers import RMSprop
model = Sequential()
model.add(Dense(256, activation='relu', input_shape=(10,)))
model.add(Dense(256, activation='relu'))
model.add(Dense(256, activation='relu'))
model.add(Dense(256, activation='relu'))
model.add(Dense(1, activation='relu'))
model.summary()
model.compile(loss='mean_absolute_error', optimizer='adam', metrics=['mean_absolute_error'])
history = model.fit(x_train,y_train,batch_size=100,epochs=20,verbose=1)
test=model.evaluate(x_test, y_test, verbose=1)

Заключение

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

Автор блога:

Сонали Мехта

Также меня можно найти на
Github LinkedIn