machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Простое моделирование климата в Python

Дата публикации Oct 3, 2019

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

Это именно то, чтоИнструментарий для климатического моделирования и диагностики(CliMT) предназначен для этого. Будучи моделью климата на основе Python, она может быть полезна ученым, желающим протестировать алгоритмы машинного обучения. В настоящее время алгоритмы могут быть протестированы на очень простых игрушечных моделях или на больших дорогих данных из сложных моделей, которые требуют дорогого оборудования. CliMT лежит между этими крайностями и позволяет пользователям легко добавлять компоненты, основываясь на сложности модели.

Что такое CliMT?

CliMT - это библиотека на основе Python, которая обеспечивает модульный и интуитивно понятный подход к написанию численных моделей климатической системы. CliMT предоставляет самые современные компоненты и простой в использовании интерфейс, позволяющий писать модели качества исследований без необходимости изменять код Fortran.

КакУнифицированная модель Met OfficeБольшинство климатических моделей написаны на Фортране или С. Это великолепно для производительности, но исследователям сложно редактировать и изменять конфигурации моделей. Основным преимуществом CliMT является то, что пользователю легче создавать сложные модели, изменять конфигурации и менять различные компоненты.

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

Как это работает?

Модели могут быть построены из базовых компонентов для создания все более и более сложных моделей без необходимости переписывать код пользователем на каждом этапе. Для этого CliMT используетСимпл, Система для моделирования планет, который предназначен для написания модульных систем Земли и планетарных моделей, что делает их легко читаемыми и понятными.

Sympl используетcomponentsопределить модель и установитьstatesопределить текущее состояние величин в модели. Основные аспекты построенияCliMT/Symplмодели являются:

  1. Инициализировать компоненты
  2. Начальное состояние
  3. Шаг вперед во времени

Пример 1D модели излучения

Я опишу, как построить модель CliMT, начиная с простой модели излучения одномерной воздушной колонны. Вы можете следить за этим на ноутбуке Jupyterздесь (тетрадь 03),

1. Инициализировать компоненты

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

Компоненты в CliMT возвращают:

  • Тенденции: локальная скорость изменения величины во времени в данной точке пространства.
  • Диагностика: переменные, которые не отслеживаются непосредственно самой моделью, а выводятся издругие переменные,

Для нашей простой 1D модели мы предоставим только 1 компонент: излучение. Мы можем использовать встроенную схему излученияclimt.GrayLongwaveRadiation(),

Выходные данные компонента - это словарь тенденций и диагностики. Мы можем проверить свойства, используяtendency_propertiesа такжеdiagnostic_properties, который сообщает нам имена, размеры и единицы возвращаемых словарей.

2. Начальное состояние

Нам нужно определить сетку, на которой построено состояние. Начнем с 1D сетки, атмосферного столба воздуха. Мы можем получить дефолтgridот CliMT, который дает нам словарь измерений.

Далее мы создаемstateсам с помощьюget_default_state, Это создает еще один словарь величин, необходимых для настройки сетки и компонентов (схема излучения), которую мы указали.

Список величин в состоянии похож на сетку, но у нас есть дополнительные величины, которые являются входами или выходами нашей схемы излучения. Эти:longwave_optical_depth_on_interface_levels,air_temperatureа также
surface_temperature, Призыв кclimt.get_default_stateустанавливает начальные условия по умолчанию, чтобы быть реалистичными для системы, но мы можем отредактировать их при необходимости. Ниже приведен начальный профиль температуры воздуха против вертикальной координаты давления воздуха.

Теперь посмотрим, что делает компонент излучения. Тенденции и диагностика рассчитываются путем звонка вradiationс аргументомstate Тенденции мгновенные, но мы можем использовать их для расчета нового состояния модели через короткий промежуток времени. Во-первых, мы должны определить временной шаг, используя Pythondatetimeмодуль:

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

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

Мы видим, что разность температур между поверхностью и верхом атмосферы увеличивается со временем. Со временем это достигнет состояния равновесия.


Пример трехмерной модели глобального климата

В этом примере я покажу, как вы можете построить простую модель климата в CliMT с трехмерной сеткой долгота-широта-высота и с большим количеством компонентов климатической системы. Он включает в себя те же процессы, что и раньше, с (1) инициализацией компонентов, (2) инициализацией состояния и (3) шагом вперед во времени. На этот раз я представлю больше вариантов, которые могут быть полезны.

1. Инициализировать компоненты

После установки, аналогичной описанной вМонтейру и др., 2018Мы создадим 3 компонента:

  • длинноволновое излучениеclimt.GrayLongwaveRadiation()
  • конвекцияclimt.EmanuelConvection()
  • простая физическая составляющая для пограничного слоя,climt.SimplePhysics()

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

