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
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> <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 <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 = require('qminer').analytics;
// construct model
var pca = new analytics.PCA();</code></pre>
</div>
<div>
<p>Using custom constructor</p>
<pre class="prettyprint"><code>// import analytics module
var analytics = require('qminer').analytics;
// construct model
var pca = 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 = require('qminer').analytics;
// construct model
var pca = new analytics.PCA();
// create matrix
var matrix = 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> </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> → <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 = require('qminer').analytics;
// construct model
var pca = new analytics.PCA();
// create matrix
var matrix = new la.Matrix([[0, 1], [-1, 0]]);
// fit matrix before getting the model
pca.fit(matrix)
// get your model using function getModel
var model = 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> → <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 = require('qminer').analytics;
// construct model
var pca = new analytics.PCA();
// check the constructor parameters
var paramvalue = pca.getParams();</code></pre>
</div>
<div>
<p>Using custom constructor</p>
<pre class="prettyprint"><code>// import analytics module
var analytics = require('qminer').analytics;
// construct model
var pca = new analytics.PCA();
// set parameters
pca.setParams({iter: 10, k: 5});
// check the changed parameters
var paramvalue = 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> → <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 = require('qminer').analytics;
// construct model
var pca = new analytics.PCA();
// create matrix
var matrix = new la.Matrix([[0, 1], [-1, 0]]);
// fit the matrix
pca.fit(matrix);
var model = pca.getModel();
// use inverseTransform on matrix
var invTransform = pca.inverseTransform(matrix);</code></pre>
</div>
<div>
<p>Inverse transform of vector</p>
<pre class="prettyprint"><code>// import analytics module
var analytics = require('qminer').analytics;
// construct model
var pca = new analytics.PCA();
// create vector
var vector = new la.Vector([0, -1]);
// create matrix
var matrix = new la.Matrix([[0, 1], [-1, 0]]);
// fit the matrix
pca.fit(matrix);
var model = pca.getModel();
// use inverseTransform on vector
var invTransform = 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> </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> → <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 = require('qminer').analytics;
// construct model
var pca = new analytics.PCA();
// create matrix
var matrix = new la.Matrix([[0, 1], [-1, 0]]);
// fit matrix
pca.fit(matrix);
var model = pca.getModel();
// save model
pca.save(require('qminer').fs.openWrite('pca_test.bin')).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> </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 = require('qminer').analytics;
// construct model
var pca = 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> </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> → <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 = require('qminer').analytics;
// construct model
var pca = new analytics.PCA();
// create matrix
var matrix = new la.Matrix([[0, 1], [-1, 0]]);
// fit the matrix
pca.fit(matrix);
var model = pca.getModel();
// transform matrix
var transform = pca.transform(matrix);</code></pre>
</div>
<div>
<p>Transforming the vector</p>
<pre class="prettyprint"><code>// import analytics module
var analytics = require('qminer').analytics;
// construct model
var pca = new analytics.PCA();
// create vector you wish to transform
var vector = new la.Vector([0, -1]);
// create matrix
var matrix = new la.Matrix([[0, 1], [-1, 0]]);
// fit the matrix
pca.fit(matrix);
var model = pca.getModel();
// transform vector
var transform = 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> </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>