Как прогнозировать температуру на iOS с помощью ИИ

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

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

Итак, чтобы предсказать погоду, нам нужен огромный объем данных - вот здесь все усложняется. Нам нужны свежие и непрерывные данные, которых у нас нет, если мы хотим заранее спрогнозировать температуру дня на год.

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

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

Вот данные, которые у меня есть:

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

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

  • Данные нелинейны
  • Это непрерывно
  • Периодический
  • Под присмотром

На этом этапе нам нужно знать, является ли это проблемой классификации или регрессии.

Регрессия и классификация относятся к задачам машинного обучения с учителем.

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

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

Обучить модель

Регрессия дерева решений

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

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

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

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

Пришлось сменить дату с 22-08-2019 на 22082019.

Обучение

Вот библиотеки, которые нам понадобятся для обучения:

  • pandas: прочитать файл .csv и преобразовать его в тип dataframe
  • sklearn: огромная библиотека с множеством алгоритмов анализа данных - мы собираемся использовать только регрессию дерева решений.

Вот шаги:

  1. Считайте данные из файла .csv с помощью pandas.
  2. Разделите данные поезда и теста - я выбрал разделение 50/50, но вы можете изменить его в зависимости от размера набора данных.
  3. Создайте экземпляр переменной DecisionTreeRegressor() с помощью sklearn.
  4. Обучите модель с помощью метода sklearn fit(), который находит коэффициенты для уравнения, указанного с помощью алгоритма.
  5. Экспортируйте файл .pkl, который представляет собой файл, созданный pickle, который позволяет сериализовать объекты в файлы на диске.

Будьте осторожны с именами столбцов. В моем случае их два: DATE и MAX_TEMPERATURE_C. Очевидно, вы можете изменить сценарий с соответствующими именами столбцов.

Вот пример небольшой части дерева решений:

Полную версию сгенерированного дерева можно найти в репозитории GitHub:



Прогноз

В приведенном выше фрагменте кода я создал простую функцию, которая принимает дату в качестве аргумента и возвращает температуру.

Вот шаги:

  1. Загрузите файл рассола, содержащий нашу сериализованную модель.
  2. Убедитесь, что дата (опция) является плавающей.
  3. Создайте массив типа numpy из нашей даты, чтобы его можно было использовать для прогнозирования температуры.
  4. Сделайте прогноз.
  5. Верните температуру.

Flask API

Flask - это микро-инфраструктура веб-приложений Python, построенная на библиотеке WSGI Werkzeug. Flask может быть «микро», но он готов к использованию в производстве для различных нужд.

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

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

Я выбрал библиотеку под названием Flask-RESTful, созданную Twilio, которая поддерживает передовые методы работы с API.

Вот полный код (да, я знаю, Flask великолепен 🙌!):

Вот шаги:

  1. Создайте экземпляр Flask.
  2. Загрузите экземпляр приложения Flask в экземпляр Api из Flask-RESTful.
  3. Создайте класс WeatherPrediction, который будет использоваться в качестве точки входа для нашего API.
  4. Добавьте в класс GET метод.
  5. Добавьте класс в качестве ресурса в API и определите маршрутизацию.
  6. Это все 🤩

Запустите API и используйте этот URL, чтобы проверить:

http://127.0.0.1:5000/24082019

Должно получиться так:

Приложение для iOS

Создать новый проект

Для начала нам нужно создать проект iOS с приложением с одним представлением:

Теперь у нас есть готовый проект. Я сам не люблю использовать раскадровки, поэтому приложение в этом руководстве создано программно, что означает отсутствие кнопок или переключателей для переключения - только чистый код 🤗.

Чтобы воспользоваться этим методом, вам нужно удалить main.storyboard и настроить файл AppDelegate.swift следующим образом:

Настройте макет

  1. Выбор даты:
  • Создайте экземпляр UIDatePicker.
  • Настройте макет.
  • Добавьте цель, чтобы обновлять прогноз каждый раз, когда пользователь меняет дату.

2. Этикетка

  • Создайте экземпляр UILabel.
  • Настройте макет и добавьте его в подпредставление.

Вызовы API

URLRequest инкапсулирует два основных свойства запроса загрузки: URL-адрес для загрузки и политики, используемые для его загрузки. Кроме того, для запросов HTTP и HTTPS URLRequest включает метод HTTP (GET, POST и т. Д.) И заголовки HTTP.

Источник: Apple

Это именно то, что нам нужно сделать, чтобы GET прогноз из нашего API.

Вот полный код метода прогнозирования:

Конечный результат

Результаты можно улучшить, увеличив размер набора данных. Использовать данные только за шесть лет недостаточно, но я не мог найти больше для Касабланки. Я уверен, что если вы живете в США или в Европе, вы можете найти данные как минимум за 30 лет.

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

Давайте посмотрим, как выглядит точность модели:

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

Вот и все! Теперь у вас есть рабочий прототип приложения для iOS, которое может прогнозировать максимальную температуру в заданном городе в заданный день.

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

Я также разместил API на Heroku. Вы можете ознакомиться с документацией в моем репозитории GitHub.



Спасибо за прочтение. Если у вас есть какие-либо вопросы, напишите мне по адресу [email protected].

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

Являясь независимой редакцией, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и группам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим участникам и не продаем рекламу.

Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее создавать лучшие модели машинного обучения.