Chapter 5: 딥러닝 속 생물물리학
이 장에서는 단백질-리간드 결합에 초점을 맞추어 분자 구조와 상호작용을 이해하기 위한 딥러닝 활용법을 다룹니다.
PDBID 시각화
nglview를 사용하여 단백질-리간드 복합체를 시각화할 수 있습니다. 일부 환경에서는 대화형 위젯이 렌더링되지 않을 수 있습니다.
결합 친화도(Binding Affinity) 예측
신경망(Neural Networks) 사용
구조적 특징을 기반으로 결합 친화도를 예측하기 위해 멀티태스크 회귀 모델(MultitaskRegressor)과 PDBBind 데이터셋을 사용합니다.
import deepchem as dc
# Use a neural network to predict the PDBBind dataset. First load the data.
featurizer = dc.feat.RdkitGridFeaturizer(
voxel_width=2.0,
sanitize=True,
flatten=True,
feature_types=["hbond", "salt_bridge", "pi_stack", "cation_pi", "ecfp", "splif"],
)
pdbbind_tasks, pdbbind_datasets, transformers = dc.molnet.load_pdbbind(
featurizer=featurizer, splitter="random", subset="core"
)
train_dataset, valid_dataset, test_dataset = pdbbind_datasets
# Create and train the model.
n_features = train_dataset.X.shape[1]
model = dc.models.MultitaskRegressor(
n_tasks=len(pdbbind_tasks),
n_features=n_features,
layer_sizes=[2000, 1000],
dropouts=0.5,
model_dir="pdbbind_nn",
learning_rate=0.0003,
)
model.fit(train_dataset, nb_epoch=50)
# Evaluate it.
metric = dc.metrics.Metric(dc.metrics.pearson_r2_score)
train_scores = model.evaluate(train_dataset, [metric], transformers)
test_scores = model.evaluate(test_dataset, [metric], transformers)
print("Train scores")
print(train_scores)
print("Test scores")
print(test_scores)랜덤 포레스트(Random Forests) 사용
예측을 위해 랜덤 포레스트 모델을 대신 사용할 수도 있습니다.
import deepchem as dc
from sklearn.ensemble import RandomForestRegressor
# Use a random forest to predict the PDBBind dataset. First load the data.
featurizer = dc.feat.RdkitGridFeaturizer(
voxel_width=2.0,
sanitize=True,
flatten=True,
feature_types=["hbond", "salt_bridge", "pi_stack", "cation_pi", "ecfp", "splif"],
)
pdbbind_tasks, pdbbind_datasets, transformers = dc.molnet.load_pdbbind(
featurizer=featurizer, splitter="random", subset="core"
)
train_dataset, valid_dataset, test_dataset = pdbbind_datasets
# Create and train the model.
sklearn_model = RandomForestRegressor(n_estimators=100)
model = dc.models.SklearnModel(sklearn_model, model_dir="pdbbind_rf")
model.fit(train_dataset)
# Evaluate it.
metric = dc.metrics.Metric(dc.metrics.pearson_r2_score)
train_scores = model.evaluate(train_dataset, [metric], transformers)
test_scores = model.evaluate(test_dataset, [metric], transformers)
print("Train scores")
print(train_scores)
print("Test scores")
print(test_scores)