pw-csp
Version:
Common spatial pattern
107 lines (78 loc) • 3.22 kB
HTML
<html lang="en">
<head>
<meta charset="utf-8">
<title>index.js - Documentation</title>
<script src="scripts/prettify/prettify.js"></script>
<script src="scripts/prettify/lang-css.js"></script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/ionicons.min.css">
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger" class="navicon-button x">
<div class="navicon"></div>
</label>
<label for="nav-trigger" class="overlay"></label>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="CSP.html">CSP</a><ul class='methods'><li data-type='method'><a href="CSP.html#project">project</a></li></ul></li></ul>
</nav>
<div id="main">
<h1 class="page-title">index.js</h1>
<section>
<article>
<pre class="prettyprint source linenums"><code>var numeric = require('numeric');
var math = require('mathjs');
var stat = require('pw-stat');
/**
* Creates a new CSP object
* @constructor
* @param {number[][]} class1 - Data samples for class 1. Rows should be samples, columns should be signals.
* @param {number[][]} class2 - Data samples for class 2. Rows should be samples, columns should be signals.
*/
function CSP(class1, class2) {
var cov1 = stat.cov(class1);
var cov2 = stat.cov(class2);
this.V = numeric.eig(math.multiply(math.inv(math.add(cov1, cov2)), cov1)).E.x;
}
/**
* Projects data and reduces to given number of dimensions
* @param {number[][]} data - Data points to be projected. Rows should be samples, columns should be signals.
* @param {number} [dimensions] - Number of dimensions to be returned. Can range from 1 to number of signals. Defaults to number of signals.
* @returns {number[][]} Projected data. Rows are samples, columns are dimensions sorted by descending importance.
*/
CSP.prototype.project = function (data, dimensions) {
var projected = math.multiply(data, this.V);
// Default number of dimensions is all of them, which is number of columns in data
dimensions = typeof dimensions !== "undefined" ? dimensions : projected[0].length;
var reduced = [];
for (var r = 0; r < projected.length; r++) {
reduced.push([]);
for (var i = 0; i < dimensions; i++) {
// Start at left and right ends of matrix columns are work towards center
if (i % 2 == 0) {
var column = i / 2;
} else {
var column = projected[0].length - (i + 1) / 2;
}
reduced[r].push(projected[r][column]);
}
}
return reduced;
}
module.exports = CSP;</code></pre>
</article>
</section>
</div>
<br class="clear">
<footer>
Documentation generated at Thu Nov 16 2017 22:31:54 GMT-0600 (Central Standard Time)
</footer>
<script>prettyPrint();</script>
<script src="scripts/linenumber.js"></script>
</body>
</html>