Détail du package

ml-pls

mljs1.2kMIT4.3.2

Partial least squares library

partial, least, squares, projection

readme

Partial Least Squares (PLS), Kernel-based Orthogonal Projections to Latent Structures (K-OPLS) and NIPALS based OPLS

NPM version build status DOI npm download

PLS regression algorithm based on the Yi Cao implementation:

PLS Matlab code

K-OPLS regression algorithm based on this paper.

K-OPLS Matlab code

OPLS implementation based on the R package Metabomate using NIPALS factorization loop.

installation

$ npm i ml-pls

Usage

PLS

import PLS from 'ml-pls';

const X = [
  [0.1, 0.02],
  [0.25, 1.01],
  [0.95, 0.01],
  [1.01, 0.96],
];
const Y = [
  [1, 0],
  [1, 0],
  [1, 0],
  [0, 1],
];
const options = {
  latentVectors: 10,
  tolerance: 1e-4,
};

const pls = new PLS(options);
pls.train(X, Y);

OPLS-R

import {
  getNumbers,
  getClassesAsNumber,
  getCrossValidationSets,
} from 'ml-dataset-iris';
import { OPLS } from 'ml-pls';

const cvFolds = getCrossValidationSets(7, { idx: 0, by: 'trainTest' });
const data = getNumbers();
const irisLabels = getClassesAsNumber();

const model = new OPLS(data, irisLabels, { cvFolds });
console.log(model.mode); // 'regression'

The OPLS class is intended for exploratory modeling, that is not for the creation of predictors. Therefore there is a built-in k-fold cross-validation loop and Q2y is an average over the folds.

console.log(model.model[0].Q2y);

should give 0.9209227614652857

OPLS-DA

import {
  getNumbers,
  getClasses,
  getCrossValidationSets,
} from 'ml-dataset-iris';
import { OPLS } from 'ml-pls';

const cvFolds = getCrossValidationSets(7, { idx: 0, by: 'trainTest' });
const data = getNumbers();
const irisLabels = getClasses();

const model = new OPLS(data, irisLabels, { cvFolds });
console.log(model.mode); // 'discriminantAnalysis'
console.log(model.model[0].auc); // 0.5366666666666665,

If for some reason a predictor is necessary the following code may serve as an example

Prediction

import {
  getNumbers,
  getClassesAsNumber,
  getCrossValidationSets,
} from 'ml-dataset-iris';
import { OPLS } from 'ml-pls';

// get frozen folds for testing purposes
const { testIndex, trainIndex } = getCrossValidationSets(7, {
  idx: 0,
  by: 'trainTest',
})[0];

// Getting the data of selected fold
const irisNumbers = getNumbers();
const testData = irisNumbers.filter((el, idx) => testIndex.includes(idx));
const trainingData = irisNumbers.filter((el, idx) => trainIndex.includes(idx));

// Getting the labels of selected fold
const irisLabels = getClassesAsNumber();
const testLabels = irisLabels.filter((el, idx) => testIndex.includes(idx));
const trainingLabels = irisLabels.filter((el, idx) => trainIndex.includes(idx));

const model = new OPLS(trainingData, trainingLabels);
console.log(model.mode); // 'discriminantAnalysis'
const prediction = model.predict(testData, { trueLabels: testLabels });
// Get the predicted Q2 value
console.log(prediction.Q2y); // 0.9247698398971457

K-OPLS

import Kernel from 'ml-kernel';
import { KOPLS } from 'ml-pls';

const kernel = new Kernel('gaussian', {
  sigma: 25,
});

const X = [
  [0.1, 0.02],
  [0.25, 1.01],
  [0.95, 0.01],
  [1.01, 0.96],
];
const Y = [
  [1, 0],
  [1, 0],
  [1, 0],
  [0, 1],
];

const cls = new KOPLS({
  orthogonalComponents: 10,
  predictiveComponents: 1,
  kernel: kernel,
});

cls.train(X, Y);

const {
  prediction, // prediction
  predScoreMat, // Score matrix over prediction
  predYOrthVectors, // Y-Orthogonal vectors over prediction
} = cls.predict(X);

console.log(prediction);
console.log(predScoreMat);
console.log(predYOrthVectors);

API Documentation

License

MIT

changelog

Changelog

3.0.0 (2020-02-05)

chore

  • replace travis with GitHub actions (475f9db)

Features

  • add OPLS and OPLSNipals (084d49f)

BREAKING CHANGES

  • Node.js 8 is no longer supported

2.0.0 (2019-06-29)

chore

  • remove support for Node.js 6 (78af432)

BREAKING CHANGES

  • Support for Node.js 6 was removed

1.0.0 (2017-08-30)

Features

Performance Improvements

  • apply matrix optimizations (50cc39f)

4.3.2 (2023-09-08)

Bug Fixes

  • ensure that predict and predictCategory methods work after loading exported model + test case close #32 (239f18b)
  • export the mode in the model (453222e)

4.3.1 (2022-11-11)

Bug Fixes

4.3.0 (2022-11-11)

Features

4.2.0 (2022-10-17)

Features

  • added discriminant analysis to OPLS (d2891ad)

Bug Fixes

  • bugs in oplsNipals and OPLS + testcases (#33) (2c83fe3)

4.1.1 (2021-10-20)

Bug Fixes

  • bug in OPLS predict method + testcase (#25) (226d4c4)

4.1.0 (2021-09-20)

Features

4.0.0 (2021-09-20)

⚠ BREAKING CHANGES

  • Rename OPLSNipals to oplsNipals

Features

  • add discriminant analysis + test case (#19) (386c255)
  • Rename OPLSNipals to oplsNipals (43861f1)

Bug Fixes

  • allow OPLS to accept an array of array (ddb0afb)

0.2.1 (2017-07-25)

0.2.0 (2017-07-21)

Chores

BREAKING CHANGES

  • Removed support for Node 4

0.1.1 (2016-08-16)

0.1.0 (2016-05-26)

0.0.9 (2016-05-26)

0.0.8 (2015-11-19)

Bug Fixes

  • pls: Load method fixed. (51d6369)

0.0.6 (2015-07-31)

Bug Fixes

  • pls: predict variable without F matrix and save model works correctly. (5cf1cc4)

0.0.4 (2015-07-30)

Bug Fixes

  • pls: clone matrices. (bf93c1a)
  • pls: explained variance on training. (7efb292)