Skip to content

Instantly share code, notes, and snippets.

@andersx
Last active December 5, 2019 12:08
Show Gist options
  • Save andersx/4b50d8d995d537946b859fb318cfe292 to your computer and use it in GitHub Desktop.
Save andersx/4b50d8d995d537946b859fb318cfe292 to your computer and use it in GitHub Desktop.
Test to verify that kernel matrices for FCHL19 are positive-definite.
#!/usr/bin/env python3
#
# Data must be downloaded from from http://quantum-machine.org/gdml/#datasets
#
import sys
import numpy as np
import qml
from qml.math import cho_solve
from qml.representations import generate_fchl_acsf
from qml.kernels import get_local_symmetric_kernel
from qml.kernels import get_symmetric_gdml_kernel
from qml.kernels import get_symmetric_gp_kernel
from tqdm import tqdm
def get_reps_fchl(indexes, coords, charges):
max_atoms = len(charges)
elements = sorted(list(set(charges)))
print("Max atoms:", max_atoms)
print("Elements:", elements)
X = []
dX = []
Q = []
for i, idx in tqdm(enumerate(indexes), desc="FCHL19 representations"):
# print(i, idx, coords[idx])
(x, dx) = generate_fchl_acsf(charges, coords[idx], elements=elements, gradients=True)
dX.append(dx)
X.append(x)
Q.append(charges)
X = np.array(X)
dX = np.array(dX)
return X, dX, Q
def test_definite():
print(sys.argv)
name = sys.argv[1]
n = int(sys.argv[2])
Q_data = np.load("%s_dft_charges.npy" % name)
R_data = np.load("%s_dft_coords.npy" % name)
indexes = list(range(n))
X, dX, Q = get_reps_fchl(indexes, R_data, Q_data)
sigma = 2.0
llambda = 1e-10
print("KRR Kernel")
K = get_local_symmetric_kernel(X, Q, sigma)
K[np.diag_indices_from(K)] += llambda
eigen_vals, eigen_vectors = np.linalg.eigh(K)
print(eigen_vals)
print("GDML Kernel")
K = get_symmetric_gdml_kernel(X, dX, Q, sigma)
K[np.diag_indices_from(K)] += llambda
eigen_vals, eigen_vectors = np.linalg.eigh(K)
print(eigen_vals)
print("GPR Kernel")
K = get_symmetric_gp_kernel(X, dX, Q, sigma)
K[np.diag_indices_from(K)] += llambda
eigen_vals, eigen_vectors = np.linalg.eigh(K)
print(eigen_vals)
if __name__ == "__main__":
test_definite()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment