Chapter 5: 딥러닝 속 생물물리학
이 장에서는 생명 현상의 핵심인 단백질-리간드 결합에 주목합니다. 딥러닝을 통해 복잡한 분자 구조의 상호작용을 어떻게 분석하고 시각화할 수 있는지 다룹니다.
PDBID 시각화
nglview 라이브러리를 활용하면 단백질과 리간드가 결합한 복잡체를 입체적으로 관찰할 수 있습니다. (사용 환경에 따라 대화형 위젯이 보이지 않을 수 있으니 참고해 주세요.)
결합 친화도(Binding Affinity) 예측
분자 구조의 특징을 바탕으로 두 분자가 얼마나 강하게 결합하는지 수치로 예측해 봅니다.
신경망(Neural Networks) 모델
PDBBind 데이터셋과 멀티태스크 회귀 모델(MultitaskRegressor)을 사용하여 결합 친화도를 정밀하게 추정합니다.
import deepchem as dc
# 신경망을 활용해 PDBBind 데이터셋의 결합 친화도를 예측합니다. 먼저 데이터를 로드합니다.
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
# 모델을 생성하고 학습을 진행합니다.
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)
# 모델의 성능을 평가합니다.
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
# 랜덤 포레스트(Random Forest)를 사용해 PDBBind 데이터셋의 결합 친화도를 예측합니다. 먼저 데이터를 로드합니다.
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
# 모델을 생성하고 학습을 진행합니다.
sklearn_model = RandomForestRegressor(n_estimators=100)
model = dc.models.SklearnModel(sklearn_model, model_dir="pdbbind_rf")
model.fit(train_dataset)
# 모델의 성능을 평가합니다.
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)