Введение

Модели глубокого обучения требуют, чтобы высокопроизводительные графические процессоры обучались за разумное время с большими данными, как с финансовой, так и с вычислительной точки зрения. Эти графические процессоры очень дороги, но без них обучение глубоких сетей высокой производительности было бы невозможным. Для эффективного использования таких высокопроизводительных графических процессоров требуется быстрый процессор, хранилище SSD, а также быстрая и большая оперативная память. Классические алгоритмы машинного обучения, такие как линейная регрессия или регрессия Лассо, могут быть обучены с помощью приличного процессора без необходимости использования современного оборудования. Поскольку они менее затратны в вычислительном отношении, они позволяют нам выполнять итерации быстрее и опробовать больше методов за меньшее время.

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

Что такое регрессия Лассо?

Оператор наименьшего абсолютного сжатия и отбора сокращенно называется «LASSO». Лассо-регрессия - это тип регуляризации. Он предпочтительнее методов регрессии для более точного прогнозирования. В этой модели используется сжатие — процесс, при котором значения данных сжимаются к центральной точке, известной как среднее значение. Регуляризация L1 используется в регрессии Лассо. Он используется при наличии большого количества объектов, поскольку автоматически выполняет выбор объектов. Основная цель регрессии Лассо — найти коэффициенты, которые минимизируют сумму квадратов ошибок, применяя штраф к этим коэффициентам.

Лассо-регрессионная модель

  • λ обозначает величину усадки.
  • λ = 0 означает, что учитываются все функции, и это эквивалентно линейной регрессии, где для построения прогностической модели рассматривается только остаточная сумма квадратов.
  • λ = ∞ означает, что ни один признак не рассматривается, т. Е. По мере того, как λ приближается к бесконечности, он устраняет все больше и больше признаков.
  • Смещение увеличивается с увеличением λ
  • Дисперсия увеличивается с уменьшением λ

Описание набора данных

Рисунок 1.2 дает краткий обзор предоставленного набора данных. Общее количество присутствующих признаков равно 18. Количество представленных примеров равно 252, а средний процент жира в организме составляет 19,1%. Изучив набор данных, мы видим, что столбцы Безымянный: 0 просто используются для индексации и не будут хорошей функцией для оценки жира в организме, поэтому они были удалены.

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

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

Зачем нужна нормализация наших данных? Это связано с тем, что порядок значений характеристик может влиять на производительность некоторых моделей. Некоторые модели могут «полагать», что одна характеристика более значима, чем другая, если, например, одна характеристика имеет порядок величины, равный 1000, а другая имеет порядок величины, равный 10. Порядок величины нам ни о чем не говорит. о предсказательной силе, следовательно, она предвзята. Мы можем устранить это смещение, изменив переменные, чтобы придать им тот же порядок величины.

Стандартизация и нормализация - это два из этих преобразований, которые преобразуют каждую переменную в интервал 0–1 (который преобразует каждую переменную в переменную с нулевым средним и единичной дисперсией). Теоретически стандартизация лучше нормализации, поскольку она не приводит к уменьшению распределения вероятностей переменной при наличии выбросов. Но для предоставленного нам набора данных мы получаем лучшую оценку RMSE с использованием MinMaxScaler, чем StandardScaler, что указывает на лучшее соответствие. Сравнение обоих результатов показано на рис. 1.3.

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

X_std = (X — X.min(axis=0)) / (X.max(axis=0) — X.min(axis=0)) X_scaled = X_std * (max — min) + min

Блок кода ниже описывает, как MinMaxScaler использовался для нормализации наших данных.

from sklearn.preprocessing import MinMaxScaler
def scale_numerical(data):
 scaler = MinMaxScaler()
 data[data.columns] = scaler.fit_transform(data[data.columns])

Построение модели

Мы использовали модели линейной регрессии и регрессии Лассо в тандеме, чтобы эффективно оценить разницу между обеими моделями. Для регрессии Лассо мы использовали 100 альфа-параметров и передали их в GridSearchCV для настройки гиперпараметров.

