MiniML - a minimalistic ML framework
Project description
MiniML
MiniML (pronounced "minimal") is a tiny machine-learning framework which uses Jax as its core engine, but mixes a PyTorch
inspired approach to building model with Scikit-learn's interface (using the .fit and .predict methods), and is powered by SciPy's optimization algorithms. It's meant for simple prototyping of small ML architectures that allows more flexibility than Scikit's built-in models without sacrificing too much on performance.
Training a linear model in MiniML for example looks as simple as this:
class LinearModel(MiniMLModel):
A: MiniMLParam
b: MiniMLParam
def __init__(self, n_in: int, n_out: int):
self.A = MiniMLParam((n_in,n_out))
self.b = MiniMLParam((n_out,))
super().__init__()
def _predict_kernel(self, X, buffer):
return X@self.A(buffer)+self.b(buffer)
lin_model = LinearModel(X.shape[1], y.shape[1])
lin_model.randomize()
lin_model.fit(X, y)
y_hat = lin_model.predict(X)
Note that calling a parameter with the buffer as an argument returns the value of that parameter.
Installation
Simply install this package from PyPi:
pip install miniml-jax
Usage
The two core types are MiniMLParam and MiniMLModel. There are also MiniMLParamList and MiniMLModelList containers to store multiple of either inside.
To define a model in MiniML, subclass MiniMLModel and define your parameters as MiniMLParam attributes in the __init__ method. Remember to make sure that:
- every parameter or child model is stored either directly as a class member, or inside a corresponding
Listclass; - the
super().__init__()constructor is called at the end.
Then, implement the internal _predict_kernel method, which takes an input array as well as a memory buffer containing the parameters and returns the model's prediction. After instantiating your model, call bind() to initialize parameter buffers, or use directly randomize() to initialize parameter values. You can then use methods like fit, save, and load.
Example: Linear Model
import jax.numpy as jnp
from miniml.param import MiniMLParam
from miniml.model import MiniMLModel
class LinearModel(MiniMLModel):
def __init__(self):
self.a = MiniMLParam((1,))
self.b = MiniMLParam((1,))
super().__init__()
def _predict_kernel(self, X, buffer):
return X@self.A(buffer)+self.b(buffer)
# Create and bind the model
model = LinearModel()
model.bind()
model.randomize()
# Fit to data (e.g., y = 2x + 1)
X = jnp.linspace(0, 10, 20)
y = 2 * X + 1
model.fit(X, y)
# Save and load
model.save('model.npz')
model.load('model.npz')
Nested Models
You can compose models by including other MiniMLModel instances as attributes. In this case, remember to always call child models via their own _predict_kernel methods too. For example:
class ConstantModel(MiniMLModel):
def __init__(self):
self._c = MiniMLParam((1,))
super().__init__()
def _predict_kernel(self, X, buffer):
return self._c(buffer)
class LinearWithConstant(MiniMLModel):
def __init__(self):
self._b = MiniMLParam((5,))
self._M = MiniMLParam((5, 5))
self._c = ConstantModel()
super().__init__()
def _predict_kernel(self, X, buffer):
return self._M(buffer) @ X + self._b(buffer)[:, None] + self._c._predict_kernel(X, buffer)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file miniml_jax-0.2.0.tar.gz.
File metadata
- Download URL: miniml_jax-0.2.0.tar.gz
- Upload date:
- Size: 10.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
11adadbf1d8f03e289aee636f6d6751df7fd6579eff9bb846c22d8aac09e6d95
|
|
| MD5 |
2f9fb1132cc5704e5b9f782adbefb619
|
|
| BLAKE2b-256 |
d75f7ce7e74f190f8849b21324eecccca93420cdec7c549818d96af6201af3c8
|
Provenance
The following attestation bundles were made for miniml_jax-0.2.0.tar.gz:
Publisher:
python-publish.yml on stur86/miniml
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
miniml_jax-0.2.0.tar.gz -
Subject digest:
11adadbf1d8f03e289aee636f6d6751df7fd6579eff9bb846c22d8aac09e6d95 - Sigstore transparency entry: 511552973
- Sigstore integration time:
-
Permalink:
stur86/miniml@133a14d6d7ca75f209564509fdf46383bde8c6d9 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/stur86
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@133a14d6d7ca75f209564509fdf46383bde8c6d9 -
Trigger Event:
release
-
Statement type:
File details
Details for the file miniml_jax-0.2.0-py3-none-any.whl.
File metadata
- Download URL: miniml_jax-0.2.0-py3-none-any.whl
- Upload date:
- Size: 14.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
caa89d9c6a38ffeabe2f1d8fece589897190ff223415435ba065614a598a9e31
|
|
| MD5 |
d28d0f4f2d4b1449bbc999a8f5363732
|
|
| BLAKE2b-256 |
9b1777569e84a965717562d17be77d75fd9a13e76a16fbf386ef911f8d01a076
|
Provenance
The following attestation bundles were made for miniml_jax-0.2.0-py3-none-any.whl:
Publisher:
python-publish.yml on stur86/miniml
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
miniml_jax-0.2.0-py3-none-any.whl -
Subject digest:
caa89d9c6a38ffeabe2f1d8fece589897190ff223415435ba065614a598a9e31 - Sigstore transparency entry: 511552974
- Sigstore integration time:
-
Permalink:
stur86/miniml@133a14d6d7ca75f209564509fdf46383bde8c6d9 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/stur86
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@133a14d6d7ca75f209564509fdf46383bde8c6d9 -
Trigger Event:
release
-
Statement type: