compare
Compare element similarity structures across different embedding schemes.
This module provides functions to quantitatively compare how different embedding schemes represent chemical similarity between elements.
Example usage::
from elementembeddings.core import Embedding
from elementembeddings.compare import (
embedding_similarity,
mantel_test,
pairwise_embedding_comparison,
)
magpie = Embedding.load_data("magpie")
mat2vec = Embedding.load_data("mat2vec")
# Pearson correlation between cosine similarity matrices
r = embedding_similarity(magpie, mat2vec)
# Mantel test with p-value
r, p = mantel_test(magpie, mat2vec)
# Compare all embeddings pairwise
embeddings = {name: Embedding.load_data(name) for name in ["magpie", "mat2vec", "megnet16"]}
comparison_df = pairwise_embedding_comparison(embeddings)
embedding_similarity(emb1, emb2, metric='cosine_similarity', comparison='pearson')
Compare two embeddings by correlating their element similarity matrices.
Computes the pairwise element similarity matrix for each embedding, then correlates the flattened upper triangles.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
emb1
|
Embedding
|
First embedding. |
required |
emb2
|
Embedding
|
Second embedding. |
required |
metric
|
str
|
Similarity metric for element pairs (default: cosine_similarity). |
'cosine_similarity'
|
comparison
|
str
|
Correlation method for comparing matrices. One of "pearson", "spearman", "kendall". |
'pearson'
|
Returns:
| Type | Description |
|---|---|
float
|
Correlation coefficient between the two similarity matrices. |
Source code in src/elementembeddings/compare.py
frobenius_distance(emb1, emb2, metric='cosine_similarity', normalise=True)
Frobenius norm of the difference between two similarity matrices.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
emb1
|
Embedding
|
First embedding. |
required |
emb2
|
Embedding
|
Second embedding. |
required |
metric
|
str
|
Similarity metric for element pairs. |
'cosine_similarity'
|
normalise
|
bool
|
If True, normalise by the number of element pairs. |
True
|
Returns:
| Type | Description |
|---|---|
float
|
Frobenius distance between the two similarity matrices. |
Source code in src/elementembeddings/compare.py
kl_divergence(emb1, emb2, metric='cosine_similarity')
KL divergence between normalised similarity distributions.
Normalises each embedding's similarity matrix into a probability distribution using softmax, then computes the KL divergence D_KL(emb1 || emb2).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
emb1
|
Embedding
|
First embedding (the "true" distribution). |
required |
emb2
|
Embedding
|
Second embedding (the "approximate" distribution). |
required |
metric
|
str
|
Similarity metric for element pairs. |
'cosine_similarity'
|
Returns:
| Name | Type | Description |
|---|---|---|
float
|
KL divergence (non-negative, 0 means identical distributions). |
|
Note |
float
|
this is asymmetric — D_KL(A||B) != D_KL(B||A). |
Source code in src/elementembeddings/compare.py
mantel_test(emb1, emb2, metric='cosine_similarity', method='pearson', n_permutations=999)
Mantel test for correlation between two embedding similarity matrices.
Permutation-based significance test for the correlation between two distance/similarity matrices. Standard in ecology and chemistry for comparing pairwise relationship structures.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
emb1
|
Embedding
|
First embedding. |
required |
emb2
|
Embedding
|
Second embedding. |
required |
metric
|
str
|
Similarity metric for element pairs. |
'cosine_similarity'
|
method
|
str
|
Correlation method ("pearson" or "spearman"). |
'pearson'
|
n_permutations
|
int
|
Number of permutations for p-value estimation. |
999
|
Returns:
| Type | Description |
|---|---|
float
|
Tuple of (correlation_coefficient, two_sided_p_value). |
float
|
The p-value is two-sided: the fraction of permutations whose |
tuple[float, float]
|
absolute correlation is at least as large as |observed|. |
Source code in src/elementembeddings/compare.py
pairwise_embedding_comparison(embeddings, metric='cosine_similarity', comparison='pearson')
Compare all pairs of embeddings, returning a comparison matrix.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
embeddings
|
dict[str, Embedding]
|
Dictionary mapping embedding names to Embedding objects. |
required |
metric
|
str
|
Similarity metric for element pairs. |
'cosine_similarity'
|
comparison
|
str
|
Correlation method for comparing matrices. |
'pearson'
|
Returns:
| Type | Description |
|---|---|
DataFrame
|
DataFrame with embedding names as index/columns and correlation |
DataFrame
|
values as entries. |