from sklearn.linear_model import Lasso, LinearRegression, LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import mean_absolute_error,r2_score,mean_squared_error
def construct_model():
 # the list of classifiers to use
 regression_models = [
 LinearRegression(),
 Lasso(),
 ]
linear_model_parameters = {}
lasso_parameters = {
 ‘alpha’: np.arange(0.00, 1.0, 0.01)
 }
parameters = [
 linear_model_parameters,
 lasso_parameters
 ]
data[‘estimators’] = []
# iterate through each classifier and use GridSearchCV
 for I, regressor in enumerate(regression_models):
   clf = GridSearchCV(regressor, # model
     param_grid = parameters[i], # hyperparameters
     scoring=’neg_mean_absolute_error’, # metric for scoring
     cv=10,
     n_jobs=-1, error_score=’raise’, verbose=3)
   clf.fit(X_train, y_train)
   # add the clf to the estimators list
   data[‘estimators’].append((regressor.__class__.__name__, clf))

Перекрестная проверка и GridSearchCV

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

GridSearchCV оценивает модель для каждой комбинации значений, переданных в словаре, с помощью метода перекрестной проверки. В результате использования этой функции мы можем рассчитать точность/потери для каждой комбинации гиперпараметров и выбрать тот, который обладает наилучшей производительностью. Для нашей модели наилучшее значение параметра альфа было выбрано равным 0,01, что дает нам средний результат теста -0,560748 и последующий ранг 1. Параметрическая оценка гиперпараметра описана на рис. 1.4.

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

Рисунок 1.5 показывает, насколько хорошо работает наша модель и насколько хорошо она аппроксимирует взаимосвязь между фактическим процентным содержанием жира в организме и прогнозируемым процентным содержанием жира в организме. Мы использовали R2, MAE и RMSE для нашей оценки.

Средняя абсолютная ошибка (MAE)

Это просто среднее значение абсолютной разницы между целевым и прогнозируемым значениями. Не рекомендуется, когда выбросы заметны. Как видно из наших показателей, ошибка MAE для регрессора Лассо составляет 0,38.

R-квадрат или коэффициент детерминации

Этот показатель представляет собой долю дисперсии зависимой переменной, которую можно объяснить независимыми переменными модели. Он оценивает силу связи нашей модели с зависимой переменной. Наш регрессор Лассо дает оценку 0,99, что означает, что модель представляет дисперсию зависимой переменной.

Среднеквадратичная ошибка (RMSE)

Корень из среднего квадрата остатков — это то, что такое RMSE. Мы знаем, что остатки показывают, насколько далеко точки находятся от линии регрессии. В результате RMSE количественно определяет разброс этих остатков. Наш регрессор Лассо дает оценку 0,50, показывая, что модель может относительно точно предсказывать данные.

Важность функции

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

import matplotlib.pyplot as plt
from textwrap import wrap
def rf_feat_importance(model, df):
 importance = model.coef_
 keys = list(df.keys())
 # summarize feature importance
 for i,v in enumerate(importance):
 print(‘Feature: %s, Score: %.5f’ % (keys[i],v))
 labels =[x[:10] for x in keys]
 fig = plt.figure()
 ax = fig.add_axes([0,0,1,1])
 ax.bar([x for x in range(len(importance))], height=importance, color=’b’)
 ax.set_xticklabels([labels[i — 1] for i in range(len(importance) +1)], rotation=45)
plt.show()
 return importance

На рис. 1.6 показан график нашей модели до и после удаления маловажных признаков.

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

Это оставляет нам 5 столбцов:

  • Плотность г/см³
  • Возраст
  • Вес в фунтах)
  • Вес без жира (1 — доля жира в организме) * Вес по формуле Брожека (фунты)
  • Окружность груди (см)
  • Окружность живота (см)

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

Заключение

Регрессия Лассо широко использовалась при разработке нашей модели регрессии. Мы достигли оценки R-квадрата 0,99, используя GridSearchCV для настройки гиперпараметров. Нормализация с помощью MinMaxScaler оказала значительное влияние на уменьшение систематической ошибки и увеличение дисперсии в нашей модели. Мы также использовали коэффициенты модели для определения наиболее важных характеристик, необходимых для расчета процентного содержания жира в организме.

Рекомендации