Exemple #1
0
 def test_orbital_field_matrix(self):
     ofm_maker = OrbitalFieldMatrix()
     ofm = ofm_maker.featurize(self.diamond)[0]
     mtarget = np.zeros((32, 32))
     mtarget[1][1] = 1.4789015  # 1.3675444
     mtarget[1][3] = 1.4789015  # 1.3675444
     mtarget[3][1] = 1.4789015  # 1.3675444
     mtarget[3][3] = 1.4789015  # 1.3675444 if for a coord# of exactly 4
     for i in range(32):
         for j in range(32):
             if not i in [1, 3] and not j in [1, 3]:
                 self.assertEquals(ofm[i, j], 0.0)
     mtarget = np.matrix(mtarget)
     self.assertAlmostEqual(np.linalg.norm(ofm - mtarget), 0.0, places=4)
Exemple #2
0
    def test_orbital_field_matrix(self):
        ofm_maker = OrbitalFieldMatrix()
        ofm = ofm_maker.featurize(self.diamond)[0]
        mtarget = np.zeros((32, 32))
        mtarget[1][1] = 1.4789015  # 1.3675444
        mtarget[1][3] = 1.4789015  # 1.3675444
        mtarget[3][1] = 1.4789015  # 1.3675444
        mtarget[3][3] = 1.4789015  # 1.3675444 if for a coord# of exactly 4
        for i in range(32):
            for j in range(32):
                if not i in [1, 3] and not j in [1, 3]:
                    self.assertEqual(ofm[i, j], 0.0)
        mtarget = np.matrix(mtarget)
        self.assertAlmostEqual(
            np.linalg.norm(ofm - mtarget), 0.0, places=4)

        ofm_maker = OrbitalFieldMatrix(True)
        ofm = ofm_maker.featurize(self.diamond)[0]
        mtarget = np.zeros((39, 39))
        mtarget[1][1] = 1.4789015
        mtarget[1][3] = 1.4789015
        mtarget[3][1] = 1.4789015
        mtarget[3][3] = 1.4789015
        mtarget[1][33] = 1.4789015
        mtarget[3][33] = 1.4789015
        mtarget[33][1] = 1.4789015
        mtarget[33][3] = 1.4789015
        mtarget[33][33] = 1.4789015
        mtarget = np.matrix(mtarget)
        self.assertAlmostEqual(
            np.linalg.norm(ofm - mtarget), 0.0, places=4)

        ofm_flat = OrbitalFieldMatrix(period_tag=False, flatten=True)
        self.assertEqual(len(ofm_flat.feature_labels()), 1024)

        ofm_flat = OrbitalFieldMatrix(period_tag=True, flatten=True)
        self.assertEqual(len(ofm_flat.feature_labels()), 1521)
        ofm_vector = ofm_flat.featurize(self.diamond)
        for ix in [40, 42, 72, 118, 120, 150, 1288, 1320]:
            self.assertAlmostEqual(ofm_vector[ix], 1.4789015345821415)
Exemple #3
0
    def test_orbital_field_matrix(self):
        ofm_maker = OrbitalFieldMatrix(flatten=False)
        ofm = ofm_maker.featurize(self.diamond)[0]
        mtarget = np.zeros((32, 32))
        mtarget[1][1] = 1.4789015  # 1.3675444
        mtarget[1][3] = 1.4789015  # 1.3675444
        mtarget[3][1] = 1.4789015  # 1.3675444
        mtarget[3][3] = 1.4789015  # 1.3675444 if for a coord# of exactly 4
        for i in range(32):
            for j in range(32):
                if not i in [1, 3] and not j in [1, 3]:
                    self.assertEqual(ofm[i, j], 0.0)
        mtarget = np.matrix(mtarget)
        self.assertAlmostEqual(np.linalg.norm(ofm - mtarget), 0.0, places=4)

        ofm_maker = OrbitalFieldMatrix(True, flatten=False)
        ofm = ofm_maker.featurize(self.diamond)[0]
        mtarget = np.zeros((39, 39))
        mtarget[1][1] = 1.4789015
        mtarget[1][3] = 1.4789015
        mtarget[3][1] = 1.4789015
        mtarget[3][3] = 1.4789015
        mtarget[1][33] = 1.4789015
        mtarget[3][33] = 1.4789015
        mtarget[33][1] = 1.4789015
        mtarget[33][3] = 1.4789015
        mtarget[33][33] = 1.4789015
        mtarget = np.matrix(mtarget)
        self.assertAlmostEqual(np.linalg.norm(ofm - mtarget), 0.0, places=4)

        ofm_flat = OrbitalFieldMatrix(period_tag=False, flatten=True)
        self.assertEqual(len(ofm_flat.feature_labels()), 1024)

        ofm_flat = OrbitalFieldMatrix(period_tag=True, flatten=True)
        self.assertEqual(len(ofm_flat.feature_labels()), 1521)
        ofm_vector = ofm_flat.featurize(self.diamond)
        for ix in [40, 42, 72, 118, 120, 150, 1288, 1320]:
            self.assertAlmostEqual(ofm_vector[ix], 1.4789015345821415)
    rmse += np.mean(((Y_pred - Y_test) / N_test)**2)**0.5 / NUM_SPLITS
    r2 += sklearn.metrics.r2_score(Y_test / N_test,
                                   Y_pred / N_test) / NUM_SPLITS

print("SCM RESULTS MAE = %f, RMSE = %f, R-SQUARED = %f" % (mae, rmse, r2))
finish = time.monotonic()
print("TIME TO TEST SCM %f SECONDS" % (finish - start))
print()

# OFM evaluation
for ROW in [False, True]:
    print("ROW ELEMS", ROW)

    # Featurize dataframe with OFM and time it
    start = time.monotonic()
    ofm = OrbitalFieldMatrix(ROW)
    ofm.set_n_jobs(NJOBS)
    df = ofm.featurize_dataframe(df, 'structure')
    df['orbital field matrix'] = pd.Series([s.flatten() \
        for s in df['orbital field matrix']], df.index)
    finish = time.monotonic()
    print("TIME TO FEATURIZE OFM %f SECONDS" % (finish - start))
    print()

    # Get OFM descriptor and set up KRR model
    krr = KernelRidge()
    hpsel = GridSearchCV(krr,
                         params['orbital field matrix'],
                         cv=inner_cv,
                         refit=True)
    X = df['orbital field matrix'].as_matrix()
    mae += np.mean(np.abs(Y_pred - Y_test) / N_test) / NUM_SPLITS
    rmse += np.mean(((Y_pred - Y_test) / N_test)**2)**0.5 / NUM_SPLITS
    r2 += sklearn.metrics.r2_score(Y_test / N_test, Y_pred / N_test) / NUM_SPLITS

print ("SCM RESULTS MAE = %f, RMSE = %f, R-SQUARED = %f" % (mae, rmse, r2))
finish = time.monotonic()
print ("TIME TO TEST SCM %f SECONDS" % (finish-start))
print()

# OFM evaluation
for ROW in [False, True]:
    print ("ROW ELEMS", ROW)

    # Featurize dataframe with OFM and time it
    start = time.monotonic()
    ofm = OrbitalFieldMatrix(ROW)
    ofm.set_n_jobs(NJOBS)
    df = ofm.featurize_dataframe(df, 'structure')
    df['orbital field matrix'] = pd.Series([s.flatten() \
        for s in df['orbital field matrix']], df.index)
    finish = time.monotonic()
    print ("TIME TO FEATURIZE OFM %f SECONDS" % (finish-start))
    print()

    # Get OFM descriptor and set up KRR model
    krr = KernelRidge()
    hpsel = GridSearchCV(krr, params['orbital field matrix'],
                         cv=inner_cv, refit=True)
    X = df['orbital field matrix'].as_matrix()
    # Flatten each OFM to form a vector descriptor
    XLIST = []
    rmse += np.mean(((Y_pred - Y_test) / N_test)**2)**0.5 / NUM_SPLITS
    r2 += sklearn.metrics.r2_score(Y_test / N_test,
                                   Y_pred / N_test) / NUM_SPLITS

print("SCM RESULTS MAE = %f, RMSE = %f, R-SQUARED = %f" % (mae, rmse, r2))
finish = time.monotonic()
print("TIME TO TEST SCM %f SECONDS" % (finish - start))
print()

# OFM evaluation
for ROW in [False, True]:
    print("ROW ELEMS", ROW)

    # Featurize dataframe with OFM and time it
    start = time.monotonic()
    ofm = OrbitalFieldMatrix(period_tag=ROW)
    ofm.set_n_jobs(NJOBS)
    df = ofm.fit_featurize_dataframe(df, 'structure')
    finish = time.monotonic()
    print("TIME TO FEATURIZE OFM %f SECONDS" % (finish - start))
    print()

    # Get OFM descriptor and set up KRR model
    krr = KernelRidge()
    hpsel = GridSearchCV(krr,
                         params['orbital field matrix'],
                         cv=inner_cv,
                         refit=True)
    X = df[ofm.feature_labels()].to_numpy()
    # Flatten each OFM to form a vector descriptor
    XLIST = []
import numpy as np
from matminer.featurizers.structure import OrbitalFieldMatrix

cen_structures = np.load(
    '/home/dennis/Dropbox/mp_share_dt_ag/structs/centrosymmetric_insulators.npy',
    allow_pickle=True)
print(len(cen_structures))

#create ofm representations
ofm = OrbitalFieldMatrix()
cen_ofm = []

for item in cen_structures:
    cen_ofm.append(ofm.featurize(item))
np.save('centrosymmetric_ofm_representation.npy', cen_ofm)

non_cen_structures = np.load(
    '/home/dennis/Dropbox/mp_share_dt_ag/structs/non_centrosymmetric_insulators.npy',
    allow_pickle=True)
print(len(non_cen_structures))

non_cen_ofm = []
for item in non_cen_structures:
    non_cen_ofm.append(ofm.featurize(item))
np.save('non_centrosymmetric_ofm_representation.npy', non_cen_ofm)