gp-prob-earthquake-shaking

Official implementation of Gaussian Processes for Probabilistic Estimates of Earthquake Ground Shaking: A 1-D Proof-of-Concept, accepted in ML4PS Workshop @ NeurIPS 2024.

https://github.com/sscivier/gp-prob-earthquake-shaking

Science Score: 67.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 23 DOI reference(s) in README
  • Academic publication links
    Links to: arxiv.org, zenodo.org
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (15.0%) to scientific vocabulary
Last synced: 11 months ago · JSON representation ·

Repository

Official implementation of Gaussian Processes for Probabilistic Estimates of Earthquake Ground Shaking: A 1-D Proof-of-Concept, accepted in ML4PS Workshop @ NeurIPS 2024.

Basic Info
Statistics
  • Stars: 1
  • Watchers: 1
  • Forks: 0
  • Open Issues: 0
  • Releases: 5
Created almost 2 years ago · Last pushed over 1 year ago
Metadata Files
Readme License Citation

README.md

Gaussian Processes for Probabilistic Estimates of Earthquake Ground Shaking: A 1-D Proof-of-Concept, accepted in ML4PS Workshop @ NeurIPS 2024.

Binder DOI GitHub License GitHub Release

Table of Contents

Introduction

This repository is the official implementation of Gaussian Processes for Probabilistic Estimates of Earthquake Ground Shaking: A 1-D Proof-of-Concept, accepted in ML4PS Workshop @ NeurIPS 2024.

We present a proof-of-concept workflow for probabilistic earthquake ground motion prediction that accounts for inconsistencies between existing seismic velocity models. The approach is based on the probabilistic merging of overlapping seismic velocity models using scalable Gaussian Process (GP) regression. We fit a GP to two synthetic 1-D velocity profiles simultaneously, demonstrating that the predictive uncertainty accounts for the differences between them. We then draw samples of velocity models from the predictive distribution and simulate the acoustic wave equation using each sample as input. This results in a distribution of possible peak ground displacement (PGD) scenarios, reflecting the degree of knowledge of seismic velocities in the region.

Installation

You can use Binder to run the notebook online without any installation. Click the Binder badge at the top of this README to launch the notebooks in your browser. It is recommended not to run model training on Binder, as it may take much longer than on your computer.

If you wish to run the code on your computer, the installation instructions have two options: either for using CUDA for GPU acceleration during model training, or not. CUDA users should follow the CUDA instructions, and CPU users should follow the CPU instructions.

This code has been tested using Python 3.10.12. Using a different Python version may result in package conflicts, or installation errors. If pip cannot find certain packages during installation, then ensure you are running Python 3.10.12 in your virtual environment, and retry the installation.

Create a virtual environment:

Navigate to working directory. Create venv (change name by replacing my-venv), and activate: shell python3 -m venv my-venv source my-env/bin/activate

Clone the repository:

shell git clone git@github.com:sscivier/gp-prob-earthquake-shaking.git

CUDA:

Install requirements: shell pip install -r requirements_cuda.txt

CPU:

Install requirements: shell pip install -r requirements.txt

Usage

All of the code necessary to reproduce the results in the paper is contained in the Jupyter Notebook, workflow.ipynb.

By default, the training code in the notebook is commented out. If you wish to run the training code, simply uncomment it. This cell is indicated in the notebook.

Pre-trained models are found in the trained_models/ directory. These are loaded by default in the notebook.

Citing this work

If you find this software useful in your research, please cite the software and the associated paper. This repository includes a CITATION.cff file containing the software citation. GitHub automatically generates APA and BibTeX citations that you can use. To cite the paper, please use the following BibTeX citation:

