mikeizbicki/HLearn
mikeizbicki/HLearn has 1,646 GitHub stars and 134 forks. GitHot measured 0 stars in 24 hours and 0 in 7 days. Last checked 2026-11-12 21:58 UTC. Last push 2016-05-29.
Homomorphic machine learning
Measured star growth
- in 24h
- 0
- in 7 days
- 0
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
OriginalHLearn
HLearn is a high performance machine learning library written in Haskell. For example, it currently has the fastest nearest neighbor implementation for arbitrary metric spaces (see this blog post).
HLearn is also a research project. The research goal is to discover the "best possible" interface for machine learning. This involves two competing demands: The library should be as fast as low-level libraries written in C/C++/Fortran/Assembly; but it should be as flexible as libraries written in high level languages like Python/R/Matlab. Julia is making amazing progress in this direction, but HLearn is more ambitious. In particular, HLearn's goal is to be faster than the low level languages and more flexible than the high level languages.
To achieve this goal, HLearn uses a very different interface than standard learning libraries. The H in HLearn stands for three separate concepts that are fundamental to HLearn's design:
- The H stands for Haskell. Machine learning is about estimating functions from data, so it makes sense that a functional programming language would be well suited for machine learning. But Functional programming languages are not widely used in machine learning because they traditionally lack strong support for the fast numerical computations required for learning algorithms. HLearn uses the SubHask library to get this fast numeric support in Haskell. The two libraries are being developed in tandem with each other.
The H stands for Homomorphisms. Homomorphisms are a fundamental concept in abstract algebra, and HLearn exploits the algebraic structures inherrent in learning systems. The following table gives a brief overview of what these structures give us:
Structure What we get Monoid parallel batch training Monoid online training Monoid fast cross-validation Abelian group "untraining" of data points Abelian group more fast cross-validation R-Module weighted data points Vector space fractionally weighted data points Functor fast simple preprocessing of data Monad fast complex preprocessing of data The H stands for the History monad. One of the most difficult tasks of developing a new learning algorithm is debugging the optimization procedure. There has previously been essentially no work on making this debugging process easier, and the
Historymonad tries to solve this problem. It lets you thread debugging information throughout the optimization code without modifying the original code. Furthermore, there is no runtime overhead associated with this technique.
The downside of HLearn's ambition is that it currently does not implement many of the popular machine learning techniques.
More Documentation
Due to the rapid pace of development, HLearn's documentation is sparse. That said, the examples folder is a good place to start. The haddock documentation embedded within the code is decent; but unfortunately, hackage is unable to compile the haddocks because it uses an older version of GHC.
HLearn has several academic papers:
- ICML15 - Faster Cover Trees
- ICML13 - Algebraic Classifiers: a generic approach to fast cross-validation, online training, and parallel training
- TFP13 - HLearn: A Machine Learning Library for Haskell
There are also a number of blog posts on my personal website. Unfortunately, they are mostly out of date with the latest version of HLearn. They might help you understand some of the main concepts in HLearn, but the code they use won't work at all.
- The categorical distribution's monoid/group/module Structure
- The categorical distribution's functor/monad structure
- Markov Networks, monoids, and futurama
- Solving NP-complete problems with HLearn, and how to write your own HomTrainer instances
- Nuclear weapon statistics using monoids, groups, and modules
- Gaussian distributions form a monoid
- HLearn cross-validates >400x faster than Weka
- HLearn's code is shorter and clearer than Weka's
Contributing
I'd love to have you contribute, and I'd be happy to help you get started! Just create an issue to let me know you're interested and we can work something out.
Explore related projects
tensorflow/tensorflow
An Open Source Machine Learning Framework for Everyone
201,584 starshuggingface/transformers
🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.
168,917 starsAUTOMATIC1111/stable-diffusion-webui
Stable Diffusion web UI
165,300 starsComfy-Org/ComfyUI
The most powerful and modular diffusion model GUI, api and backend with a graph/nodes interface. The fastest local inference engine in the world.
146,472 stars