Skip to main content

MiniML - a minimalistic ML framework

Project description

MiniML

Run tests PyPI

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(self, X):
        return X@self.A.value+self.b.value

lin_model = LinearModel(X.shape[1], y.shape[1])
lin_model.randomize()
lin_model.fit(X, y)
y_hat = lin_model.predict(X)

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 List class;
  • the super().__init__() constructor is called at the end.

Then, implement the predict method, which takes an input array 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(self, X):
        return self.a.value * X + self.b.value

# 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. For example:

class ConstantModel(MiniMLModel):

    def __init__(self):
        self._c = MiniMLParam((1,))
        super().__init__()

    def predict(self, X):
        return self._c.value

class LinearWithConstant(MiniMLModel):
    def __init__(self):
        self._b = MiniMLParam((5,))
        self._M = MiniMLParam((5, 5))
        self._c = ConstantModel()
        super().__init__()

    def predict(self, X):
        return self._M.value @ X + self._b.value[:, None] + self._c.predict(X)

See the full documentation.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

miniml_jax-0.1.1.tar.gz (9.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

miniml_jax-0.1.1-py3-none-any.whl (13.2 kB view details)

Uploaded Python 3

File details

Details for the file miniml_jax-0.1.1.tar.gz.

File metadata

  • Download URL: miniml_jax-0.1.1.tar.gz
  • Upload date:
  • Size: 9.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for miniml_jax-0.1.1.tar.gz
Algorithm Hash digest
SHA256 92b89fec67feb09a6c8ed75314fcb9b6012b0e55060dc50bfb9ec5c0727b2b07
MD5 a791b317c3c59ae87fa5e7e8b435cf66
BLAKE2b-256 de25012316200b7c221b94ef5951fed0f2db1e281957d6192aff1c046f13c75e

See more details on using hashes here.

Provenance

The following attestation bundles were made for miniml_jax-0.1.1.tar.gz:

Publisher: python-publish.yml on stur86/miniml

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file miniml_jax-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: miniml_jax-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 13.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for miniml_jax-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f613e363a306379d6dc84218be7feaf15d397d4a12d0da8a9c399b35d15e2088
MD5 8346f7ad31de53f4965171ceb4aee284
BLAKE2b-256 264bda09bf0675a48d21f6b9d76f6304c9805fa29a358bbb296a34ca9041824e

See more details on using hashes here.

Provenance

The following attestation bundles were made for miniml_jax-0.1.1-py3-none-any.whl:

Publisher: python-publish.yml on stur86/miniml

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page