Статья с меньшим количеством жаргона, чтобы показать, как используется ML!

Нереалистичные руководства по машинному обучению — один из способов расстроить ваших коллег-программистов. Эта статья призвана предоставить руководство о том, как применять машинное обучение к реальному набору данных.

Что такое машинное обучение?

Главная подсказка кроется в названии «Машина учится».

Машинное обучение — это создание вычислительных прогнозов на основе вводимых данных. Алгоритмы машинного обучения основаны на моделировании выборочных данных. Входные данные известны как обучающие данные, которые алгоритм использует для прогнозирования новых данных.

Данные

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

Код

Предстоящие смерти от Covid можно предсказать с помощью Jupyter Notebook с Python (3.10). Чтобы реализовать это, нам нужно импортировать пакеты, которые будут инициализировать процесс машинного обучения, которые состоят из следующих шагов:

1. Загрузите данные

2. Анализ набора данных

3. Обучение модели

4. Прогноз модели

5. Тестирование

6. Настройка гиперпараметров

Важные пакеты для включения и цель:

  • Pandas — для загрузки данных из различных источников, таких как локальное хранилище, база данных, файл Excel, файл CSV и т. д.
  • Matplotlib — для визуализации данных.
  • Sklearn — для предиктивного анализа данных
  • Skforecast — Прогнозирование временных рядов с помощью регрессоров scikit-learn

1. Загрузка данных

Библиотека Pandas загружает и читает данные формы CSV. Столбец date хранится в виде строки, поэтому этот формат нельзя прочитать или использовать. Реализация функции pd.to_datetime() преобразует строку в datetime; который использует функции Pandas. Это устанавливает дату и время в качестве индекса (ключа).

Кроме того, частота временного ряда установлена ​​​​на SMS, что представляет SemiMonthBegin — 15-й (или другой день_месяца).

cases = pd.read_csv('covidcases.csv')
cases['date'] = pd.to_datetime(cases['date'], format='%Y/%m/%d')
cases = cases.set_index('date')
cases = cases.asfreq('SMS')
cases = cases.sort_index()
cases

Как показано в таблице выше, строки были сокращены с 925 до 61 записи.

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

(cases.index == pd.date_range(start=cases.index.min(),
                             end=cases.index.max(),
                              freq=cases.index.freq)).all()

2. Анализ набора данных

Сейчас имеется 61 запись очищенных данных временных рядов. Использование соотношения 80:20 для обучения и тестирования вновь созданной модели со следующим расчетом.

80% от 61 = 49~ тренировка
20% от 61 = 12~ тест

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

steps = 12
data_train = cases[:-steps]
data_test  = cases[-steps:]
print(f"Train dates : {data_train.index.min()} --- {data_train.index.max()}  (n={len(data_train)})")
print(f"Test dates  : {data_test.index.min()} --- {data_test.index.max()}  (n={len(data_test)})")
fig, ax=plt.subplots(figsize=(20, 10))
data_train['newDailyNsoDeathsByDeathDate'].plot(ax=ax, label='train')
data_test['newDailyNsoDeathsByDeathDate'].plot(ax=ax, label='test')
ax.legend();

3. Обучение моделей

Обучение модели позволяет машине определять допустимые значения и смещения из примеров размеченных данных. Этот метод машинного обучения известен как «обучение с учителем», когда алгоритм строит модель, анализируя данный набор данных.

Используя класс ForecasterAutoreg, модель создается и обучается на основе регрессора RandomForestRegressor с временным окном в 6 лагов. Это означает, что модель использует предыдущие 6 полумесяцев в качестве предикторов.

forecaster = ForecasterAutoreg(
                regressor = RandomForestRegressor(random_state=123),
                lags      = 6)
forecaster.fit(y=data_train['newDailyNsoDeathsByDeathDate'])
forecaster

4. Прогноз модели

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

Использование функции Predict из класса ForecasterAutoreg вернет результаты прогнозов на следующие 12 полумесяцев.

Как видите, прогнозы немного превышают фактические тестовые данные.

5. Тестирование

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

MSE измеряет квадрат среднего расстояния между реальными данными и прогнозируемыми данными. По сути, это должно указывать, насколько точна модель. Чем ближе значение к 0, тем лучше модель.

Это не конец, так как мы хотим доработать нашу модель.

6. Настройка гиперпараметров

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

Значение в этом процессе помогает оценить параметры модели. Гиперпараметры часто настраиваются для данной задачи прогнозного моделирования.

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

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

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

Например, отставание 1 — это значение на временном шаге 𝑡−1, а отставание 𝑚 — это значение на временном шаге 𝑡−𝑚

Чтобы определить подходящую комбинацию задержек и гиперпараметров, мы используем библиотеку skforecast, которая предоставляет функцию grid_search_forecaster. Впоследствии это сравнивает результаты, полученные с каждой конфигурацией модели. Посетите прогнозист skforecast grid search для получения дополнительной документации.

Затем мы снова выполняем предсказания. Прогнозы становятся ближе к тестовым данным.

Второй тест

Выполнение второго теста на модели.

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

Заключение

Чтобы завершить этот мини-проект, я бы улучшил следующее:

  1. Используя другую частоту временных рядов, чтобы поэкспериментировать, насколько точной будет модель, используя «D» ежедневно или «W» еженедельно.
  2. Разделение набора данных с разными коэффициентами для обучения и тестирования. т.е. 60:40
  3. Гипертюнинг с разными значениями задержки

В целом, график покажет нам представление о количестве смертей от COVID-19 в Великобритании в выбранные месяцы, что соответствует конечной цели этого мини-проекта.

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

Самое главное, я надеюсь, что вы узнали, как применять машинное обучение к любому набору данных. Как бы сложно это ни звучало в Tech Industries 😉

Полезные ссылки

CurlyCoder✌️

GitHub: https://github.com/curlyCoderr/CovidCases-MachineLearning