@misc{scivier2024gaussianprocessesprobabilisticestimates, title = {Gaussian Processes for Probabilistic Estimates of Earthquake Ground Shaking: A 1-D Proof-of-Concept}, author = {Sam A. Scivier and Tarje Nissen-Meyer and Paula Koelemeijer and Atılım Güneş Baydin}, year = {2024}, eprint = {2412.03299}, archivePrefix = {arXiv}, primaryClass = {physics.geo-ph}, url = {https://arxiv.org/abs/2412.03299}, }

Contributing, questions, and issues

If you have any suggestions, improvements, questions, or comments - please create an issue, submit a pull request, or get in touch.

License

This project is licensed under the Apache-2.0 License. See the LICENSE file for details.

References and Acknowledgements

This repository uses the following open-source software libraries:

Sam A. Scivier is funded by a UKRI NERC DTP Award (NE/S007474/1) and gratefully acknowledges their support.

Owner

  • Login: sscivier
  • Kind: user

Citation (CITATION.cff)

cff-version: 1.2.0
title: >-
  Gaussian Processes for Probabilistic Estimates of
  Earthquake Ground Shaking: A 1-D Proof-of-Concept
message: >-
  If you find this software useful in your research, please
  cite the software and the associated paper.
type: software
authors:
  - given-names: Sam A.
    family-names: Scivier
    email: sam.scivier@earth.ox.ac.uk
    affiliation: University of Oxford
    orcid: 'https://orcid.org/0000-0003-1635-9475'
  - given-names: Tarje
    family-names: Nissen-Meyer
    email: t.nissen-meyer@exeter.ac.uk
    affiliation: University of Exeter
    orcid: 'https://orcid.org/0000-0002-9051-1060'
  - given-names: Paula
    family-names: Koelemeijer
    email: paula.koelemeijer@earth.ox.ac.uk
    affiliation: University of Oxford
    orcid: 'https://orcid.org/0000-0001-5153-3040'
  - given-names: Atılım Güneş
    family-names: Baydin
    email: gunes.baydin@cs.ox.ac.uk
    affiliation: University of Oxford
    orcid: 'https://orcid.org/0000-0001-9854-8100'
doi: 10.5281/zenodo.14246055
url: 'https://doi.org/10.5281/zenodo.14246055'
repository-code: 'https://github.com/sscivier/gp-prob-earthquake-shaking'
abstract: >-
  We present a proof-of-concept workflow for probabilistic
  earthquake ground motion prediction that accounts for
  inconsistencies between existing seismic velocity models.
  The approach is based on the probabilistic merging of
  overlapping seismic velocity models using scalable
  Gaussian Process (GP) regression. We fit a GP to two
  synthetic 1-D velocity profiles simultaneously,
  demonstrating that the predictive uncertainty accounts for
  the differences between them. We then draw samples of
  velocity models from the predictive distribution and
  simulate the acoustic wave equation using each sample as
  input. This results in a distribution of possible peak
  ground displacement (PGD) scenarios, reflecting the degree
  of knowledge of seismic velocities in the region.
keywords:
  - Seismology
  - Gaussian Processes
  - Seismic Hazard
  - Data Fusion
  - Probabilistic Machine Learning
license: Apache-2.0
version: 0.1.4
date-released: '2024-12-22'

GitHub Events

Total
  • Create event: 9
  • Release event: 5
  • Issues event: 8
  • Delete event: 3
  • Push event: 38
  • Pull request event: 8
  • Fork event: 2
Last Year
  • Create event: 9
  • Release event: 5
  • Issues event: 8
  • Delete event: 3
  • Push event: 38
  • Pull request event: 8
  • Fork event: 2

Dependencies

requirements.txt pypi
  • Jinja2 ==3.1.3
  • MarkupSafe ==2.1.5
  • PyYAML ==6.0.2
  • Pygments ==2.18.0
  • Send2Trash ==1.8.3
  • anyio ==4.6.2.post1
  • argon2-cffi ==23.1.0
  • argon2-cffi-bindings ==21.2.0
  • arrow ==1.3.0
  • asttokens ==2.4.1
  • async-lru ==2.0.4
  • attrs ==24.2.0
  • babel ==2.16.0
  • beautifulsoup4 ==4.12.3
  • bleach ==6.2.0
  • certifi ==2024.8.30
  • cffi ==1.17.1
  • charset-normalizer ==3.4.0
  • comm ==0.2.2
  • contourpy ==1.3.0
  • cycler ==0.12.1
  • debugpy ==1.8.8
  • decorator ==5.1.1
  • defusedxml ==0.7.1
  • exceptiongroup ==1.2.2
  • executing ==2.1.0
  • fastjsonschema ==2.20.0
  • filelock ==3.13.1
  • fonttools ==4.54.1
  • fqdn ==1.5.1
  • fsspec ==2024.2.0
  • gpytorch ==1.13
  • h11 ==0.14.0
  • httpcore ==1.0.6
  • httpx ==0.27.2
  • idna ==3.10
  • ipykernel ==6.29.5
  • ipython ==8.29.0
  • isoduration ==20.11.0
  • jaxtyping ==0.2.19
  • jedi ==0.19.2
  • joblib ==1.4.2
  • json5 ==0.9.27
  • jsonpointer ==3.0.0
  • jsonschema ==4.23.0
  • jsonschema-specifications ==2024.10.1
  • jupyter-events ==0.10.0
  • jupyter-lsp ==2.2.5
  • jupyter_client ==8.6.3
  • jupyter_core ==5.7.2
  • jupyter_server ==2.14.2
  • jupyter_server_terminals ==0.5.3
  • jupyterlab ==4.2.5
  • jupyterlab_pygments ==0.3.0
  • jupyterlab_server ==2.27.3
  • kiwisolver ==1.4.7
  • linear-operator ==0.5.3
  • matplotlib ==3.9.2
  • matplotlib-inline ==0.1.7
  • mistune ==3.0.2
  • mpmath ==1.3.0
  • nbclient ==0.10.0
  • nbconvert ==7.16.4
  • nbformat ==5.10.4
  • nest-asyncio ==1.6.0
  • networkx ==3.2.1
  • notebook ==7.2.2
  • notebook_shim ==0.2.4
  • numpy ==2.1.3
  • overrides ==7.7.0
  • packaging ==24.2
  • pandocfilters ==1.5.1
  • parso ==0.8.4
  • pexpect ==4.9.0
  • pillow ==11.0.0
  • platformdirs ==4.3.6
  • prometheus_client ==0.21.0
  • prompt_toolkit ==3.0.48
  • psutil ==6.1.0
  • ptyprocess ==0.7.0
  • pure_eval ==0.2.3
  • pycparser ==2.22
  • pyparsing ==3.2.0
  • python-dateutil ==2.9.0.post0
  • python-json-logger ==2.0.7
  • pyzmq ==26.2.0
  • referencing ==0.35.1
  • requests ==2.32.3
  • rfc3339-validator ==0.1.4
  • rfc3986-validator ==0.1.1
  • rpds-py ==0.21.0
  • scikit-learn ==1.5.2
  • scipy ==1.14.1
  • six ==1.16.0
  • sniffio ==1.3.1
  • soupsieve ==2.6
  • stack-data ==0.6.3
  • sympy ==1.13.1
  • terminado ==0.18.1
  • threadpoolctl ==3.5.0
  • tinycss2 ==1.4.0
  • tomli ==2.0.2
  • torch ==2.5.1
  • tornado ==6.4.1
  • tqdm ==4.67.0
  • traitlets ==5.14.3
  • typeguard ==4.4.1
  • types-python-dateutil ==2.9.0.20241003
  • typing_extensions ==4.12.2
  • uri-template ==1.3.0
  • urllib3 ==2.2.3
  • wcwidth ==0.2.13
  • webcolors ==24.11.1
  • webencodings ==0.5.1
  • websocket-client ==1.8.0
requirements_cuda.txt pypi
  • Jinja2 ==3.1.3
  • MarkupSafe ==2.1.5
  • PyYAML ==6.0.2
  • Pygments ==2.18.0
  • Send2Trash ==1.8.3
  • anyio ==4.6.2.post1
  • argon2-cffi ==23.1.0
  • argon2-cffi-bindings ==21.2.0
  • arrow ==1.3.0
  • asttokens ==2.4.1
  • async-lru ==2.0.4
  • attrs ==24.2.0
  • babel ==2.16.0
  • beautifulsoup4 ==4.12.3
  • bleach ==6.2.0
  • certifi ==2024.8.30
  • cffi ==1.17.1
  • charset-normalizer ==3.4.0
  • comm ==0.2.2
  • contourpy ==1.3.0
  • cycler ==0.12.1
  • debugpy ==1.8.8
  • decorator ==5.1.1
  • defusedxml ==0.7.1
  • exceptiongroup ==1.2.2
  • executing ==2.1.0
  • fastjsonschema ==2.20.0
  • filelock ==3.13.1
  • fonttools ==4.54.1
  • fqdn ==1.5.1
  • fsspec ==2024.2.0
  • gpytorch ==1.13
  • h11 ==0.14.0
  • httpcore ==1.0.6
  • httpx ==0.27.2
  • idna ==3.10
  • ipykernel ==6.29.5
  • ipython ==8.29.0
  • isoduration ==20.11.0
  • jaxtyping ==0.2.19
  • jedi ==0.19.2
  • joblib ==1.4.2
  • json5 ==0.9.27
  • jsonpointer ==3.0.0
  • jsonschema ==4.23.0
  • jsonschema-specifications ==2024.10.1
  • jupyter-events ==0.10.0
  • jupyter-lsp ==2.2.5
  • jupyter_client ==8.6.3
  • jupyter_core ==5.7.2
  • jupyter_server ==2.14.2
  • jupyter_server_terminals ==0.5.3
  • jupyterlab ==4.2.5
  • jupyterlab_pygments ==0.3.0
  • jupyterlab_server ==2.27.3
  • kiwisolver ==1.4.7
  • linear-operator ==0.5.3
  • matplotlib ==3.9.2
  • matplotlib-inline ==0.1.7
  • mistune ==3.0.2
  • mpmath ==1.3.0
  • nbclient ==0.10.0
  • nbconvert ==7.16.4
  • nbformat ==5.10.4
  • nest-asyncio ==1.6.0
  • networkx ==3.2.1
  • notebook ==7.2.2
  • notebook_shim ==0.2.4
  • numpy ==2.1.3
  • overrides ==7.7.0
  • packaging ==24.2
  • pandocfilters ==1.5.1
  • parso ==0.8.4
  • pexpect ==4.9.0
  • pillow ==11.0.0
  • platformdirs ==4.3.6
  • prometheus_client ==0.21.0
  • prompt_toolkit ==3.0.48
  • psutil ==6.1.0
  • ptyprocess ==0.7.0
  • pure_eval ==0.2.3
  • pycparser ==2.22
  • pyparsing ==3.2.0
  • python-dateutil ==2.9.0.post0
  • python-json-logger ==2.0.7
  • pyzmq ==26.2.0
  • referencing ==0.35.1
  • requests ==2.32.3
  • rfc3339-validator ==0.1.4
  • rfc3986-validator ==0.1.1
  • rpds-py ==0.21.0
  • scikit-learn ==1.5.2
  • scipy ==1.14.1
  • six ==1.16.0
  • sniffio ==1.3.1
  • soupsieve ==2.6
  • stack-data ==0.6.3
  • sympy ==1.13.1
  • terminado ==0.18.1
  • threadpoolctl ==3.5.0
  • tinycss2 ==1.4.0
  • tomli ==2.0.2
  • torch ==2.5.1
  • tornado ==6.4.1
  • tqdm ==4.67.0
  • traitlets ==5.14.3
  • typeguard ==4.4.1
  • types-python-dateutil ==2.9.0.20241003
  • typing_extensions ==4.12.2
  • uri-template ==1.3.0
  • urllib3 ==2.2.3
  • wcwidth ==0.2.13
  • webcolors ==24.11.1
  • webencodings ==0.5.1
  • websocket-client ==1.8.0