Projects

Each project is a complete pipeline: data, training, evaluation, and prediction. Click any project with a live demo to try it.

Sentiment Classifier (DistilBERT + LoRA)

Live Demo

Fine-tunes DistilBERT for binary sentiment classification using LoRA, where only 0.3% of parameters are updated, producing a ~1 MB adapter. Three-way comparison: zero-shot baseline vs LoRA vs full fine-tune.

PyTorch Transformers LoRA / PEFT FastAPI

Bicing Availability Predictor

Live Demo

Predicts bike availability at Barcelona Bicing stations 15 minutes ahead. Time-series regression with temporal train/test split, lag features, rolling means, and a persistence baseline.

scikit-learn LightGBM Time Series FastAPI

ResNet-20 Image Classifier (from scratch)

Live Demo

From-scratch reimplementation of ResNet-20 from He et al. 2016: BasicBlock, residual connections, batch norm, and He initialisation all written by hand. Trained on CIFAR-10.

PyTorch CNN CIFAR-10 FastAPI

LLM Fine-Tune (SmolLM2 ML Tutor)

Live Demo

Fine-tunes SmolLM2-360M with LoRA to act as a machine learning tutor. Trained on 40 curated Q&A pairs with chat templates. Uses HuggingFace Trainer with gradient accumulation and cosine LR scheduling.

PyTorch HuggingFace Trainer LoRA / PEFT SmolLM2

Credit Card Fraud Detector (Unsupervised)

Live Demo

Unsupervised anomaly detection on 284K credit card transactions (0.17% fraud). Models train only on normal data and learn to flag deviations. Compares Isolation Forest, LOF, and One-Class SVM.

scikit-learn Anomaly Detection Unsupervised Imbalanced Data

CartPole Q-Learning (Reinforcement Learning)

Live Demo

A tabular Q-Learning agent that learns to balance a pole on a cart from scratch. Discretises the continuous state space into bins and builds an action-value table over 10,000 episodes.

Gymnasium Q-Learning Reinforcement Learning NumPy

Student Performance Predictor

Tabular ML

Predicts a student's final grade from study habits, sleep, attendance, and previous grades. Compares Linear Regression, Ridge, Lasso, Decision Tree, Random Forest, and SVR.

scikit-learn Regression Feature Scaling

KNN Classifier (from scratch)

From Scratch

K-Nearest Neighbours implemented from zero: Euclidean distance, majority voting, no scikit-learn. Classifies tree species from physical measurements.

NumPy Classification From Scratch

Habit Tracker (OOP + Functional Python)

Backend

A command-line habit tracker with streak tracking, struggle detection, and historical completion checks. SQLite3 storage, modular architecture, and a full pytest suite.

Python OOP SQLite3 pytest