29.3 단백질 구조 예측과 설계

실습 · 연습문제 2개

접촉 지도와 접촉 예측의 정밀도 contact-map

Cα 좌표 X∈RL×3\mathbf{X} \in \mathbb{R}^{L \times 3} (Å)에서 접촉 지도를 만들고, 예측한 접촉 점수가 실제 접촉을 얼마나 잘 맞히는지 잰다. 두 함수를 완성한다.

1. contact_map(X, cutoff=8.0, min_sep=6)

L×LL \times L bool 배열 CC를 반환한다. CijC_{ij}는 다음 두 조건을 모두 만족할 때만 True다.

  • 거리 ∥xi−xj∥\lVert \mathbf{x}_i - \mathbf{x}_j \rVert < cutoff
  • 서열 간격 ∣i−j∣|i - j| ≥ min_sep (서열상 가까운 잔기는 당연히 가까우므로 뺀다)

CC는 대칭이고 대각선은 False다.

2. top_l_precision(scores, true_contacts, min_sep=6)

scores는 예측 모델이 낸 L×LL \times L 접촉 점수(클수록 접촉일 가능성이 높음, 대칭), true_contacts는 contact_map의 결과다. 서열 간격이 min_sep 이상인 쌍 (i<j)(i < j) 가운데 점수가 높은 순서로 상위 LL개를 골라, 그중 실제 접촉인 비율을 반환한다. 접촉 예측을 평가할 때 흔히 쓰는 "top-L 정밀도"다. 점수가 같은 쌍이 경계에 걸리는 경우는 테스트하지 않는다.

예: 모든 실제 접촉 쌍에 다른 쌍보다 높은 점수를 주고 실제 접촉 쌍이 LL개 이상이면 정밀도는 1이다.

힌트: np.triu_indices(L, k=min_sep)는 j−i≥j - i \ge min_sep인 쌍의 인덱스를 준다.

Kabsch 정렬 RMSD kabsch-rmsd

두 구조 P,Q∈RL×3\mathbf{P}, \mathbf{Q} \in \mathbb{R}^{L \times 3}(같은 행끼리 같은 잔기, 단위 Å)를 회전과 평행이동으로 가장 잘 겹친 뒤의 RMSD를 계산한다.

RMSD(P,Q)=min⁡R∈SO(3), t1L∑i=1L∥R⊤pi+t−qi∥2\mathrm{RMSD}(\mathbf{P}, \mathbf{Q}) = \min_{\mathbf{R} \in SO(3),\, \mathbf{t}} \sqrt{\frac{1}{L} \sum_{i=1}^{L} \lVert \mathbf{R}^\top \mathbf{p}_i + \mathbf{t} - \mathbf{q}_i \rVert^2 }

함수 kabsch_rmsd(P, Q)를 완성해 RMSD(실수 하나)를 반환한다.

  1. 두 구조에서 각자의 무게중심(행 평균)을 뺀다: P0,Q0\mathbf{P}_0, \mathbf{Q}_0.
  2. H=P0⊤Q0\mathbf{H} = \mathbf{P}_0^\top \mathbf{Q}_0 (3×33 \times 3)의 SVD H=UΣV⊤\mathbf{H} = \mathbf{U}\boldsymbol{\Sigma}\mathbf{V}^\top를 구한다.
  3. d=sign⁡det⁡(UV⊤)d = \operatorname{sign}\det(\mathbf{U}\mathbf{V}^\top)로 두고 R=U diag(1,1,d) V⊤\mathbf{R} = \mathbf{U}\,\mathrm{diag}(1, 1, d)\,\mathbf{V}^\top. 반사는 허용하지 않는다(단백질의 거울상은 다른 분자다).
  4. P0R\mathbf{P}_0 \mathbf{R}과 Q0\mathbf{Q}_0의 RMSD를 반환한다.

테스트는 회전·평행이동한 구조의 RMSD가 0인지, 거울상이 0이 아닌지, 잡음 크기에 맞는 값이 나오는지, 무작위 회전을 여러 개 시도한 어떤 결과보다도 작거나 같은지 확인한다.

힌트: np.linalg.svd는 U, S, Vt를 반환한다. 세 번째 값이 이미 V⊤\mathbf{V}^\top이다.