harari's picture
Upload README.md with huggingface_hub
d9d149e verified
|
Raw History Blame Contribute Delete
3.64 kB
---
license: mit
tags:
- genomics
- dna
- variant-effect-prediction
- cardiomyopathy
- evo2
base_model: arcinstitute/evo2_40b
---
# Supervised Evo 2 classifier for SNV pathogenicity
Classifier of ClinVar pathogenic/likely pathogenic (P/LP) versus benign/likely benign (B/LB) coding SNVs in 24
cardiomyopathy genes, from Evo 2 40B embeddings. It is the supervised SNV classifier of *Evo 2 Predicts
Cardiomyopathy-Associated Variants and Elucidates Their Underlying Mechanisms* (Kurozumi, Otsuka et al.; bioRxiv
doi:10.64898/2026.05.15.725304), Supplementary Methods and Figure S2A.
## Input
For each SNV, a 128-bp window with the variant at the 65th position (GRCh38) is embedded with Evo 2 40B
(`arcinstitute/evo2_40b`, layer `blocks.20.mlp.l3`) for four sequences: reference, its reverse complement,
alternate, its reverse complement. Each embedding is averaged over the 128 positions (8,192 values) and the four are
concatenated (32,768 values), then standardised with `scaler_mean` / `scaler_scale` stored in the checkpoint.
## Model and training
- Input (32,768) β†’ Linear (512) β†’ ReLU β†’ BatchNorm β†’ Dropout (0.3) β†’ Linear (128) β†’ ReLU β†’ BatchNorm β†’ Dropout (0.3)
β†’ Linear (32) β†’ ReLU β†’ BatchNorm β†’ Dropout (0.3) β†’ Linear (1); the output is a logit (sigmoid gives the probability).
- Data: all 22,840 coding SNVs (3,535 P/LP, 19,305 B/LB), split at the SNV level into training 14,617, validation
3,655 and test 4,568 by two stratified random splits (scikit-learn, random_state 42).
- Adam (learning rate 3 Γ— 10⁻⁴, batch 128), binary cross-entropy, up to 500 epochs; early stopping (patience 100) on
the validation AUROC; learning-rate decay (Γ—0.5, patience 20, minimum 10⁻⁢) on the validation loss; gradient
clipping 1.0; seed 42. The weights of the epoch with the highest validation AUROC (epoch 29) are given here.
## Test performance (n = 4,568)
| AUROC | AUPRC |
|---|---|
| 0.996 | 0.982 |
`test_predictions.csv` lists every test SNV with its predicted probability.
## Usage
```python
import torch, torch.nn as nn
class SNVClassifier(nn.Module):
def __init__(self, d_in=32768, p=0.3):
super().__init__()
self.fc1, self.bn1, self.dropout1 = nn.Linear(d_in, 512), nn.BatchNorm1d(512), nn.Dropout(p)
self.fc2, self.bn2, self.dropout2 = nn.Linear(512, 128), nn.BatchNorm1d(128), nn.Dropout(p)
self.fc3, self.bn3, self.dropout3 = nn.Linear(128, 32), nn.BatchNorm1d(32), nn.Dropout(p)
self.fc4 = nn.Linear(32, 1)
def forward(self, x):
x = self.dropout1(self.bn1(torch.relu(self.fc1(x))))
x = self.dropout2(self.bn2(torch.relu(self.fc2(x))))
x = self.dropout3(self.bn3(torch.relu(self.fc3(x))))
return self.fc4(x).squeeze(-1)
ck = torch.load("snv_classifier_22840.pth", map_location="cpu", weights_only=True)
model = SNVClassifier(); model.load_state_dict(ck["model_state_dict"]); model.eval()
prob = torch.sigmoid(model((x - ck["scaler_mean"]) / ck["scaler_scale"])) # x: (n, 32,768) as described above
```
## Files
- `snv_classifier_22840.pth`: weights and feature standardisation
- `test_predictions.csv`, `metrics.json`, `history.csv`
Also archived on Zenodo with the analysis code: doi:10.5281/zenodo.23824204.
## Citation
```
@article{kurozumi2026evo2,
title={Evo 2 Predicts Cardiomyopathy-Associated Variants and Elucidates Their Underlying Mechanisms},
author={Kurozumi, Atsumasa and Otsuka, Naoto and Ito, Masamichi and Kawakami, Toshinaru and Isagawa, Takayuki and Kodera, Satoshi and Takeda, Norihiko},
journal={bioRxiv}, year={2026}, doi={10.64898/2026.05.15.725304}
}
```