Skip to content

Machine Learning Module for Single Layer Perceptron ML models, written in Rust for Typescript.

License

Notifications You must be signed in to change notification settings

retraigo/la-classy

Repository files navigation

La Lala

La Classy

Single Layer Perceptron (SLP) library for Deno.

This library is written TypeScript and Rust and it uses FFI.

Why Classy?

  • It's fast.
  • It gives you some freedom to experiment with different combinations of loss functions, activation functions, etc.
  • It's easy to use.

Features

  • Optimization Algorithms:
    • Gradient Descent
    • Stochastic Average Gradients
    • Ordinary Least Squares
  • Optimizers for updating weights:
    • RMSProp
    • ADAM
  • Schedulers for learning rate:
    • One-cycle Scheduler
    • Decay
  • Regularization
  • Activation Functions:
    • Linear (regression, SVM, etc.)
    • Sigmoid (logistic regression)
    • Softmax (multinomial logistic regression)
    • Tanh (it's just there)
  • Loss Functions:
    • Mean Squared Error (regression)
    • Mean Absolute Error (regression)
    • Cross-Entropy (multinomial classification)
    • Binary Cross-Entropy / Logistic Loss (binary classification)
    • Hinge Loss (binary classification, SVM)

Quick Example

Regression

import { Matrix } from "jsr:@lala/[email protected]";
import {
  GradientDescentSolver,
  adamOptimizer,
  huber,
} from "jsr:@lala/[email protected]";

const x = [100, 23, 53, 56, 12, 98, 75];
const y = x.map((a) => [a * 6 + 13, a * 4 + 2]);

const solver = new GradientDescentSolver({
  // Huber loss is a mix of MSE and MAE
  loss: huber(),
  // ADAM optimizer with 1 + 1 input for intercept, 2 outputs.
  optimizer: adamOptimizer(2, 2),
});

// Train for 700 epochs in 2 minibatches
solver.train(
  new Matrix(
    x.map((n) => [n]),
    "f32"
  ),
  new Matrix(y, "f32"),
  { silent: false, fit_intercept: true, epochs: 700, n_batches: 2 }
);

const res = solver.predict(
  new Matrix(
    x.map((n) => [n]),
    "f32"
  )
);

for (let i = 0; i < res.nRows; i += 1) {
  console.log(Array.from(res.row(i)), y[i]);
}

There are other examples in retraigo/deno-ml.

Documentation

JSR

Maintainers

Pranev (retraigo)

Discord: Kuro's Chaos Abyss Graveyard