Repository files navigation

node-svm

Support Vector Machine (SVM) library for nodejs & io.js .

NPMBuild StatusCoverage Status

Support Vector Machines

Wikipedia :

Support vector machines are supervised learning models that analyze data and recognize patterns. A special property is that they simultaneously minimize the empirical classification error and maximize the geometric margin; hence they are also known as maximum margin classifiers. Wikipedia image

Installation

npm install --save node-svm

Quick start

If you are not familiar with SVM I highly recommend this guide.

Here's an example of using node-svm to approximate the XOR function :

varsvm=require('node-svm');varxor=[[[0,0],0],[[0,1],1],[[1,0],1],[[1,1],0]];// initialize a new predictorvarclf=newsvm.CSVC();clf.train(xor).done(function(){// predict thingsxor.forEach(function(ex){varprediction=clf.predictSync(ex[0]);console.log('%d XOR %d => %d',ex[0][0],ex[0][1],prediction);});});/******** CONSOLE ******** 0 XOR 0 => 0 0 XOR 1 => 1 1 XOR 0 => 1 1 XOR 1 => 0 */

More examples are available here.

Note: There's no reason to use SVM to figure out XOR BTW...

API

Classifiers

Possible classifiers are:

ClassifierTypeParamsInitialization
C_SVCmulti-class classifierc= new svm.CSVC(opts)
NU_SVCmulti-class classifiernu= new svm.NuSVC(opts)
ONE_CLASSone-class classifiernu= new svm.OneClassSVM(opts)
EPSILON_SVRregressionc, epsilon= new svm.EpsilonSVR(opts)
NU_SVRregressionc, nu= new svm.NuSVR(opts)

Kernels

Possible kernels are:

KernelParameters
LINEARNo parameter
POLYdegree, gamma, r
RBFgamma
SIGMOIDgamma, r

Parameters and options

Possible parameters/options are:

NameDefault value(s)Description
svmTypeC_SVCUsed classifier
kernelTypeRBFUsed kernel
c[0.01,0.125,0.5,1,2]Cost for C_SVC, EPSILON_SVR and NU_SVR. Can be a Number or an Array of numbers
nu[0.01,0.125,0.5,1]For NU_SVC, ONE_CLASS and NU_SVR. Can be a Number or an Array of numbers
epsilon[0.01,0.125,0.5,1]For EPSILON_SVR. Can be a Number or an Array of numbers
degree[2,3,4]For POLY kernel. Can be a Number or an Array of numbers
gamma[0.001,0.01,0.5]For POLY, RBF and SIGMOID kernels. Can be a Number or an Array of numbers
r[0.125,0.5,0,1]For POLY and SIGMOID kernels. Can be a Number or an Array of numbers
kFold4k parameter for k-fold cross validation. k must be >= 1. If k===1 then entire dataset is use for both testing and training.
normalizetrueWhether to use mean normalization during data pre-processing
reducetrueWhether to use PCA to reduce dataset's dimensions during data pre-processing
retainedVariance0.99Define the acceptable impact on data integrity (require reduce to be true)
eps1e-3Tolerance of termination criterion
cacheSize200Cache size in MB.
shrinkingtrueWhether to use the shrinking heuristics
probabilityfalseWhether to train a SVC or SVR model for probability estimates

The example below shows how to use them:

