TargetDiff / scripts /property_prediction /local_misc_prop.py
OneScience's picture
Upload folder using huggingface_hub
1783057 verified
Raw
History Blame Contribute Delete
2.56 kB
import numpy as np
from scipy.stats import pearsonr, spearmanr
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
from torch_geometric.loader import DataLoader
from models.property_pred.prop_model import PropPredNet, PropPredNetEnc
def get_eval_scores(ypred_arr, ytrue_arr, logger, prefix='All'):
if len(ypred_arr) == 0:
return None
rmse = np.sqrt(mean_squared_error(ytrue_arr, ypred_arr))
mae = mean_absolute_error(ytrue_arr, ypred_arr)
r2 = r2_score(ytrue_arr, ypred_arr)
pearson, ppval = pearsonr(ytrue_arr, ypred_arr)
spearman, spval = spearmanr(ytrue_arr, ypred_arr)
mean = np.mean(ypred_arr)
std = np.std(ypred_arr)
logger.info("Evaluation Summary:")
logger.info(
"[%4s] num: %3d, RMSE: %.3f, MAE: %.3f, "
"R^2 score: %.3f, Pearson: %.3f, Spearman: %.3f, mean/std: %.3f/%.3f" % (
prefix, len(ypred_arr), rmse, mae, r2, pearson, spearman, mean, std))
return rmse
def get_dataloader(train_set, val_set, test_set, config):
follow_batch = ['protein_element', 'ligand_element']
collate_exclude_keys = ['ligand_nbh_list']
train_loader = DataLoader(
train_set,
batch_size=config.train.batch_size,
shuffle=True,
num_workers=config.train.num_workers,
follow_batch=follow_batch,
exclude_keys=collate_exclude_keys
)
val_loader = DataLoader(val_set, config.train.batch_size, shuffle=False,
follow_batch=follow_batch, exclude_keys=collate_exclude_keys)
test_loader = DataLoader(test_set, config.train.batch_size, shuffle=False,
follow_batch=follow_batch, exclude_keys=collate_exclude_keys)
return train_loader, val_loader, test_loader
def get_model(config, protein_atom_feat_dim, ligand_atom_feat_dim):
if config.model.encoder.name == 'egnn_enc':
model = PropPredNetEnc(
config.model,
protein_atom_feature_dim=protein_atom_feat_dim,
ligand_atom_feature_dim=ligand_atom_feat_dim,
enc_ligand_dim=config.model.enc_ligand_dim,
enc_node_dim=config.model.enc_node_dim,
enc_graph_dim=config.model.enc_graph_dim,
enc_feature_type=config.model.enc_feature_type,
output_dim=1
)
else:
model = PropPredNet(
config.model,
protein_atom_feature_dim=protein_atom_feat_dim,
ligand_atom_feature_dim=ligand_atom_feat_dim,
output_dim=3
)
return model