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

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}
}
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for harari/evo2-snv-pathogenicity-classifier

Finetuned
(2)
this model