Chapter 5: 딥러닝 속 생물물리학

이 장에서는 단백질-리간드 결합에 초점을 맞추어 분자 구조와 상호작용을 이해하기 위한 딥러닝 활용법을 다룹니다.

PDBID 시각화

nglview를 사용하여 단백질-리간드 복합체를 시각화할 수 있습니다. 일부 환경에서는 대화형 위젯이 렌더링되지 않을 수 있습니다.

Github은 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)