Machine learning methods for detecting phase transitions in the optical SSH (Su-Schrieffer-Heeger) model. Four unsupervised/semi-supervised approaches are benchmarked against finite-size scaling (FSS) reference values for the valence bond solid (VBS) critical inverse temperature
All models are use an
-
$\alpha$ — coupling constant (0.240, 0.245, 0.250, 0.255) -
$\beta$ — inverse temperature; the goal is to identify the critical value β_c where the VBS phase transition occurs -
$\omega= 0.5$ — phonon frequency
All parameters are in units of
FSS reference values:
| 0.240 | 17.5 |
| 0.245 | 14.3 |
| 0.250 | 12.5 |
| 0.255 | 12.3 |
Principal Component Analysis on the
-
PCA susceptibility
Peak of
$Var(P_1)$ and$Var(P_2)$ as a function of$\beta$ (analogous to magnetic susceptibility) -
KMeans clustering
$k=2$ clustering in$(P_1, P_2)$ space; sigmoid fit to the KVBS fraction$f_{KVBS}(\beta)$
Non-linear dimensionality reduction to a
-
KMeans clustering
and sigmoid fit to
$f_{KVBS}(\beta)$ - GMM (Gaussian Mixture Model) clustering as a secondary estimate
CNN-based approach: trains a classifier to distinguish configurations on either side of a guessed
An autoencoder with a latent_dim=2) trained on all configurations.
-
Reconstruction error
The reconstruction error is highest at
$\beta_c$ since ambiguity is notable accross many samples -
Latent KMeans
$k=2$ clustering in latent space$(z_0, z_1)$ with sigmoid fit
pip install -e .For UMAP support:
pip install -e ".[umap]"Requirements: Python ≥ 3.8, numpy, scipy, scikit-learn, torch, matplotlib. Optional: umap-learn.
Place input CSV files in a NEW/ directory at the project root. Each file should be named:
BondBond012345_momentum_L12_w0.5_m0.0_a{alpha:.4f}-1.csv
Each row contains
python -m ssh_ml_phasepython -m ssh_ml_phase.pca_method
python -m ssh_ml_phase.umap_method
python -m ssh_ml_phase.assaad_method
python -m ssh_ml_phase.autoencoderpython -m ssh_ml_phase.pca_method --alphas 0.240python -m ssh_ml_phase --skip-assaad --skip-aeResults are saved as .npz files in the results/ directory.
Open SSH_ML_phase_detection.ipynb after running the methods. The notebook loads the pre-computed .npz result files and generates comparison plots saved to ssh_ml_phase/figures/:
| Figure | Content |
|---|---|
PCA_susceptibility_argmax.pdf |
|
PCA_kmeans.pdf |
|
UMAP_beta_c.pdf |
UMAP embedding and KMeans/GMM |
Part4_autoencoder.pdf |
Mean reconstruction error, derivative, and latent order parameter |
Part4_latent_scatter.pdf |
Autoencoder latent space scatter coloured by |
Final_summary_all_methods.pdf |
All methods' |
PhaseLearner/
├── ssh_ml_phase/
│ ├── config.py # FSS references, paths, physical constants
│ ├── data.py # CSV loading utilities
│ ├── pca_method.py # PCA susceptibility and KMeans
│ ├── umap_method.py # UMAP + KMeans/GMM
│ ├── assaad_method.py # Greitemann–Iqbal CNN method
│ ├── autoencoder.py # Autoencoder anomaly detection
│ ├── run_all.py # Orchestrates all methods
│ └── figures/ # Output plots
├── results/ # Saved .npz result files (generated)
├── NEW/ # Input CSV data (not tracked)
├── SSH_ML_phase_detection.ipynb
└── setup.py