varsvm=require('node-svm');varclf=newsvm.SVM({svmType: 'C_SVC',c: [0.03125,0.125,0.5,2,8],// kernels parameterskernelType: 'RBF',gamma: [0.03125,0.125,0.5,2,8],// training optionskFold: 4,normalize: true,reduce: true,retainedVariance: 0.99,eps: 1e-3,cacheSize: 200,shrinking : true,probability : false});

Notes :

  • You can override default values by creating a .nodesvmrc file (JSON) at the root of your project.
  • If at least one parameter has multiple values, node-svm will go through all possible combinations to see which one gives the best results (it performs grid-search to maximize f-score for classification and minimize Mean Squared Error for regression).

##Training

SVMs can be trained using svm#train(dataset) method.

Pseudo code :

varclf=newsvm.SVM(options);clf.train(dataset).progress(function(rate){// ...}).spread(function(trainedModel,trainingReport){// ...});

Notes :

  • trainedModel can be used to restore the predictor later (see this example for more information).
  • trainingReport contains information about predictor's accuracy (such as MSE, precison, recall, fscore, retained variance etc.)

Prediction

Once trained, you can use the classifier object to predict values for new inputs. You can do so :

  • Synchronously using clf#predictSync(inputs)
  • Asynchronously using clf#predict(inputs).then(function(predicted){ ... });

If you enabled probabilities during initialization you can also predict probabilities for each class :

  • Synchronously using clf#predictProbabilitiesSync(inputs).
  • Asynchronously using clf#predictProbabilities(inputs).then(function(probabilities){ ... }).

Note : inputs must be a 1d array of numbers

Model evaluation

Once the predictor is trained it can be evaluated against a test set.

Pseudo code :

varsvm=require('node-svm');varclf=newsvm.SVM(options);svm.read(trainFile).then(function(dataset){returnclf.train(dataset);}).then(function(trainedModel,trainingReport){returnsvm.read(testFile);}).then(function(testset){returnclf.evaluate(testset);});.done(function(report){console.log(report);});

CLI

node-svm comes with a build-in Command Line Interpreter.

To use it you have to install node-svm globally using npm install -g node-svm.

See $ node-svm -h for complete command line reference.

help

$ node-svm help [<command>]

Display help information about node-svm

train

$ node-svm train <dataset file> [<where to save the prediction model>] [<options>]

Train a new model with given data set

Note: use $ node-svm train <dataset file> -i to set parameters values dynamically.

evaluate

$ node-svm evaluate <model file><testset file> [<options>]

Evaluate model's accuracy against a test set

How it work

node-svm uses the official libsvm C++ library, version 3.20.

For more information see also :

Contributions

Feel free to fork and improve/enhance node-svm in any way your want.

If you feel that the community will benefit from your changes, please send a pull request :

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add documentation if necessary.
  • Add tests for it. This is important so I don't break it in a future version unintentionally (run grunt or npm test).
  • Send a pull request to the develop branch.

#FAQ ###Segmentation fault Q : Node returns 'segmentation fault' error during training. What's going on?

A1 : Your dataset is empty or its format is incorrect.

A2 : Your dataset is too big.

###Difference between nu-SVC and C-SVC Q : What is the difference between nu-SVC and C-SVC?

A : Answer here

###Other questions

License

MIT

githalytics.com alpha

About

Support Vector Machines for nodejs & io.js

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

node-svm

Support Vector Machine (SVM) library for nodejs & io.js .

NPMBuild StatusCoverage Status

Support Vector Machines

Wikipedia :

Support vector machines are supervised learning models that analyze data and recognize patterns. A special property is that they simultaneously minimize the empirical classification error and maximize the geometric margin; hence they are also known as maximum margin classifiers. Wikipedia image

Installation

npm install --save node-svm

Quick start

If you are not familiar with SVM I highly recommend this guide.

Here's an example of using node-svm to approximate the XOR function :

varsvm=require('node-svm');varxor=[[[0,0],0],[[0,1],1],[[1,0],1],[[1,1],0]];// initialize a new predictorvarclf=newsvm.CSVC();clf.train(xor).done(function(){// predict thingsxor.forEach(function(ex){varprediction=clf.predictSync(ex[0]);console.log('%d XOR %d => %d',ex[0][0],ex[0][1],prediction);});});/******** CONSOLE ******** 0 XOR 0 => 0 0 XOR 1 => 1 1 XOR 0 => 1 1 XOR 1 => 0 */

More examples are available here.

Note: There's no reason to use SVM to figure out XOR BTW...

API

Classifiers

Possible classifiers are:

ClassifierTypeParamsInitialization
C_SVCmulti-class classifierc= new svm.CSVC(opts)
NU_SVCmulti-class classifiernu= new svm.NuSVC(opts)
ONE_CLASSone-class classifiernu= new svm.OneClassSVM(opts)
EPSILON_SVRregressionc, epsilon= new svm.EpsilonSVR(opts)
NU_SVRregressionc, nu= new svm.NuSVR(opts)

Kernels

Possible kernels are:

KernelParameters
LINEARNo parameter
POLYdegree, gamma, r
RBFgamma
SIGMOIDgamma, r

Parameters and options

Possible parameters/options are:

NameDefault value(s)Description
svmTypeC_SVCUsed classifier
kernelTypeRBFUsed kernel
c[0.01,0.125,0.5,1,2]Cost for C_SVC, EPSILON_SVR and NU_SVR. Can be a Number or an Array of numbers
nu[0.01,0.125,0.5,1]For NU_SVC, ONE_CLASS and NU_SVR. Can be a Number or an Array of numbers
epsilon[0.01,0.125,0.5,1]For EPSILON_SVR. Can be a Number or an Array of numbers
degree[2,3,4]For POLY kernel. Can be a Number or an Array of numbers
gamma[0.001,0.01,0.5]For POLY, RBF and SIGMOID kernels. Can be a Number or an Array of numbers
r[0.125,0.5,0,1]For POLY and SIGMOID kernels. Can be a Number or an Array of numbers
kFold4k parameter for k-fold cross validation. k must be >= 1. If k===1 then entire dataset is use for both testing and training.
normalizetrueWhether to use mean normalization during data pre-processing
reducetrueWhether to use PCA to reduce dataset's dimensions during data pre-processing
retainedVariance0.99Define the acceptable impact on data integrity (require reduce to be true)
eps1e-3Tolerance of termination criterion
cacheSize200Cache size in MB.
shrinkingtrueWhether to use the shrinking heuristics
probabilityfalseWhether to train a SVC or SVR model for probability estimates

The example below shows how to use them:

varsvm=require('node-svm');varclf=newsvm.SVM({svmType: 'C_SVC',c: [0.03125,0.125,0.5,2,8],// kernels parameterskernelType: 'RBF',gamma: [0.03125,0.125,0.5,2,8],// training optionskFold: 4,normalize: true,reduce: true,retainedVariance: 0.99,eps: 1e-3,cacheSize: 200,shrinking : true,probability : false});

Notes :

  • You can override default values by creating a .nodesvmrc file (JSON) at the root of your project.
  • If at least one parameter has multiple values, node-svm will go through all possible combinations to see which one gives the best results (it performs grid-search to maximize f-score for classification and minimize Mean Squared Error for regression).

##Training

SVMs can be trained using svm#train(dataset) method.

Pseudo code :

varclf=newsvm.SVM(options);clf.train(dataset).progress(function(rate){// ...}).spread(function(trainedModel,trainingReport){// ...});

Notes :

  • trainedModel can be used to restore the predictor later (see this example for more information).
  • trainingReport contains information about predictor's accuracy (such as MSE, precison, recall, fscore, retained variance etc.)

Prediction

Once trained, you can use the classifier object to predict values for new inputs. You can do so :

  • Synchronously using clf#predictSync(inputs)
  • Asynchronously using clf#predict(inputs).then(function(predicted){ ... });

If you enabled probabilities during initialization you can also predict probabilities for each class :

  • Synchronously using clf#predictProbabilitiesSync(inputs).
  • Asynchronously using clf#predictProbabilities(inputs).then(function(probabilities){ ... }).

Note : inputs must be a 1d array of numbers

Model evaluation

Once the predictor is trained it can be evaluated against a test set.

Pseudo code :

varsvm=require('node-svm');varclf=newsvm.SVM(options);svm.read(trainFile).then(function(dataset){returnclf.train(dataset);}).then(function(trainedModel,trainingReport){returnsvm.read(testFile);}).then(function(testset){returnclf.evaluate(testset);});.done(function(report){console.log(report);});

CLI

node-svm comes with a build-in Command Line Interpreter.

To use it you have to install node-svm globally using npm install -g node-svm.

See $ node-svm -h for complete command line reference.

help

$ node-svm help [<command>]

Display help information about node-svm

train

$ node-svm train <dataset file> [<where to save the prediction model>] [<options>]

Train a new model with given data set

Note: use $ node-svm train <dataset file> -i to set parameters values dynamically.

evaluate

$ node-svm evaluate <model file><testset file> [<options>]

Evaluate model's accuracy against a test set

How it work

node-svm uses the official libsvm C++ library, version 3.20.

For more information see also :

Contributions

Feel free to fork and improve/enhance node-svm in any way your want.

If you feel that the community will benefit from your changes, please send a pull request :

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add documentation if necessary.
  • Add tests for it. This is important so I don't break it in a future version unintentionally (run grunt or npm test).
  • Send a pull request to the develop branch.

#FAQ ###Segmentation fault Q : Node returns 'segmentation fault' error during training. What's going on?

A1 : Your dataset is empty or its format is incorrect.

A2 : Your dataset is too big.

###Difference between nu-SVC and C-SVC Q : What is the difference between nu-SVC and C-SVC?

A : Answer here

###Other questions

License

MIT

githalytics.com alpha

About

Support Vector Machines for nodejs & io.js

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

node-svm

Support Vector Machine (SVM) library for nodejs & io.js .

NPMBuild StatusCoverage Status

Support Vector Machines

Wikipedia :

Support vector machines are supervised learning models that analyze data and recognize patterns. A special property is that they simultaneously minimize the empirical classification error and maximize the geometric margin; hence they are also known as maximum margin classifiers. Wikipedia image

Installation

npm install --save node-svm

Quick start

If you are not familiar with SVM I highly recommend this guide.

Here's an example of using node-svm to approximate the XOR function :

varsvm=require('node-svm');varxor=[[[0,0],0],[[0,1],1],[[1,0],1],[[1,1],0]];// initialize a new predictorvarclf=newsvm.CSVC();clf.train(xor).done(function(){// predict thingsxor.forEach(function(ex){varprediction=clf.predictSync(ex[0]);console.log('%d XOR %d => %d',ex[0][0],ex[0][1],prediction);});});/******** CONSOLE ******** 0 XOR 0 => 0 0 XOR 1 => 1 1 XOR 0 => 1 1 XOR 1 => 0 */

More examples are available here.

Note: There's no reason to use SVM to figure out XOR BTW...

API

Classifiers

Possible classifiers are:

ClassifierTypeParamsInitialization
C_SVCmulti-class classifierc= new svm.CSVC(opts)
NU_SVCmulti-class classifiernu= new svm.NuSVC(opts)
ONE_CLASSone-class classifiernu= new svm.OneClassSVM(opts)
EPSILON_SVRregressionc, epsilon= new svm.EpsilonSVR(opts)
NU_SVRregressionc, nu= new svm.NuSVR(opts)

Kernels

Possible kernels are:

KernelParameters
LINEARNo parameter
POLYdegree, gamma, r
RBFgamma
SIGMOIDgamma, r

Parameters and options

Possible parameters/options are:

NameDefault value(s)Description
svmTypeC_SVCUsed classifier
kernelTypeRBFUsed kernel
c[0.01,0.125,0.5,1,2]Cost for C_SVC, EPSILON_SVR and NU_SVR. Can be a Number or an Array of numbers
nu[0.01,0.125,0.5,1]For NU_SVC, ONE_CLASS and NU_SVR. Can be a Number or an Array of numbers
epsilon[0.01,0.125,0.5,1]For EPSILON_SVR. Can be a Number or an Array of numbers
degree[2,3,4]For POLY kernel. Can be a Number or an Array of numbers
gamma[0.001,0.01,0.5]For POLY, RBF and SIGMOID kernels. Can be a Number or an Array of numbers
r[0.125,0.5,0,1]For POLY and SIGMOID kernels. Can be a Number or an Array of numbers
kFold4k parameter for k-fold cross validation. k must be >= 1. If k===1 then entire dataset is use for both testing and training.
normalizetrueWhether to use mean normalization during data pre-processing
reducetrueWhether to use PCA to reduce dataset's dimensions during data pre-processing
retainedVariance0.99Define the acceptable impact on data integrity (require reduce to be true)
eps1e-3Tolerance of termination criterion
cacheSize200Cache size in MB.
shrinkingtrueWhether to use the shrinking heuristics
probabilityfalseWhether to train a SVC or SVR model for probability estimates

The example below shows how to use them:

varsvm=require('node-svm');varclf=newsvm.SVM({svmType: 'C_SVC',c: [0.03125,0.125,0.5,2,8],// kernels parameterskernelType: 'RBF',gamma: [0.03125,0.125,0.5,2,8],// training optionskFold: 4,normalize: true,reduce: true,retainedVariance: 0.99,eps: 1e-3,cacheSize: 200,shrinking : true,probability : false});

Notes :

  • You can override default values by creating a .nodesvmrc file (JSON) at the root of your project.
  • If at least one parameter has multiple values, node-svm will go through all possible combinations to see which one gives the best results (it performs grid-search to maximize f-score for classification and minimize Mean Squared Error for regression).

##Training

SVMs can be trained using svm#train(dataset) method.

Pseudo code :

varclf=newsvm.SVM(options);clf.train(dataset).progress(function(rate){// ...}).spread(function(trainedModel,trainingReport){// ...});

Notes :

  • trainedModel can be used to restore the predictor later (see this example for more information).
  • trainingReport contains information about predictor's accuracy (such as MSE, precison, recall, fscore, retained variance etc.)

Prediction

Once trained, you can use the classifier object to predict values for new inputs. You can do so :

  • Synchronously using clf#predictSync(inputs)
  • Asynchronously using clf#predict(inputs).then(function(predicted){ ... });

If you enabled probabilities during initialization you can also predict probabilities for each class :

  • Synchronously using clf#predictProbabilitiesSync(inputs).
  • Asynchronously using clf#predictProbabilities(inputs).then(function(probabilities){ ... }).

Note : inputs must be a 1d array of numbers

Model evaluation

Once the predictor is trained it can be evaluated against a test set.

Pseudo code :

varsvm=require('node-svm');varclf=newsvm.SVM(options);svm.read(trainFile).then(function(dataset){returnclf.train(dataset);}).then(function(trainedModel,trainingReport){returnsvm.read(testFile);}).then(function(testset){returnclf.evaluate(testset);});.done(function(report){console.log(report);});

CLI

node-svm comes with a build-in Command Line Interpreter.

To use it you have to install node-svm globally using npm install -g node-svm.

See $ node-svm -h for complete command line reference.

help

$ node-svm help [<command>]

Display help information about node-svm

train

$ node-svm train <dataset file> [<where to save the prediction model>] [<options>]

Train a new model with given data set

Note: use $ node-svm train <dataset file> -i to set parameters values dynamically.

evaluate

$ node-svm evaluate <model file><testset file> [<options>]

Evaluate model's accuracy against a test set

How it work

node-svm uses the official libsvm C++ library, version 3.20.

For more information see also :

Contributions

Feel free to fork and improve/enhance node-svm in any way your want.

If you feel that the community will benefit from your changes, please send a pull request :

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add documentation if necessary.
  • Add tests for it. This is important so I don't break it in a future version unintentionally (run grunt or npm test).
  • Send a pull request to the develop branch.

#FAQ ###Segmentation fault Q : Node returns 'segmentation fault' error during training. What's going on?

A1 : Your dataset is empty or its format is incorrect.

A2 : Your dataset is too big.

###Difference between nu-SVC and C-SVC Q : What is the difference between nu-SVC and C-SVC?

A : Answer here

###Other questions

License

MIT

githalytics.com alpha

About

Support Vector Machines for nodejs & io.js

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

node-svm

Support Vector Machine (SVM) library for nodejs & io.js .

NPMBuild StatusCoverage Status

Support Vector Machines

Wikipedia :

Support vector machines are supervised learning models that analyze data and recognize patterns. A special property is that they simultaneously minimize the empirical classification error and maximize the geometric margin; hence they are also known as maximum margin classifiers. Wikipedia image

Installation

npm install --save node-svm

Quick start

If you are not familiar with SVM I highly recommend this guide.

Here's an example of using node-svm to approximate the XOR function :

varsvm=require('node-svm');varxor=[[[0,0],0],[[0,1],1],[[1,0],1],[[1,1],0]];// initialize a new predictorvarclf=newsvm.CSVC();clf.train(xor).done(function(){// predict thingsxor.forEach(function(ex){varprediction=clf.predictSync(ex[0]);console.log('%d XOR %d => %d',ex[0][0],ex[0][1],prediction);});});/******** CONSOLE ******** 0 XOR 0 => 0 0 XOR 1 => 1 1 XOR 0 => 1 1 XOR 1 => 0 */

More examples are available here.

Note: There's no reason to use SVM to figure out XOR BTW...

API

Classifiers

Possible classifiers are:

ClassifierTypeParamsInitialization
C_SVCmulti-class classifierc= new svm.CSVC(opts)
NU_SVCmulti-class classifiernu= new svm.NuSVC(opts)
ONE_CLASSone-class classifiernu= new svm.OneClassSVM(opts)
EPSILON_SVRregressionc, epsilon= new svm.EpsilonSVR(opts)
NU_SVRregressionc, nu= new svm.NuSVR(opts)

Kernels

Possible kernels are:

KernelParameters
LINEARNo parameter
POLYdegree, gamma, r
RBFgamma
SIGMOIDgamma, r

Parameters and options

Possible parameters/options are:

NameDefault value(s)Description
svmTypeC_SVCUsed classifier
kernelTypeRBFUsed kernel
c[0.01,0.125,0.5,1,2]Cost for C_SVC, EPSILON_SVR and NU_SVR. Can be a Number or an Array of numbers
nu[0.01,0.125,0.5,1]For NU_SVC, ONE_CLASS and NU_SVR. Can be a Number or an Array of numbers
epsilon[0.01,0.125,0.5,1]For EPSILON_SVR. Can be a Number or an Array of numbers
degree[2,3,4]For POLY kernel. Can be a Number or an Array of numbers
gamma[0.001,0.01,0.5]For POLY, RBF and SIGMOID kernels. Can be a Number or an Array of numbers
r[0.125,0.5,0,1]For POLY and SIGMOID kernels. Can be a Number or an Array of numbers
kFold4k parameter for k-fold cross validation. k must be >= 1. If k===1 then entire dataset is use for both testing and training.
normalizetrueWhether to use mean normalization during data pre-processing
reducetrueWhether to use PCA to reduce dataset's dimensions during data pre-processing
retainedVariance0.99Define the acceptable impact on data integrity (require reduce to be true)
eps1e-3Tolerance of termination criterion
cacheSize200Cache size in MB.
shrinkingtrueWhether to use the shrinking heuristics
probabilityfalseWhether to train a SVC or SVR model for probability estimates

The example below shows how to use them:

varsvm=require('node-svm');varclf=newsvm.SVM({svmType: 'C_SVC',c: [0.03125,0.125,0.5,2,8],// kernels parameterskernelType: 'RBF',gamma: [0.03125,0.125,0.5,2,8],// training optionskFold: 4,normalize: true,reduce: true,retainedVariance: 0.99,eps: 1e-3,cacheSize: 200,shrinking : true,probability : false});

Notes :

  • You can override default values by creating a .nodesvmrc file (JSON) at the root of your project.
  • If at least one parameter has multiple values, node-svm will go through all possible combinations to see which one gives the best results (it performs grid-search to maximize f-score for classification and minimize Mean Squared Error for regression).

##Training

SVMs can be trained using svm#train(dataset) method.

Pseudo code :

varclf=newsvm.SVM(options);clf.train(dataset).progress(function(rate){// ...}).spread(function(trainedModel,trainingReport){// ...});

Notes :

  • trainedModel can be used to restore the predictor later (see this example for more information).
  • trainingReport contains information about predictor's accuracy (such as MSE, precison, recall, fscore, retained variance etc.)

Prediction

Once trained, you can use the classifier object to predict values for new inputs. You can do so :

  • Synchronously using clf#predictSync(inputs)
  • Asynchronously using clf#predict(inputs).then(function(predicted){ ... });

If you enabled probabilities during initialization you can also predict probabilities for each class :

  • Synchronously using clf#predictProbabilitiesSync(inputs).
  • Asynchronously using clf#predictProbabilities(inputs).then(function(probabilities){ ... }).

Note : inputs must be a 1d array of numbers

Model evaluation

Once the predictor is trained it can be evaluated against a test set.

Pseudo code :

varsvm=require('node-svm');varclf=newsvm.SVM(options);svm.read(trainFile).then(function(dataset){returnclf.train(dataset);}).then(function(trainedModel,trainingReport){returnsvm.read(testFile);}).then(function(testset){returnclf.evaluate(testset);});.done(function(report){console.log(report);});

CLI

node-svm comes with a build-in Command Line Interpreter.

To use it you have to install node-svm globally using npm install -g node-svm.

See $ node-svm -h for complete command line reference.

help

$ node-svm help [<command>]

Display help information about node-svm

train

$ node-svm train <dataset file> [<where to save the prediction model>] [<options>]

Train a new model with given data set

Note: use $ node-svm train <dataset file> -i to set parameters values dynamically.

evaluate

$ node-svm evaluate <model file><testset file> [<options>]

Evaluate model's accuracy against a test set

How it work

node-svm uses the official libsvm C++ library, version 3.20.

For more information see also :

Contributions

Feel free to fork and improve/enhance node-svm in any way your want.

If you feel that the community will benefit from your changes, please send a pull request :

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add documentation if necessary.
  • Add tests for it. This is important so I don't break it in a future version unintentionally (run grunt or npm test).
  • Send a pull request to the develop branch.

#FAQ ###Segmentation fault Q : Node returns 'segmentation fault' error during training. What's going on?

A1 : Your dataset is empty or its format is incorrect.

A2 : Your dataset is too big.

###Difference between nu-SVC and C-SVC Q : What is the difference between nu-SVC and C-SVC?

A : Answer here

###Other questions

License

MIT

githalytics.com alpha

About

Support Vector Machines for nodejs & io.js

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

node-svm

Support Vector Machine (SVM) library for nodejs & io.js .

NPMBuild StatusCoverage Status

Support Vector Machines

Wikipedia :

Support vector machines are supervised learning models that analyze data and recognize patterns. A special property is that they simultaneously minimize the empirical classification error and maximize the geometric margin; hence they are also known as maximum margin classifiers. Wikipedia image

Installation

npm install --save node-svm

Quick start

If you are not familiar with SVM I highly recommend this guide.

Here's an example of using node-svm to approximate the XOR function :

varsvm=require('node-svm');varxor=[[[0,0],0],[[0,1],1],[[1,0],1],[[1,1],0]];// initialize a new predictorvarclf=newsvm.CSVC();clf.train(xor).done(function(){// predict thingsxor.forEach(function(ex){varprediction=clf.predictSync(ex[0]);console.log('%d XOR %d => %d',ex[0][0],ex[0][1],prediction);});});/******** CONSOLE ******** 0 XOR 0 => 0 0 XOR 1 => 1 1 XOR 0 => 1 1 XOR 1 => 0 */

More examples are available here.

Note: There's no reason to use SVM to figure out XOR BTW...

API

Classifiers

Possible classifiers are:

ClassifierTypeParamsInitialization
C_SVCmulti-class classifierc= new svm.CSVC(opts)
NU_SVCmulti-class classifiernu= new svm.NuSVC(opts)
ONE_CLASSone-class classifiernu= new svm.OneClassSVM(opts)
EPSILON_SVRregressionc, epsilon= new svm.EpsilonSVR(opts)
NU_SVRregressionc, nu= new svm.NuSVR(opts)

Kernels

Possible kernels are:

KernelParameters
LINEARNo parameter
POLYdegree, gamma, r
RBFgamma
SIGMOIDgamma, r

Parameters and options

Possible parameters/options are:

NameDefault value(s)Description
svmTypeC_SVCUsed classifier
kernelTypeRBFUsed kernel
c[0.01,0.125,0.5,1,2]Cost for C_SVC, EPSILON_SVR and NU_SVR. Can be a Number or an Array of numbers
nu[0.01,0.125,0.5,1]For NU_SVC, ONE_CLASS and NU_SVR. Can be a Number or an Array of numbers
epsilon[0.01,0.125,0.5,1]For EPSILON_SVR. Can be a Number or an Array of numbers
degree[2,3,4]For POLY kernel. Can be a Number or an Array of numbers
gamma[0.001,0.01,0.5]For POLY, RBF and SIGMOID kernels. Can be a Number or an Array of numbers
r[0.125,0.5,0,1]For POLY and SIGMOID kernels. Can be a Number or an Array of numbers
kFold4k parameter for k-fold cross validation. k must be >= 1. If k===1 then entire dataset is use for both testing and training.
normalizetrueWhether to use mean normalization during data pre-processing
reducetrueWhether to use PCA to reduce dataset's dimensions during data pre-processing
retainedVariance0.99Define the acceptable impact on data integrity (require reduce to be true)
eps1e-3Tolerance of termination criterion
cacheSize200Cache size in MB.
shrinkingtrueWhether to use the shrinking heuristics
probabilityfalseWhether to train a SVC or SVR model for probability estimates

The example below shows how to use them:

varsvm=require('node-svm');varclf=newsvm.SVM({svmType: 'C_SVC',c: [0.03125,0.125,0.5,2,8],// kernels parameterskernelType: 'RBF',gamma: [0.03125,0.125,0.5,2,8],// training optionskFold: 4,normalize: true,reduce: true,retainedVariance: 0.99,eps: 1e-3,cacheSize: 200,shrinking : true,probability : false});

Notes :

  • You can override default values by creating a .nodesvmrc file (JSON) at the root of your project.
  • If at least one parameter has multiple values, node-svm will go through all possible combinations to see which one gives the best results (it performs grid-search to maximize f-score for classification and minimize Mean Squared Error for regression).

##Training

SVMs can be trained using svm#train(dataset) method.

Pseudo code :

varclf=newsvm.SVM(options);clf.train(dataset).progress(function(rate){// ...}).spread(function(trainedModel,trainingReport){// ...});

Notes :

  • trainedModel can be used to restore the predictor later (see this example for more information).
  • trainingReport contains information about predictor's accuracy (such as MSE, precison, recall, fscore, retained variance etc.)

Prediction

Once trained, you can use the classifier object to predict values for new inputs. You can do so :

  • Synchronously using clf#predictSync(inputs)
  • Asynchronously using clf#predict(inputs).then(function(predicted){ ... });

If you enabled probabilities during initialization you can also predict probabilities for each class :

  • Synchronously using clf#predictProbabilitiesSync(inputs).
  • Asynchronously using clf#predictProbabilities(inputs).then(function(probabilities){ ... }).

Note : inputs must be a 1d array of numbers

Model evaluation

Once the predictor is trained it can be evaluated against a test set.

Pseudo code :

varsvm=require('node-svm');varclf=newsvm.SVM(options);svm.read(trainFile).then(function(dataset){returnclf.train(dataset);}).then(function(trainedModel,trainingReport){returnsvm.read(testFile);}).then(function(testset){returnclf.evaluate(testset);});.done(function(report){console.log(report);});

CLI

node-svm comes with a build-in Command Line Interpreter.

To use it you have to install node-svm globally using npm install -g node-svm.

See $ node-svm -h for complete command line reference.

help

$ node-svm help [<command>]

Display help information about node-svm

train

$ node-svm train <dataset file> [<where to save the prediction model>] [<options>]

Train a new model with given data set

Note: use $ node-svm train <dataset file> -i to set parameters values dynamically.

evaluate

$ node-svm evaluate <model file><testset file> [<options>]

Evaluate model's accuracy against a test set

How it work

node-svm uses the official libsvm C++ library, version 3.20.

For more information see also :

Contributions

Feel free to fork and improve/enhance node-svm in any way your want.

If you feel that the community will benefit from your changes, please send a pull request :

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add documentation if necessary.
  • Add tests for it. This is important so I don't break it in a future version unintentionally (run grunt or npm test).
  • Send a pull request to the develop branch.

#FAQ ###Segmentation fault Q : Node returns 'segmentation fault' error during training. What's going on?

A1 : Your dataset is empty or its format is incorrect.

A2 : Your dataset is too big.

###Difference between nu-SVC and C-SVC Q : What is the difference between nu-SVC and C-SVC?

A : Answer here

###Other questions

License

MIT

githalytics.com alpha

About

Support Vector Machines for nodejs & io.js

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

node-svm

Support Vector Machine (SVM) library for nodejs & io.js .

NPMBuild StatusCoverage Status

Support Vector Machines

Wikipedia :

Support vector machines are supervised learning models that analyze data and recognize patterns. A special property is that they simultaneously minimize the empirical classification error and maximize the geometric margin; hence they are also known as maximum margin classifiers. Wikipedia image

Installation

npm install --save node-svm

Quick start

If you are not familiar with SVM I highly recommend this guide.

Here's an example of using node-svm to approximate the XOR function :

varsvm=require('node-svm');varxor=[[[0,0],0],[[0,1],1],[[1,0],1],[[1,1],0]];// initialize a new predictorvarclf=newsvm.CSVC();clf.train(xor).done(function(){// predict thingsxor.forEach(function(ex){varprediction=clf.predictSync(ex[0]);console.log('%d XOR %d => %d',ex[0][0],ex[0][1],prediction);});});/******** CONSOLE ******** 0 XOR 0 => 0 0 XOR 1 => 1 1 XOR 0 => 1 1 XOR 1 => 0 */

More examples are available here.

Note: There's no reason to use SVM to figure out XOR BTW...

API

Classifiers

Possible classifiers are:

ClassifierTypeParamsInitialization
C_SVCmulti-class classifierc= new svm.CSVC(opts)
NU_SVCmulti-class classifiernu= new svm.NuSVC(opts)
ONE_CLASSone-class classifiernu= new svm.OneClassSVM(opts)
EPSILON_SVRregressionc, epsilon= new svm.EpsilonSVR(opts)
NU_SVRregressionc, nu= new svm.NuSVR(opts)

Kernels

Possible kernels are:

KernelParameters
LINEARNo parameter
POLYdegree, gamma, r
RBFgamma
SIGMOIDgamma, r

Parameters and options

Possible parameters/options are:

NameDefault value(s)Description
svmTypeC_SVCUsed classifier
kernelTypeRBFUsed kernel
c[0.01,0.125,0.5,1,2]Cost for C_SVC, EPSILON_SVR and NU_SVR. Can be a Number or an Array of numbers
nu[0.01,0.125,0.5,1]For NU_SVC, ONE_CLASS and NU_SVR. Can be a Number or an Array of numbers
epsilon[0.01,0.125,0.5,1]For EPSILON_SVR. Can be a Number or an Array of numbers
degree[2,3,4]For POLY kernel. Can be a Number or an Array of numbers
gamma[0.001,0.01,0.5]For POLY, RBF and SIGMOID kernels. Can be a Number or an Array of numbers
r[0.125,0.5,0,1]For POLY and SIGMOID kernels. Can be a Number or an Array of numbers
kFold4k parameter for k-fold cross validation. k must be >= 1. If k===1 then entire dataset is use for both testing and training.
normalizetrueWhether to use mean normalization during data pre-processing
reducetrueWhether to use PCA to reduce dataset's dimensions during data pre-processing
retainedVariance0.99Define the acceptable impact on data integrity (require reduce to be true)
eps1e-3Tolerance of termination criterion
cacheSize200Cache size in MB.
shrinkingtrueWhether to use the shrinking heuristics
probabilityfalseWhether to train a SVC or SVR model for probability estimates

The example below shows how to use them:

varsvm=require('node-svm');varclf=newsvm.SVM({svmType: 'C_SVC',c: [0.03125,0.125,0.5,2,8],// kernels parameterskernelType: 'RBF',gamma: [0.03125,0.125,0.5,2,8],// training optionskFold: 4,normalize: true,reduce: true,retainedVariance: 0.99,eps: 1e-3,cacheSize: 200,shrinking : true,probability : false});

Notes :

  • You can override default values by creating a .nodesvmrc file (JSON) at the root of your project.
  • If at least one parameter has multiple values, node-svm will go through all possible combinations to see which one gives the best results (it performs grid-search to maximize f-score for classification and minimize Mean Squared Error for regression).

##Training

SVMs can be trained using svm#train(dataset) method.

Pseudo code :

varclf=newsvm.SVM(options);clf.train(dataset).progress(function(rate){// ...}).spread(function(trainedModel,trainingReport){// ...});

Notes :

  • trainedModel can be used to restore the predictor later (see this example for more information).
  • trainingReport contains information about predictor's accuracy (such as MSE, precison, recall, fscore, retained variance etc.)

Prediction

Once trained, you can use the classifier object to predict values for new inputs. You can do so :

  • Synchronously using clf#predictSync(inputs)
  • Asynchronously using clf#predict(inputs).then(function(predicted){ ... });

If you enabled probabilities during initialization you can also predict probabilities for each class :

  • Synchronously using clf#predictProbabilitiesSync(inputs).
  • Asynchronously using clf#predictProbabilities(inputs).then(function(probabilities){ ... }).

Note : inputs must be a 1d array of numbers

Model evaluation

Once the predictor is trained it can be evaluated against a test set.

Pseudo code :

varsvm=require('node-svm');varclf=newsvm.SVM(options);svm.read(trainFile).then(function(dataset){returnclf.train(dataset);}).then(function(trainedModel,trainingReport){returnsvm.read(testFile);}).then(function(testset){returnclf.evaluate(testset);});.done(function(report){console.log(report);});

CLI

node-svm comes with a build-in Command Line Interpreter.

To use it you have to install node-svm globally using npm install -g node-svm.

See $ node-svm -h for complete command line reference.

help

$ node-svm help [<command>]

Display help information about node-svm

train

$ node-svm train <dataset file> [<where to save the prediction model>] [<options>]

Train a new model with given data set

Note: use $ node-svm train <dataset file> -i to set parameters values dynamically.

evaluate

$ node-svm evaluate <model file><testset file> [<options>]

Evaluate model's accuracy against a test set

How it work

node-svm uses the official libsvm C++ library, version 3.20.

For more information see also :

Contributions

Feel free to fork and improve/enhance node-svm in any way your want.

If you feel that the community will benefit from your changes, please send a pull request :

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add documentation if necessary.
  • Add tests for it. This is important so I don't break it in a future version unintentionally (run grunt or npm test).
  • Send a pull request to the develop branch.

#FAQ ###Segmentation fault Q : Node returns 'segmentation fault' error during training. What's going on?

A1 : Your dataset is empty or its format is incorrect.

A2 : Your dataset is too big.

###Difference between nu-SVC and C-SVC Q : What is the difference between nu-SVC and C-SVC?

A : Answer here

###Other questions

License

MIT

githalytics.com alpha

About

Support Vector Machines for nodejs & io.js

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

node-svm

Support Vector Machine (SVM) library for nodejs & io.js .

NPMBuild StatusCoverage Status

Support Vector Machines

Wikipedia :

Support vector machines are supervised learning models that analyze data and recognize patterns. A special property is that they simultaneously minimize the empirical classification error and maximize the geometric margin; hence they are also known as maximum margin classifiers. Wikipedia image

Installation

npm install --save node-svm

Quick start

If you are not familiar with SVM I highly recommend this guide.

Here's an example of using node-svm to approximate the XOR function :

varsvm=require('node-svm');varxor=[[[0,0],0],[[0,1],1],[[1,0],1],[[1,1],0]];// initialize a new predictorvarclf=newsvm.CSVC();clf.train(xor).done(function(){// predict thingsxor.forEach(function(ex){varprediction=clf.predictSync(ex[0]);console.log('%d XOR %d => %d',ex[0][0],ex[0][1],prediction);});});/******** CONSOLE ******** 0 XOR 0 => 0 0 XOR 1 => 1 1 XOR 0 => 1 1 XOR 1 => 0 */

More examples are available here.

Note: There's no reason to use SVM to figure out XOR BTW...

API

Classifiers

Possible classifiers are:

ClassifierTypeParamsInitialization
C_SVCmulti-class classifierc= new svm.CSVC(opts)
NU_SVCmulti-class classifiernu= new svm.NuSVC(opts)
ONE_CLASSone-class classifiernu= new svm.OneClassSVM(opts)
EPSILON_SVRregressionc, epsilon= new svm.EpsilonSVR(opts)
NU_SVRregressionc, nu= new svm.NuSVR(opts)

Kernels

Possible kernels are:

KernelParameters
LINEARNo parameter
POLYdegree, gamma, r
RBFgamma
SIGMOIDgamma, r

Parameters and options

Possible parameters/options are:

NameDefault value(s)Description
svmTypeC_SVCUsed classifier
kernelTypeRBFUsed kernel
c[0.01,0.125,0.5,1,2]Cost for C_SVC, EPSILON_SVR and NU_SVR. Can be a Number or an Array of numbers
nu[0.01,0.125,0.5,1]For NU_SVC, ONE_CLASS and NU_SVR. Can be a Number or an Array of numbers
epsilon[0.01,0.125,0.5,1]For EPSILON_SVR. Can be a Number or an Array of numbers
degree[2,3,4]For POLY kernel. Can be a Number or an Array of numbers
gamma[0.001,0.01,0.5]For POLY, RBF and SIGMOID kernels. Can be a Number or an Array of numbers
r[0.125,0.5,0,1]For POLY and SIGMOID kernels. Can be a Number or an Array of numbers
kFold4k parameter for k-fold cross validation. k must be >= 1. If k===1 then entire dataset is use for both testing and training.
normalizetrueWhether to use mean normalization during data pre-processing
reducetrueWhether to use PCA to reduce dataset's dimensions during data pre-processing
retainedVariance0.99Define the acceptable impact on data integrity (require reduce to be true)
eps1e-3Tolerance of termination criterion
cacheSize200Cache size in MB.
shrinkingtrueWhether to use the shrinking heuristics
probabilityfalseWhether to train a SVC or SVR model for probability estimates

The example below shows how to use them:

varsvm=require('node-svm');varclf=newsvm.SVM({svmType: 'C_SVC',c: [0.03125,0.125,0.5,2,8],// kernels parameterskernelType: 'RBF',gamma: [0.03125,0.125,0.5,2,8],// training optionskFold: 4,normalize: true,reduce: true,retainedVariance: 0.99,eps: 1e-3,cacheSize: 200,shrinking : true,probability : false});

Notes :

  • You can override default values by creating a .nodesvmrc file (JSON) at the root of your project.
  • If at least one parameter has multiple values, node-svm will go through all possible combinations to see which one gives the best results (it performs grid-search to maximize f-score for classification and minimize Mean Squared Error for regression).

##Training

SVMs can be trained using svm#train(dataset) method.

Pseudo code :

varclf=newsvm.SVM(options);clf.train(dataset).progress(function(rate){// ...}).spread(function(trainedModel,trainingReport){// ...});

Notes :

  • trainedModel can be used to restore the predictor later (see this example for more information).
  • trainingReport contains information about predictor's accuracy (such as MSE, precison, recall, fscore, retained variance etc.)

Prediction

Once trained, you can use the classifier object to predict values for new inputs. You can do so :

  • Synchronously using clf#predictSync(inputs)
  • Asynchronously using clf#predict(inputs).then(function(predicted){ ... });

If you enabled probabilities during initialization you can also predict probabilities for each class :

  • Synchronously using clf#predictProbabilitiesSync(inputs).
  • Asynchronously using clf#predictProbabilities(inputs).then(function(probabilities){ ... }).

Note : inputs must be a 1d array of numbers

Model evaluation

Once the predictor is trained it can be evaluated against a test set.

Pseudo code :

varsvm=require('node-svm');varclf=newsvm.SVM(options);svm.read(trainFile).then(function(dataset){returnclf.train(dataset);}).then(function(trainedModel,trainingReport){returnsvm.read(testFile);}).then(function(testset){returnclf.evaluate(testset);});.done(function(report){console.log(report);});

CLI

node-svm comes with a build-in Command Line Interpreter.

To use it you have to install node-svm globally using npm install -g node-svm.

See $ node-svm -h for complete command line reference.

help

$ node-svm help [<command>]

Display help information about node-svm

train

$ node-svm train <dataset file> [<where to save the prediction model>] [<options>]

Train a new model with given data set

Note: use $ node-svm train <dataset file> -i to set parameters values dynamically.

evaluate

$ node-svm evaluate <model file><testset file> [<options>]

Evaluate model's accuracy against a test set

How it work

node-svm uses the official libsvm C++ library, version 3.20.

For more information see also :

Contributions

Feel free to fork and improve/enhance node-svm in any way your want.

If you feel that the community will benefit from your changes, please send a pull request :

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add documentation if necessary.
  • Add tests for it. This is important so I don't break it in a future version unintentionally (run grunt or npm test).
  • Send a pull request to the develop branch.

#FAQ ###Segmentation fault Q : Node returns 'segmentation fault' error during training. What's going on?

A1 : Your dataset is empty or its format is incorrect.

A2 : Your dataset is too big.

###Difference between nu-SVC and C-SVC Q : What is the difference between nu-SVC and C-SVC?

A : Answer here

###Other questions

License

MIT

githalytics.com alpha

About

Support Vector Machines for nodejs & io.js

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

node-svm

Support Vector Machine (SVM) library for nodejs & io.js .

NPMBuild StatusCoverage Status

Support Vector Machines

Wikipedia :

Support vector machines are supervised learning models that analyze data and recognize patterns. A special property is that they simultaneously minimize the empirical classification error and maximize the geometric margin; hence they are also known as maximum margin classifiers. Wikipedia image

Installation

npm install --save node-svm

Quick start

If you are not familiar with SVM I highly recommend this guide.

Here's an example of using node-svm to approximate the XOR function :

varsvm=require('node-svm');varxor=[[[0,0],0],[[0,1],1],[[1,0],1],[[1,1],0]];// initialize a new predictorvarclf=newsvm.CSVC();clf.train(xor).done(function(){// predict thingsxor.forEach(function(ex){varprediction=clf.predictSync(ex[0]);console.log('%d XOR %d => %d',ex[0][0],ex[0][1],prediction);});});/******** CONSOLE ******** 0 XOR 0 => 0 0 XOR 1 => 1 1 XOR 0 => 1 1 XOR 1 => 0 */

More examples are available here.

Note: There's no reason to use SVM to figure out XOR BTW...

API

Classifiers

Possible classifiers are:

ClassifierTypeParamsInitialization
C_SVCmulti-class classifierc= new svm.CSVC(opts)
NU_SVCmulti-class classifiernu= new svm.NuSVC(opts)
ONE_CLASSone-class classifiernu= new svm.OneClassSVM(opts)
EPSILON_SVRregressionc, epsilon= new svm.EpsilonSVR(opts)
NU_SVRregressionc, nu= new svm.NuSVR(opts)

Kernels

Possible kernels are:

KernelParameters
LINEARNo parameter
POLYdegree, gamma, r
RBFgamma
SIGMOIDgamma, r

Parameters and options

Possible parameters/options are:

NameDefault value(s)Description
svmTypeC_SVCUsed classifier
kernelTypeRBFUsed kernel
c[0.01,0.125,0.5,1,2]Cost for C_SVC, EPSILON_SVR and NU_SVR. Can be a Number or an Array of numbers
nu[0.01,0.125,0.5,1]For NU_SVC, ONE_CLASS and NU_SVR. Can be a Number or an Array of numbers
epsilon[0.01,0.125,0.5,1]For EPSILON_SVR. Can be a Number or an Array of numbers
degree[2,3,4]For POLY kernel. Can be a Number or an Array of numbers
gamma[0.001,0.01,0.5]For POLY, RBF and SIGMOID kernels. Can be a Number or an Array of numbers
r[0.125,0.5,0,1]For POLY and SIGMOID kernels. Can be a Number or an Array of numbers
kFold4k parameter for k-fold cross validation. k must be >= 1. If k===1 then entire dataset is use for both testing and training.
normalizetrueWhether to use mean normalization during data pre-processing
reducetrueWhether to use PCA to reduce dataset's dimensions during data pre-processing
retainedVariance0.99Define the acceptable impact on data integrity (require reduce to be true)
eps1e-3Tolerance of termination criterion
cacheSize200Cache size in MB.
shrinkingtrueWhether to use the shrinking heuristics
probabilityfalseWhether to train a SVC or SVR model for probability estimates

The example below shows how to use them:

varsvm=require('node-svm');varclf=newsvm.SVM({svmType: 'C_SVC',c: [0.03125,0.125,0.5,2,8],// kernels parameterskernelType: 'RBF',gamma: [0.03125,0.125,0.5,2,8],// training optionskFold: 4,normalize: true,reduce: true,retainedVariance: 0.99,eps: 1e-3,cacheSize: 200,shrinking : true,probability : false});

Notes :

  • You can override default values by creating a .nodesvmrc file (JSON) at the root of your project.
  • If at least one parameter has multiple values, node-svm will go through all possible combinations to see which one gives the best results (it performs grid-search to maximize f-score for classification and minimize Mean Squared Error for regression).

##Training

SVMs can be trained using svm#train(dataset) method.

Pseudo code :

varclf=newsvm.SVM(options);clf.train(dataset).progress(function(rate){// ...}).spread(function(trainedModel,trainingReport){// ...});

Notes :

  • trainedModel can be used to restore the predictor later (see this example for more information).
  • trainingReport contains information about predictor's accuracy (such as MSE, precison, recall, fscore, retained variance etc.)

Prediction

Once trained, you can use the classifier object to predict values for new inputs. You can do so :

  • Synchronously using clf#predictSync(inputs)
  • Asynchronously using clf#predict(inputs).then(function(predicted){ ... });

If you enabled probabilities during initialization you can also predict probabilities for each class :

  • Synchronously using clf#predictProbabilitiesSync(inputs).
  • Asynchronously using clf#predictProbabilities(inputs).then(function(probabilities){ ... }).

Note : inputs must be a 1d array of numbers

Model evaluation

Once the predictor is trained it can be evaluated against a test set.

Pseudo code :

varsvm=require('node-svm');varclf=newsvm.SVM(options);svm.read(trainFile).then(function(dataset){returnclf.train(dataset);}).then(function(trainedModel,trainingReport){returnsvm.read(testFile);}).then(function(testset){returnclf.evaluate(testset);});.done(function(report){console.log(report);});

CLI

node-svm comes with a build-in Command Line Interpreter.

To use it you have to install node-svm globally using npm install -g node-svm.

See $ node-svm -h for complete command line reference.

help

$ node-svm help [<command>]

Display help information about node-svm

train

$ node-svm train <dataset file> [<where to save the prediction model>] [<options>]

Train a new model with given data set

Note: use $ node-svm train <dataset file> -i to set parameters values dynamically.

evaluate

$ node-svm evaluate <model file><testset file> [<options>]

Evaluate model's accuracy against a test set

How it work

node-svm uses the official libsvm C++ library, version 3.20.

For more information see also :

Contributions

Feel free to fork and improve/enhance node-svm in any way your want.

If you feel that the community will benefit from your changes, please send a pull request :

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add documentation if necessary.
  • Add tests for it. This is important so I don't break it in a future version unintentionally (run grunt or npm test).
  • Send a pull request to the develop branch.

#FAQ ###Segmentation fault Q : Node returns 'segmentation fault' error during training. What's going on?

A1 : Your dataset is empty or its format is incorrect.

A2 : Your dataset is too big.

###Difference between nu-SVC and C-SVC Q : What is the difference between nu-SVC and C-SVC?

A : Answer here

###Other questions

License

MIT

githalytics.com alpha

About

Support Vector Machines for nodejs & io.js

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages