Beispiel #1
0
    def __init__(self, exclude=None):
        super(StructureFeaturizers, self).__init__(exclude=exclude)

        self._fast_featurizers = [
            sf.DensityFeatures(),
            sf.GlobalSymmetryFeatures(),
            sf.EwaldEnergy(),
            sf.SineCoulombMatrix(flatten=True)
        ]

        ssf = sf.SiteStatsFingerprint
        self._slow_featurizers = [
            ssf.from_preset('CrystalNNFingerprint_ops'),
            ssf.from_preset("BondLength-dejong2016"),
            ssf.from_preset("BondAngle-dejong2016"),
            ssf.from_preset("Composition-dejong2016_SD"),
            ssf.from_preset("Composition-dejong2016_AD"),
            ssf.from_preset("CoordinationNumber_ward-prb-2017"),
            ssf.from_preset("LocalPropertyDifference_ward-prb-2017"),
            sf.ChemicalOrdering(),
            sf.StructuralHeterogeneity(),
            sf.MaximumPackingEfficiency(),
            sf.XRDPowderPattern(),
            sf.Dimensionality(),
            sf.OrbitalFieldMatrix(flatten=True),
            sf.JarvisCFID(),
        ]

        # Prevent import errors
        self._require_external = []
        if torch and cgcnn:
            self._require_external.append(sf.CGCNNFeaturizer())
        if dscribe:
            self._require_external.append(sf.SOAP())

        self._need_fitting_featurizers = [
            sf.PartialRadialDistributionFunction(),
            sf.BondFractions(),
            sf.BagofBonds(coulomb_matrix=sf.CoulombMatrix()),
            sf.BagofBonds(coulomb_matrix=sf.SineCoulombMatrix()),
        ]

        self._matrix_featurizers = [
            sf.CoulombMatrix(flatten=False),
            sf.RadialDistributionFunction(),  # returns dict
            sf.MinimumRelativeDistances(),  # returns a list
            sf.ElectronicRadialDistributionFunction()
        ]

        # these are the same as _need_fitting_featurizers
        self._many_features_featurizers = [
            sf.PartialRadialDistributionFunction(),
            sf.BondFractions(approx_bonds=False),
            sf.BagofBonds(coulomb_matrix=sf.CoulombMatrix()),
            sf.BagofBonds(coulomb_matrix=sf.SineCoulombMatrix()),
            sf.OrbitalFieldMatrix(flatten=True),
            sf.JarvisCFID()
        ]
Beispiel #2
0
    def __init__(self, exclude=None):
        super(StructureFeaturizers, self).__init__(exclude=exclude)

        self._fast_featurizers = [
            sf.DensityFeatures(),
            sf.GlobalSymmetryFeatures(),
            sf.EwaldEnergy()
        ]

        self._slow_featurizers = [
            sf.SiteStatsFingerprint.from_preset('CrystalNNFingerprint_ops'),
            sf.ChemicalOrdering(),
            sf.StructuralHeterogeneity(),
            sf.MaximumPackingEfficiency(),
            sf.XRDPowderPattern(),
            sf.Dimensionality(),
            sf.OrbitalFieldMatrix(flatten=True)
        ]

        self._need_fitting_featurizers = [
            sf.PartialRadialDistributionFunction(),
            sf.BondFractions(),
            sf.BagofBonds()
        ]

        self._matrix_featurizers = [
            sf.RadialDistributionFunction(),  # returns dict
            sf.CoulombMatrix(),  # returns a matrix
            sf.SineCoulombMatrix(),  # returns a matrix
            sf.OrbitalFieldMatrix(flatten=False),  # returns a matrix
            sf.MinimumRelativeDistances(),  # returns a list
            sf.ElectronicRadialDistributionFunction()
        ]

        # these are the same as _need_fitting_featurizers
        self._many_features_featurizers = [
            sf.PartialRadialDistributionFunction(),
            sf.BondFractions(),
            sf.BagofBonds(),
            sf.OrbitalFieldMatrix(flatten=True)
        ]
Beispiel #3
0
 def heavy(self):
     fs = [
         self.ssf.from_preset('CrystalNNFingerprint_ops'),
         sf.ChemicalOrdering(),
         sf.StructuralHeterogeneity(),
         sf.MaximumPackingEfficiency(),
         sf.XRDPowderPattern(),
         sf.Dimensionality(),
         sf.OrbitalFieldMatrix(flatten=True),
         sf.JarvisCFID(),
     ]
     fs += self.express
     fs = self._add_external(fs)
     return self._get_featurizers(fs)
    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 = MM.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()