Прочитав это, давайте начнем с нашего короткого проекта машинного обучения по прогнозированию фитнеса с использованием различных методов регрессии.
О наборе данных
Перед командой по исследованию рынка в 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²(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)
Заключение
Из приведенных выше результатов видно, что линейная регрессия лучше всего подходит для этого набора данных. Кроме того, нейронная сеть может работать лучше с различными функциями активации и разным количеством узлов.
Автор блога:
Сонали Мехта