https://github.com/recess-eu-project/jeli
Joint Embedding-classifier Learning for improved Interpretability (JELI)
https://github.com/recess-eu-project/jeli
collaborative-filtering drug-repurposing factorization-machine interpretability
Last synced: 13 days ago
JSON representation
Joint Embedding-classifier Learning for improved Interpretability (JELI)
- Host: GitHub
- URL: https://github.com/recess-eu-project/jeli
- Owner: RECeSS-EU-Project
- License: mit
- Created: 2024-06-10T15:28:13.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2025-02-20T12:39:03.000Z (11 months ago)
- Last Synced: 2025-09-04T18:58:25.152Z (5 months ago)
- Topics: collaborative-filtering, drug-repurposing, factorization-machine, interpretability
- Language: Python
- Homepage: https://recess-eu-project.github.io/
- Size: 44.9 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Citation: CITATION.cff
- Codemeta: codemeta.json
- Zenodo: .zenodo.json
Awesome Lists containing this project
README

# Joint Embedding-classifier Learning for improved Interpretability (JELI) Python Package
This repository is a part of the EU-funded [RECeSS project](https://recess-eu-project.github.io) (#101102016), and hosts the code for the open-source Python package *JELI* for the collaborative filtering approach.
[](https://img.shields.io/badge/python-3.8%7C3.9-pink) [](https://doi.org/10.5281/zenodo.12193722) [](https://opensource.org/licenses/MIT) [](https://github.com/recess-eu-project/jeli/actions/workflows/post-push-test.yml) [](https://codecov.io/github/recess-eu-project/jeli?branch=master) [](https://www.codefactor.io/repository/github/recess-eu-project/jeli)
## Statement of need
Interpretability is a topical question in recommender systems, especially in healthcare applications. In drug repurposing, the goal is to identify novel therapeutic indications as drug-disease pairs. An interpretable drug repurposing algorithm quantifies the importance of each input feature for the predicted therapeutic drug-disease association in a non-ambiguous fashion, using post hoc methods. Unfortunately, different importance score-based approaches lead to different results, yielding unreliable interpretations.
We introduce the novel Joint Embedding Learning-classifier for improved Interpretability (JELI). It features a new structured recommender system and trains it jointly on a drug-disease-gene knowledge graph completion task. In particular, JELI simultaneously (a) learns the gene, drug, and disease embeddings; (b) predicts new drug-disease associations based on those embeddings; (c) provides importance scores for each gene. The drug and disease embeddings have a structure that depends on the gene embeddings. Therefore, JELI allows the introduction of graph-based priors on the connections between diseases, drugs, and genes in a generic fashion to recommend and argue for novel therapeutic drug-disease associations.
Contrary to prior works, the recommender system explicitly includes the importance scores, strengthening the link between the recommendations and the extracted scores while allowing the use of a generic embedding model. The recommendation strategy in JELI can also be readily applied beyond the task of drug repurposing for any sets of items, users, and features.
## Install the latest release
### Using pip
```bash
pip install jeli
```
### Docker
```bash
#Build Docker image
docker build -t jeli .
#Run Docker image built in previous step and drop into SSH
docker run -it --expose 3000 -p 3000:3000 jeli
```
### Dependencies
OS: developed and tested on Debian Linux.
The complete list of dependencies for *JELI* can be found at [requirements.txt](https://raw.githubusercontent.com/RECeSS-EU-Project/JELI/master/pip/requirements.txt) (pip).
## Usage
```python
from jeli.JELI import JELI
from stanscofi.utils import load_dataset
from stanscofi.training_testing import random_simple_split
import pandas as pd
## loads the Gottlieb drug repurposing data set
data_args = load_dataset("Gottlieb", "./")
dataset = Dataset(**data_args)
## splits in training and testing sets without leakage
(train_folds, test_folds), _ = random_simple_split(dataset, 0.2, random_state=1234)
train = dataset.subset(train_folds)
test = dataset.subset(test_folds)
classifier = JELI({"cuda_on": False, "n_dimensions": 10, "random_state": 1234, "epochs": 25})
## trains JELI on the training set
classifier.fit(train)
## predicts on the testing set
scores = classifier.predict_proba(test)
classifier.print_scores(scores)
predictions = classifier.predict(scores, threshold=0.5)
classifier.print_classification(predictions)
## computes an embedding i (item/drug)
item = pd.DataFrame(dataset.items.toarray()[:,0],index=dataset.item_features,columns=["0"])
i = model.transform(item, is_item=True)
## computes an embedding u (user/disease)
user = pd.DataFrame(dataset.users.toarray()[:,0],index=dataset.user_features,columns=["0"])
u = model.transform(user, is_item=False)
## computes the feature-wise importance scores from embeddings
embs = classifier.model["feature_embeddings"]
feature_scores = embs.sum(axis=1)
```
## Licence
This repository is under an [OSI-approved](https://opensource.org/licenses/) [MIT license](https://raw.githubusercontent.com/RECeSS-EU-Project/JELI/master/LICENSE).
## Citation
If you use *JELI* in academic research, please cite it as follows
```
@article{reda2025joint,
title={Joint embedding--classifier learning for interpretable collaborative filtering},
author={R{\'e}da, Cl{\'e}mence and Vie, Jill-J{\^e}nn and Wolkenhauer, Olaf},
journal={BMC bioinformatics},
volume={26},
number={1},
pages={26},
year={2025},
publisher={Springer}
}
```
## Community guidelines with respect to contributions, issue reporting, and support
[Pull requests](https://github.com/RECeSS-EU-Project/JELI/pulls) and [issue flagging](https://github.com/RECeSS-EU-Project/JELI/issues) are welcome, and can be made through the GitHub interface. Support can be provided by reaching out to ``recess-project[at]proton.me``. However, please note that contributors and users must abide by the [Code of Conduct](https://github.com/RECeSS-EU-Project/JELI/blob/master/CODE%20OF%20CONDUCT.md).