- Notifications
You must be signed in to change notification settings - Fork5
mljs/pls
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Partial Least Squares (PLS), Kernel-based Orthogonal Projections to Latent Structures (K-OPLS) and NIPALS based OPLS
PLS regression algorithm based on the Yi Cao implementation:
K-OPLS regression algorithm based onthis paper.
OPLS implementation based on the R packageMetabomate using NIPALS factorization loop.
$ npm i ml-pls
importPLSfrom'ml-pls';constX=[[0.1,0.02],[0.25,1.01],[0.95,0.01],[1.01,0.96],];constY=[[1,0],[1,0],[1,0],[0,1],];constoptions={latentVectors:10,tolerance:1e-4,};constpls=newPLS(options);pls.train(X,Y);
import{getNumbers,getClassesAsNumber,getCrossValidationSets,}from'ml-dataset-iris';import{OPLS}from'ml-pls';constcvFolds=getCrossValidationSets(7,{idx:0,by:'trainTest'});constdata=getNumbers();constirisLabels=getClassesAsNumber();constmodel=newOPLS(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
import{getNumbers,getClasses,getCrossValidationSets,}from'ml-dataset-iris';import{OPLS}from'ml-pls';constcvFolds=getCrossValidationSets(7,{idx:0,by:'trainTest'});constdata=getNumbers();constirisLabels=getClasses();constmodel=newOPLS(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
import{getNumbers,getClassesAsNumber,getCrossValidationSets,}from'ml-dataset-iris';import{OPLS}from'ml-pls';// get frozen folds for testing purposesconst{ testIndex, trainIndex}=getCrossValidationSets(7,{idx:0,by:'trainTest',})[0];// Getting the data of selected foldconstirisNumbers=getNumbers();consttestData=irisNumbers.filter((el,idx)=>testIndex.includes(idx));consttrainingData=irisNumbers.filter((el,idx)=>trainIndex.includes(idx));// Getting the labels of selected foldconstirisLabels=getClassesAsNumber();consttestLabels=irisLabels.filter((el,idx)=>testIndex.includes(idx));consttrainingLabels=irisLabels.filter((el,idx)=>trainIndex.includes(idx));constmodel=newOPLS(trainingData,trainingLabels);console.log(model.mode);// 'discriminantAnalysis'constprediction=model.predict(testData,{trueLabels:testLabels});// Get the predicted Q2 valueconsole.log(prediction.Q2y);// 0.9247698398971457
importKernelfrom'ml-kernel';import{KOPLS}from'ml-pls';constkernel=newKernel('gaussian',{sigma:25,});constX=[[0.1,0.02],[0.25,1.01],[0.95,0.01],[1.01,0.96],];constY=[[1,0],[1,0],[1,0],[0,1],];constcls=newKOPLS({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);
About
PLS regression algorithm
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Uh oh!
There was an error while loading.Please reload this page.
Contributors8
Uh oh!
There was an error while loading.Please reload this page.