실습 · 연습문제 2개
접촉 지도와 접촉 예측의 정밀도 contact-map
Cα 좌표 (Å)에서 접촉 지도를 만들고, 예측한 접촉 점수가 실제 접촉을 얼마나 잘 맞히는지 잰다. 두 함수를 완성한다.
1. contact_map(X, cutoff=8.0, min_sep=6)
bool 배열 를 반환한다. 는 다음 두 조건을 모두 만족할 때만 True다.
- 거리 <
cutoff - 서열 간격 ≥
min_sep(서열상 가까운 잔기는 당연히 가까우므로 뺀다)
는 대칭이고 대각선은 False다.
2. top_l_precision(scores, true_contacts, min_sep=6)
scores는 예측 모델이 낸 접촉 점수(클수록 접촉일 가능성이 높음, 대칭), true_contacts는 contact_map의 결과다. 서열 간격이 min_sep 이상인 쌍 가운데 점수가 높은 순서로 상위 개를 골라, 그중 실제 접촉인 비율을 반환한다. 접촉 예측을 평가할 때 흔히 쓰는 "top-L 정밀도"다. 점수가 같은 쌍이 경계에 걸리는 경우는 테스트하지 않는다.
예: 모든 실제 접촉 쌍에 다른 쌍보다 높은 점수를 주고 실제 접촉 쌍이 개 이상이면 정밀도는 1이다.
힌트: np.triu_indices(L, k=min_sep)는 min_sep인 쌍의 인덱스를 준다.
Kabsch 정렬 RMSD kabsch-rmsd
두 구조 (같은 행끼리 같은 잔기, 단위 Å)를 회전과 평행이동으로 가장 잘 겹친 뒤의 RMSD를 계산한다.
함수 kabsch_rmsd(P, Q)를 완성해 RMSD(실수 하나)를 반환한다.
- 두 구조에서 각자의 무게중심(행 평균)을 뺀다: .
- ()의 SVD 를 구한다.
- 로 두고 . 반사는 허용하지 않는다(단백질의 거울상은 다른 분자다).
- 과 의 RMSD를 반환한다.
테스트는 회전·평행이동한 구조의 RMSD가 0인지, 거울상이 0이 아닌지, 잡음 크기에 맞는 값이 나오는지, 무작위 회전을 여러 개 시도한 어떤 결과보다도 작거나 같은지 확인한다.
힌트: np.linalg.svd는 U, S, Vt를 반환한다. 세 번째 값이 이미 이다.