UNPKG

qminer

Version:

A C++ based data analytics platform for processing large-scale real-time streams containing structured and unstructured data

515 lines (511 loc) 20.7 kB
<!doctype html> <html> <head> <meta name="generator" content="JSDoc 3"> <meta charset="utf-8"> <title>Class: PCA</title> <link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css"> <link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css"> <link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css"> <link href="css/baseline.css" rel="stylesheet"> </head> <body onload="prettyPrint()"> <nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar"> <div id="jsdoc-navbar-container"> <div id="jsdoc-navbar-content"> <a href="index.html" class="jsdoc-navbar-package-name">QMiner JavaScript API v9.4.0</a> </div> </div> </nav> <div id="jsdoc-body-container"> <div id="jsdoc-content"> <div id="jsdoc-content-container"> <div id="jsdoc-main" role="main"> <header class="page-header"> <div class="symbol-detail-labels"><span class="label label-kind">class</span>&nbsp;<span class="label label-static">static</span></div> <h1><small><a href="module-analytics.html">analytics</a>.<wbr></small><span class="symbol-name">PCA</span></h1> <p class="source-link">Source: <a href="analyticsdoc.js.html#source-line-4371">analyticsdoc.<wbr>js:4371</a></p> <div class="symbol-classdesc"> <p>Principal Components Analysis</p> </div> <dl class="dl-compact"> </dl> </header> <section id="summary"> <div class="summary-callout"> <h2 class="summary-callout-heading">Methods</h2> <div class="summary-content"> <div class="summary-column"> <dl class="dl-summary-callout"> <dt><a href="module-analytics.PCA.html#fit">fit(A)</a></dt> <dd> </dd> <dt><a href="module-analytics.PCA.html#getModel">getModel()</a></dt> <dd> </dd> <dt><a href="module-analytics.PCA.html#getParams">getParams()</a></dt> <dd> </dd> </dl> </div> <div class="summary-column"> <dl class="dl-summary-callout"> <dt><a href="module-analytics.PCA.html#inverseTransform">inverseTransform(x)</a></dt> <dd> </dd> <dt><a href="module-analytics.PCA.html#save">save(fout)</a></dt> <dd> </dd> <dt><a href="module-analytics.PCA.html#setParams">setParams(param)</a></dt> <dd> </dd> </dl> </div> <div class="summary-column"> <dl class="dl-summary-callout"> <dt><a href="module-analytics.PCA.html#transform">transform(x)</a></dt> <dd> </dd> </dl> </div> </div> </div> </section> <section> <h2 id="PCA">new&nbsp;<span class="symbol-name">PCA</span><span class="signature"><span class="signature-params">([arg])</span></span></h2> <p>Principal Components Analysis</p> <section> <h3> Examples </h3> <div> <p>Using default constructor</p> <pre class="prettyprint"><code>// import analytics module var analytics &#x3D; require(&#x27;qminer&#x27;).analytics; // construct model var pca &#x3D; new analytics.PCA();</code></pre> </div> <div> <p>Using custom constructor</p> <pre class="prettyprint"><code>// import analytics module var analytics &#x3D; require(&#x27;qminer&#x27;).analytics; // construct model var pca &#x3D; new analytics.PCA({ k: 5, iter: 50 });</code></pre> </div> </section> <section> <h3>Parameter</h3> <table class="jsdoc-details-table"> <thead> <tr> <th>Name</th> <th>Type</th> <th>Optional</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td> <p>arg</p> </td> <td> <p>(<a href="module-analytics.html#~PCAParam">module:analytics~PCAParam</a> or <a href="module-fs.FIn.html">module:fs.FIn</a>)</p> </td> <td> <p>Yes</p> </td> <td> <p>Construction arguments. There are two ways of constructing: <br>1. Using the <a href="module-analytics.html#~PCAParam">module:analytics~PCAParam</a> object, <br>2. using the file input stream <a href="module-fs.FIn.html">module:fs.FIn</a>. </p> </td> </tr> </tbody> </table> </section> <dl class="dl-compact"> </dl> </section> <section> <h2>Methods</h2> <section> <h3 id="fit"><span class="symbol-name">fit</span><span class="signature"><span class="signature-params">(A)</span></span></h3> <p>Finds the eigenvectors of the variance matrix.</p> <section> <h4> Example </h4> <div> <pre class="prettyprint"><code>// import analytics module var analytics &#x3D; require(&#x27;qminer&#x27;).analytics; // construct model var pca &#x3D; new analytics.PCA(); // create matrix var matrix &#x3D; new la.Matrix([[0, 1], [-1, 0]]); // fit the matrix pca.fit(matrix);</code></pre> </div> </section> <section> <h4>Parameter</h4> <table class="jsdoc-details-table"> <thead> <tr> <th>Name</th> <th>Type</th> <th>Optional</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td> <p>A</p> </td> <td> <p><a href="module-la.Matrix.html">module:la.Matrix</a></p> </td> <td> <p>&nbsp;</p> </td> <td> <p>Matrix whose columns correspond to examples.</p> </td> </tr> </tbody> </table> </section> <dl class="dl-compact"> </dl> <h3 id="getModel"><span class="symbol-name">getModel</span><span class="signature"><span class="signature-params">()</span>&nbsp;&rarr; <span class="signature-returns"> Object</span></span></h3> <p>Returns the model.</p> <section> <h4> Example </h4> <div> <pre class="prettyprint"><code>// import analytics module var analytics &#x3D; require(&#x27;qminer&#x27;).analytics; // construct model var pca &#x3D; new analytics.PCA(); // create matrix var matrix &#x3D; new la.Matrix([[0, 1], [-1, 0]]); // fit matrix before getting the model pca.fit(matrix) // get your model using function getModel var model &#x3D; pca.getModel();</code></pre> </div> </section> <dl class="dl-compact"> <dt>Returns</dt> <dd> <p><code>Object</code>B The object <code>pcaModel</code> containing the properties: <br>1. <code>pcaModel.P</code> - The eigenvectors. Type <a href="module-la.Matrix.html">module:la.Matrix</a>. <br>2. <code>pcaModel.lambda</code> - The eigenvalues. Type <a href="module-la.Vector.html">module:la.Vector</a>. <br>3. <code>pcaModel.mu</code> - The mean values. Type <a href="module-la.Vector.html">module:la.Vector</a>. </p> </dd> </dl> <h3 id="getParams"><span class="symbol-name">getParams</span><span class="signature"><span class="signature-params">()</span>&nbsp;&rarr; <span class="signature-returns"> moduel:analytics~PCAParam</span></span></h3> <p>Gets parameters.</p> <section> <h4> Examples </h4> <div> <p>Using default constructor</p> <pre class="prettyprint"><code>// import analytics module var analytics &#x3D; require(&#x27;qminer&#x27;).analytics; // construct model var pca &#x3D; new analytics.PCA(); // check the constructor parameters var paramvalue &#x3D; pca.getParams();</code></pre> </div> <div> <p>Using custom constructor</p> <pre class="prettyprint"><code>// import analytics module var analytics &#x3D; require(&#x27;qminer&#x27;).analytics; // construct model var pca &#x3D; new analytics.PCA(); // set parameters pca.setParams({iter: 10, k: 5}); // check the changed parameters var paramvalue &#x3D; pca.getParams();</code></pre> </div> </section> <dl class="dl-compact"> <dt>Returns</dt> <dd> <p><code>moduel:analytics~PCAParam</code>B The constructor parameters.</p> </dd> </dl> <h3 id="inverseTransform"><span class="symbol-name">inverseTransform</span><span class="signature"><span class="signature-params">(x)</span>&nbsp;&rarr; <span class="signature-returns"> (<a href="module-la.Vector.html">module:la.Vector</a> or <a href="module-la.Matrix.html">module:la.Matrix</a>)</span></span></h3> <p>Reconstructs the vector in the original space, reverses centering.</p> <section> <h4> Examples </h4> <div> <p>Inverse transform of matrix</p> <pre class="prettyprint"><code>// import analytics module var analytics &#x3D; require(&#x27;qminer&#x27;).analytics; // construct model var pca &#x3D; new analytics.PCA(); // create matrix var matrix &#x3D; new la.Matrix([[0, 1], [-1, 0]]); // fit the matrix pca.fit(matrix); var model &#x3D; pca.getModel(); // use inverseTransform on matrix var invTransform &#x3D; pca.inverseTransform(matrix);</code></pre> </div> <div> <p>Inverse transform of vector</p> <pre class="prettyprint"><code>// import analytics module var analytics &#x3D; require(&#x27;qminer&#x27;).analytics; // construct model var pca &#x3D; new analytics.PCA(); // create vector var vector &#x3D; new la.Vector([0, -1]); // create matrix var matrix &#x3D; new la.Matrix([[0, 1], [-1, 0]]); // fit the matrix pca.fit(matrix); var model &#x3D; pca.getModel(); // use inverseTransform on vector var invTransform &#x3D; pca.inverseTransform(vector);</code></pre> </div> </section> <section> <h4>Parameter</h4> <table class="jsdoc-details-table"> <thead> <tr> <th>Name</th> <th>Type</th> <th>Optional</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td> <p>x</p> </td> <td> <p>(<a href="module-la.Vector.html">module:la.Vector</a> or <a href="module-la.Matrix.html">module:la.Matrix</a>)</p> </td> <td> <p>&nbsp;</p> </td> <td> <p>Test vector or matrix with column examples, in the PCA space.</p> </td> </tr> </tbody> </table> </section> <dl class="dl-compact"> <dt>Returns</dt> <dd> <p><code>(<a href="module-la.Vector.html">module:la.Vector</a> or <a href="module-la.Matrix.html">module:la.Matrix</a>)</code>B Returns the reconstruction.</p> </dd> </dl> <h3 id="save"><span class="symbol-name">save</span><span class="signature"><span class="signature-params">(fout)</span>&nbsp;&rarr; <span class="signature-returns"> <a href="module-fs.FOut.html">module:fs.FOut</a></span></span></h3> <p>Saves the model.</p> <section> <h4> Example </h4> <div> <pre class="prettyprint"><code>// import analytics module var analytics &#x3D; require(&#x27;qminer&#x27;).analytics; // construct model var pca &#x3D; new analytics.PCA(); // create matrix var matrix &#x3D; new la.Matrix([[0, 1], [-1, 0]]); // fit matrix pca.fit(matrix); var model &#x3D; pca.getModel(); // save model pca.save(require(&#x27;qminer&#x27;).fs.openWrite(&#x27;pca_test.bin&#x27;)).close();</code></pre> </div> </section> <section> <h4>Parameter</h4> <table class="jsdoc-details-table"> <thead> <tr> <th>Name</th> <th>Type</th> <th>Optional</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td> <p>fout</p> </td> <td> <p><a href="module-fs.FOut.html">module:fs.FOut</a></p> </td> <td> <p>&nbsp;</p> </td> <td> <p>The output stream.</p> </td> </tr> </tbody> </table> </section> <dl class="dl-compact"> <dt>Returns</dt> <dd> <p><code><a href="module-fs.FOut.html">module:fs.FOut</a></code>B The output stream <code>fout</code>.</p> </dd> </dl> <h3 id="setParams"><span class="symbol-name">setParams</span><span class="signature"><span class="signature-params">(param)</span></span></h3> <p>Sets parameters.</p> <section> <h4> Example </h4> <div> <pre class="prettyprint"><code>// import analytics module var analytics &#x3D; require(&#x27;qminer&#x27;).analytics; // construct model var pca &#x3D; new analytics.PCA(); // set 5 eigenvectors and 10 iterations using setParams pca.setParams({iter: 10, k: 5});</code></pre> </div> </section> <section> <h4>Parameter</h4> <table class="jsdoc-details-table"> <thead> <tr> <th>Name</th> <th>Type</th> <th>Optional</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td> <p>param</p> </td> <td> <p><a href="module-analytics.html#~PCAParam">module:analytics~PCAParam</a></p> </td> <td> <p>&nbsp;</p> </td> <td> <p>The constructor parameters.</p> </td> </tr> </tbody> </table> </section> <dl class="dl-compact"> </dl> <h3 id="transform"><span class="symbol-name">transform</span><span class="signature"><span class="signature-params">(x)</span>&nbsp;&rarr; <span class="signature-returns"> (<a href="module-la.Vector.html">module:la.Vector</a> or <a href="module-la.Matrix.html">module:la.Matrix</a>)</span></span></h3> <p>Projects the example(s) and expresses them as coefficients in the eigenvector basis <code>this.P</code>. Recovering the data in the original space: <code>(this.P).multiply(p)</code>, where <code>p</code>'s rows are the coefficients in the eigenvector basis.</p> <section> <h4> Examples </h4> <div> <p>Transforming the matrix</p> <pre class="prettyprint"><code>// import analytics module var analytics &#x3D; require(&#x27;qminer&#x27;).analytics; // construct model var pca &#x3D; new analytics.PCA(); // create matrix var matrix &#x3D; new la.Matrix([[0, 1], [-1, 0]]); // fit the matrix pca.fit(matrix); var model &#x3D; pca.getModel(); // transform matrix var transform &#x3D; pca.transform(matrix);</code></pre> </div> <div> <p>Transforming the vector</p> <pre class="prettyprint"><code>// import analytics module var analytics &#x3D; require(&#x27;qminer&#x27;).analytics; // construct model var pca &#x3D; new analytics.PCA(); // create vector you wish to transform var vector &#x3D; new la.Vector([0, -1]); // create matrix var matrix &#x3D; new la.Matrix([[0, 1], [-1, 0]]); // fit the matrix pca.fit(matrix); var model &#x3D; pca.getModel(); // transform vector var transform &#x3D; pca.transform(vector);</code></pre> </div> </section> <section> <h4>Parameter</h4> <table class="jsdoc-details-table"> <thead> <tr> <th>Name</th> <th>Type</th> <th>Optional</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td> <p>x</p> </td> <td> <p>(<a href="module-la.Vector.html">module:la.Vector</a> or <a href="module-la.Matrix.html">module:la.Matrix</a>)</p> </td> <td> <p>&nbsp;</p> </td> <td> <p>Test vector or matrix with column examples.</p> </td> </tr> </tbody> </table> </section> <dl class="dl-compact"> <dt>Returns</dt> <dd> <p><code>(<a href="module-la.Vector.html">module:la.Vector</a> or <a href="module-la.Matrix.html">module:la.Matrix</a>)</code>B Returns projected vector or matrix.</p> </dd> </dl> </section> </section> </div> </div> <nav id="jsdoc-toc-nav" role="navigation"></nav> </div> </div> <footer id="jsdoc-footer" class="jsdoc-footer"> <div id="jsdoc-footer-container"> <p> </p> </div> </footer> <script src="scripts/jquery.min.js"></script> <script src="scripts/tree.jquery.js"></script> <script src="scripts/prettify.js"></script> <script src="scripts/jsdoc-toc.js"></script> <script src="scripts/linenumber.js"></script> <script src="scripts/scrollanchor.js"></script> </body> </html>