Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Personal lab to play around with algorithms and data.

NOTE: In order to make the implementations as understandable as possible I sometimes write more expressive code which could result in poor performance or disapproval of purists. I strongly believe that readability for such educational endeavors is more important than high-performance or idiomatic code.


X from scratch

From scratch implementations of various algorithms and models in pure Python.

Notebook nbviewer Google Colab Blog post
Gradient Descent Link Link Link
k-NN Link Link Link
Naive Bayes Link Link Link
Linear Regression Link Link Link
Multiple Regression Link Link Link
Logistic Regression Link Link Link
Decision Trees Link Link Link
Neural Networks Link Link Coming soon
k-means Clustering Link Link Coming soon

Running it

NOTE: You can pass an optional port number as the first CLI argument (i.e. ./jupyter-lab 3000).

Jupyter Lab


Jupyter Notebook