New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
SOAP descriptors of different species too similar? #58
Comments
Hi @ryokbys! I don't see anything fundamentally wrong with your current setup. In the context of the original definition for SOAP (https://doi.org/10.1103/PhysRevB.87.184115), there are a few parameters you can tune if you are interested in tuning SOAP to be more sensitive to the sites:
Also, if you are using these descriptors in a machine learning environment, the learning algorithm hyperparameters should adjust quite well to detecting even smaller changes. There are some ideas for improving the locality of SOAP that go beyond the original definition, see issue #20. Out of curiosity, what other code are you using, and which parameters are you using? |
Thanks @lauri-codes for your quick response. The reason why asked this is because I got the following PCA map of SOAP features obtained from polycrystalline 4-component system using DScribe, which was much different from I expected. I expected that points of each species make separate clusters. But this could be true... Actually the PCA map obtained from crystalline of the same 4-component system, I got more reasonable-looking(?) one like the following. The one I used to compare SOAP descriptor is a fortran wrapper routine that calls GAP code in QUIP. But unfortunately it is not scalable to large system, that's why I am trying DScribe. The SOAP graph obtained by it with almost the same configuration looks more different between species, but it could also be the magic of ordering of SOAP index or something. Anyway, thanks for your advices. |
Hi @ryokbys! Coming back to this issue in preparation for version 1.1.0: we will add a new weighting option for SOAP that will greatly increase the local resolution. Here is an example script of using it (the structure is here: forsterite.zip): import numpy as np
import matplotlib.pyplot as mpl
from ase.io import read
from dscribe.descriptors import SOAP
atoms = read("./forsterite.poscar")
atoms.wrap()
soap = SOAP(
species=["Mg", "Si", "O"],
periodic=True,
weighting={"function": "poly", "r0": 6, "c": 1, "d": 1, "m": 4},
nmax=4,
lmax=3,
crossover=True,
)
feat = soap.create(atoms)
fix, ax = mpl.subplots(figsize=(10, 5))
for index in [0, 8, 24]:
i_feat = feat[index]
x = np.arange(0, i_feat.shape[0])
mpl.plot(x, i_feat, label=atoms.get_chemical_symbols()[index])
mpl.legend()
mpl.tight_layout()
mpl.show() This produces the following plot for your structure: As you can see, by introducing a radial weighting that monotonuously decreases towards zero the further you go from a center (this is controlled by the new cd dscribe
pip installl . |
Closing this for now, please see the previous comment. |
Hi,
It's a great project.
I tried to create SOAP descriptors of a crystalline system including a few chemical species. But the obtained SOAP descriptors of other species seem too close. Attached is an example of Mg2SiO4 and the plot at the end of the notebook shows very close SOAP values for Mg, Si, and O species. I am not very sure whether it is wrong, but if I make SOAP descriptors with a different program values for the species are much different. Could you tell me if something wrong with my way of creating SOAP?
Versions
The text was updated successfully, but these errors were encountered: