This repo is affiliated with the paper "Inferring End-members from Geoscience Data using Simplex Projected Gradient Descent-Archetypal Analysis" published on JGR: Machine Learning and Computation, authored by Zanchenling Wang and Tao Wen: https://doi.org/10.1029/2024JH000540
@article{wang2025,
title = {Inferring End-Members from Geoscience Data Using Simplex Projected Gradient Descent-Archetypal Analysis},
author = {Wang, Zanchenling and Wen, Tao},
year = {2025},
journal = {Journal of Geophysical Research: Machine Learning and Computation},
volume = {2},
number = {2},
pages = {e2024JH000540},
issn = {2993-5210},
doi = {10.1029/2024JH000540},
langid = {english},
}In this work, we developed Simplex Projected Gardient Descent-Archetypal Analysis (SPGD-AA) to infer end-members from geoscience data of mixed materials. SPGD-AA is based on archetypal analysis (AA) (Cutler and Breiman, 1994 and Mørup and Hansen, 2012) and fast unit simplex projection (Condat 2016).
We apply SPGD-AA to synthetic and real-world datasets. Demo code is in examples/demo.ipynb. Real world datasets including Panola Mountain stream chemistry (Hooper 1990), Nazca Plate deep-sea sediment (Dymond 1981) and Jasper Ridge hyperspectral image (Zhu 2017). More details are available in the data/ folder, especially the README files.
The end-members of these datasets inferred using SPGD-AA and other methods are stored in the results/ folder. We compared them with end-members determined in previous studies, proving SPGD-AA's capability. Some visualizations of our results in the manuscript are in the images/ folder. These figures, along with some numerical results shown in the manuscript, are generated using scripts in the scripts/ folder. The src/ folder contains the source code of the endmember_utils package, which is used in much of the analysis.
This repo is for demonstration of SPGD-AA applications only. The source code SPGD-AA is hosted in GitHub repo aleixalcacer/archetypes.
Requires: Python 3.12
git clonethe repo, or download and unzipcdthe root directory of the project- create and activate a Python virtual environment
pip install -e .[jupyter]to install the current project, which comes with a moduleendmember_utils. This should install all the dependencies automatically.
After installation, the endmember_utils package, and some other necessary packages like archetypes will be available in the current python virtual environment. You can now run the demo.ipynb notebook (or other scripts, which are independent, given that the result files are already avaliable).
This repo is not intended to be a community-driven python project. Rather, it is created to demonstrate some simple examples and applications of SPGD-AA in end-member mixing analysis. We recommend those who are interested to join us to contribute to the archetypes package. However, if you do see any deficiencies in the repo or have any suggestions, issues and pull requests are welcome :)