На этом этапе мы также можем использоватьWrapperизменить поведение компонентов, если необходимо. Они используются для изменения входов или выходов компонента, чтобы он, очевидно, работал по-другому. Ниже мы используемUpdateFrequencyWrapperна схеме излучения, чтобы обеспечить более длинный временной шаг для этого компонента. Мы также используемTimeDifferencingWrapperкоторый обеспечивает вывод компонентов в виде временных тенденций, используя схему конечных разностей. Это требуется наSimplePhysicsкомпонент, потому что мы будем использовать спектральное динамическое ядро,который не очень хорошо работает с компонентами, работающими в пространстве сетки,

2. Начальное состояние

На этот раз мы построим 3D-сетку. Затем мы можем собрать компоненты ввремя шагает, который будет автоматически рассчитывать обновленное состояние из тенденций. Это также особенно полезно, когда у нас есть несколько компонентов, так как они все вызываются из одной функции. Примеры временных шагов включают в себя обычные числовые интеграторы, такие какAdamsBashforthилиLeapfrog,

Здесь мы будем использоватьclimt.GFSDynamicalCoreкоторый объединяет динамическое ядро ​​изМодель Глобальной системы прогнозирования (СГФ), созданная Национальными центрами прогнозирования состояния окружающей среды (NCEP), Этонаписанный на фортранено нам не нужно взаимодействовать с ним напрямую.

Здесь мы видим, что в состоянии довольно много дополнительных величин, необходимых для 3 компонентов в нашей модели. Значения по умолчанию для большинства переменных равны нулю. Вместо этого мы можем использовать предопределенные начальные условия изclimtтакой какНачальные условия проекта сравнения динамических базовых моделей (DCMIP), Это должно дать нам реалистичное начальное состояние, которое ускорит время, когда модель приблизится к конечному состоянию.

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

3. Шаг вперед

Теперь мы поместим их в цикл, чтобы сделать шаг вперед во времени. Мы можем позвонить таймстеперу,dycoreна состоянии для нашего данного временного шага. Это возвращает диагностику и новое состояние.

Теперь мы можем отслеживать, как государство развивается со временем! Посмотреть блокнот JupyterВот, На моем ноутбуке примерно 5 месяцев работы в течение примерно 1 месяца, что отлично подходит для получения быстрых результатов! Мы надеемся использовать это с байесовским выводом в следующем разделе.


Можем ли мы сделать байесовский вывод по модели CliMT?

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

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

Истинная скорость вращения - один раз в 24 часа, или 7,29 × 10 ^ -5 с. Модель Pyro теперь соответствует той же настройке, что и предыдущие посты в блоге:

  1. Определите априор по скорости вращения (я использовал априор Normal, расположенный в 7 со стандартным отклонением 2, работая в единицах × 10 ^ -5 с)
  2. Выполните некоторые детерминированные вычисления. В этом случае детерминированный шаг включает в себя настройку состояния CliMT и шаг вперед во времени, чтобы получить скорость ветра на восток.
  3. Сделайте наблюдение. Я настроил это так, чтобы мы наблюдали скорость ветра на одной широте (56 градусов вокруг местоположения Великобритании). Наблюдение производится с некоторой небольшой погрешностью измерения, как и раньше.

Я хочу посмотреть, сможем ли мы вывести скорость вращения Земли на основе данных модели CliMT для истинной скорости вращения Земли. Как и прежде, мы приводим данные наблюдений в одну строку:

а затем мы устанавливаем руководство для стохастического вариационного вывода (SVI):

Для простоты я придерживался нормальных дистрибутивов, хотя это должно распространяться и на другие дистрибутивы. Мы хотим вывести 2 параметра для описания скорости вращения:guide_loc, расположение среднего иguide_scaleстандартное отклонение распределения. Затем мы запускаем SVI в том же цикле стиля, что и предыдущие посты.

К сожалению, это очень быстро становится дорогим. Каждый вызов модели занимает около 4 минут на моем ноутбуке, что означает, что запуск SVI всего за 50 итераций занимает около 3 часов. Этого недостаточно для того, чтобы понять, движется ли он в правильном направлении. Вот график того, как потери и два параметра выглядят для 50 итераций:

Параметр mean выглядит примерно так, как будто он колеблется около 7, но мы не можем быть уверены, что не запустим его намного дольше! Вы могли также заметить, что я запустил SVI со средним параметром на уровне 6,5, довольно близко к его истинному значению 7.3. Если бы мы действительно не имели представления о хорошей отправной точке для SVI, мы могли бы немного подождать, пока она не сойдет.

Это лишь одно из доказательств того, что более быстрые модели могут быть полезны в сообществе специалистов по науке о данных и машинном обучении. Это может быть сделано путем ускорения моделей CliMT с доступом к более мощному оборудованию или интеграцииДаскс CliMT. Также может быть полезно ввести суррогатное моделирование, такое как эмуляторы гауссовских процессов, которые можно использовать для эмуляции моделей CliMT. Я надеюсь увидеть больше этого в будущем, чтобы дать нам доступ к более быстрым данным климатической модели.

Оригинальная статья

Footer decor

© machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map