Package Exports
- ml-fcnnls
- ml-fcnnls/lib-esm/index.js
- ml-fcnnls/lib/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (ml-fcnnls) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
fcnnls
Fast Combinatorial Non-negative Least Squares.
As described in the publication by Van Benthem and Keenan (10.1002/cem.889), which is in turn based on the active-set method algorithm previously published by Lawson and Hanson. The basic active-set method is implemented in the nnls repository.
Given the matrices $\mathbf{X}$ and $\mathbf{Y}$, the code finds the matrix $\mathbf{K}$ that minimises the squared Frobenius norm $$\mathrm{argmin}_K ||\mathbf{XK} -\mathbf{Y}||^2_F$$ subject to $\mathbf{K}\geq 0$.
https://en.wikipedia.org/wiki/Non-negative_least_squares
Installation
npm i ml-fcnnls
Usage Example
- Single $y$, using arrays as inputs.
import { fcnnlsVector } from 'ml-fcnnls';
const X = [
[1, 1, 2],
[10, 11, -9],
[-1, 0, 0],
[-5, 6, -7],
];
const y = [-1, 11, 0, 1];
const k = fcnnlsVector(X, y).K.to1DArray();
/* k = [0.4610, 0.5611, 0] */
- Multiple RHS, using
Matrix
instances as inputs.
import { fcnnls } from 'ml-fcnnls';
import { Matrix } from 'ml-matrix'; //npm i ml-matrix
// Example with multiple RHS
const X = new Matrix([
[1, 1, 2],
[10, 11, -9],
[-1, 0, 0],
[-5, 6, -7],
]);
// Y can either be a Matrix or an array of arrays
const Y = new Matrix([
[-1, 0, 0, 9],
[11, -20, 103, 5],
[0, 0, 0, 0],
[1, 2, 3, 4],
]);
const K = fcnnls(X, Y).K;
// `K.to2DArray()` converts the matrix to array.
/*
K = Matrix([
[0.4610, 0, 4.9714, 0],
[0.5611, 0, 4.7362, 2.2404],
[0, 1.2388, 0, 1.9136],
])
*/
- Using the options
const K = fcnnls(X, Y, {
info: true, // returns the error/iteration.
maxIterations: 5,
gradientTolerance: 0,
});
/* same result than 2*/