A comprehensive comparative study of classical machine learning and deep learning approaches for molecular property prediction on small datasets.
This project systematically compares molecular property prediction approaches on two MoleculeNet benchmark datasets:
- SIDER: Multi-label classification of 27 drug side effects
- BACE: Regression of β-secretase 1 binding affinity
We evaluated both classical machine learning (Random Forest, SVM, XGBoost, Logistic Regression) and deep learning (MLP, GNN) models using multiple molecular representations to identify best practices for small molecular datasets.
- How do different molecular featurizations impact prediction performance?
- What are the trade-offs between classical and deep learning on datasets under 2,000 molecules?
- Does combining multiple feature representations improve results?
Chemoinformatics_project/
├── Classification/
│ ├── SIDER_analysis.ipynb # Complete SIDER classification pipeline
│ └── src/
│ ├── sider_preprocessing.py # Data cleaning and canonicalization
│ ├── sider_featurizer.py # Molecular featurization
│ ├── sider_baseline_models.py # Classical ML models
│ ├── MLP.py # Multi-layer perceptron
│ ├── sider_gnn.py # Graph neural network
│ ├── sider_svm_optimization.py # SVM hyperparameter tuning
│ ├── sider_umap.py # Dimensionality reduction visualization
│ └── chemberta_embeddings.py # Transformer-based embeddings
│
├── Regression/
│ ├── BACE_regression.ipynb # Complete BACE regression pipeline
│ └── src/
│ ├── featurizers.py # Multi-featurization pipeline
│ ├── baseline_regression_models.py # Classical regressors
│ ├── MLP.py # Neural network for regression
│ └── bace_gnn.py # GNN for molecular graphs
│
├── data/
│ └── raw/
│ ├── sider.csv # SIDER dataset (1,427 molecules)
│ └── bace.csv # BACE dataset (1,513 molecules)
│
├── requirements.txt # Python dependencies
└── README.md # This file
- Task: Multi-label classification
- Labels: 27 binary side effect categories
- Source: MoleculeNet
- Task: Regression
- Target: pIC50 binding affinity values
- Source: MoleculeNet
We systematically compared multiple molecular representations:
- Morgan Fingerprints (ECFP): 2,048-bit circular fingerprints (radius=2)
- RDKit Descriptors: 192 physicochemical properties
- MACCS Keys: 167 predefined structural patterns
- Combined Features: Concatenation of all three (2,407 dimensions)
- ChemBERTa Embeddings: 768-dimensional transformer-based representations
- Random Forest: GridSearchCV for hyperparameter optimization
- Support Vector Machines: Linear and RBF kernels with RandomizedSearchCV
- XGBoost: Gradient boosting with default parameters
- Logistic Regression: For multi-label classification
-
Multi-Layer Perceptron (MLP):
- 3 hidden layers (512, 256, 128 neurons)
- Batch normalization and dropout
- Early stopping with validation monitoring
-
Graph Neural Networks (GNN):
- Message passing with 3 iterations
- Node/edge feature embeddings
- Global mean pooling
- Bayesian optimization via Optuna (SIDER)
python >= 3.8
pip install -r requirements.txtrdkit: Cheminformatics toolkitscikit-learn: Classical ML algorithmspytorch: Deep learning frameworkpytorch-geometric: Graph neural networksdeepchem: Molecular ML utilitiestransformers: ChemBERTa embeddingsoptuna: Bayesian optimizationumap-learn: Dimensionality reduction
SIDER Classification:
jupyter notebook Classification/SIDER_analysis.ipynbBACE Regression:
jupyter notebook Regression/BACE_regression.ipynbThe project includes comprehensive visualizations:
-
UMAP Projections: Reveal structural separability for different side effects
- Clear clustering for predictable labels (e.g., gastrointestinal disorders)
- Scattered distribution for challenging labels (e.g., product issues)
-
Training Dynamics: Monitor validation vs test loss evolution
- Detect overfitting in combined features
- Compare convergence across featurizations
-
Class Distribution Analysis: Visualize severe imbalance in SIDER dataset
Based on our findings, we recommend:
- Establish baselines: Start with Random Forest and SVR across multiple featurizations
- Use cross-validation: Single splits show high variance; 5-10 fold CV more reliable
- Test feature combinations: Benefits are task-dependent
- Monitor multiple metrics: Track both validation and test performance
- Validate preprocessing: Check for data leakage in normalization
- Use UMAP visualization: Understand feature quality and separability
- Select appropriate metrics: Use macro-averaging for severe class imbalance
- Evaluate on larger datasets (>5,000 molecules) to identify regimes where learned representations surpass engineered features
- Incorporate 3D conformational information for structure-based prediction
- Implement uncertainty quantification for reliable confidence intervals
- Explore ensemble methods combining classical and deep learning
- Apply techniques to additional MoleculeNet datasets
- Datasets: MoleculeNet benchmark datasets (SIDER and BACE)
- Tools: RDKit, PyTorch Geometric, DeepChem, scikit-learn
- AI Assistance: ChatGPT and Claude Code for debugging and optimization