1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- require('should');
- var clustering = require('../lib/index.js');
- var OPTICS = clustering.OPTICS;
- describe('OPTICS', function() {
- describe('run', function() {
- it('should test regular density set', function() {
- var dataset = [
- [1, 1], [0, 1], [1, 0],
- [10, 10], [10, 11], [11, 10],
- [50, 50], [51, 50], [50, 51],
- [100, 100]
- ];
- var optics = new OPTICS();
- var clusters = optics.run(dataset, 2, 2);
- clusters.should.be.eql([
- [0, 1, 2],
- [3, 4, 5],
- [6, 7, 8],
- [9]
- ]);
- });
- it('should test various density set', function() {
- var dataset = [
- [0, 0], [6, 0], [-1, 0], [0, 1], [0, -1],
- [45, 45], [45.1, 45.2], [45.1, 45.3], [45.8, 45.5],
- [45.2, 45.3],
- [50, 50], [56, 50], [50, 52], [50, 55], [50, 51]
- ];
- var optics = new OPTICS();
- var clusters = optics.run(dataset, 6, 2);
- clusters.should.be.eql([
- [0, 2, 3, 4],
- [1],
- [5, 6, 7, 9, 8],
- [10, 14, 12, 13],
- [11]
- ]);
- });
- });
- describe('regionQuery', function() {
- it('should return nearest neighborhood of a point', function() {
- var optics = new OPTICS();
- optics.dataset = [
- [1, 1], [2, 2], [3, 3],
- [50, 50], [51, 51]
- ];
- optics.epsilon = 2;
- optics._regionQuery(1).should.eql([0, 1, 2]);
- optics._regionQuery(4).should.eql([3, 4]);
- optics.epsilon = 100;
- optics._regionQuery(1).should.eql([0, 1, 2, 3, 4]);
- });
- });
- describe('euclideanDistance', function() {
- it('should return distance between two points', function() {
- var optics = new OPTICS();
- optics._euclideanDistance([1, 1], [3, 1]).should.eql(2);
- optics._euclideanDistance([1, 1], [1, 3]).should.eql(2);
- });
- });
- describe('getReachabilityPlot', function() {
- it('should return reachability plot', function() {
- var optics = new OPTICS();
- var plot;
- var dataset = [
- [1, 1], [0, 1], [1, 0],
- [10, 10], [10, 11], [11, 10]
- ];
- optics.run(dataset, 2, 2);
- plot = optics.getReachabilityPlot();
- plot.should.eql([
- [0, undefined], [1, 1], [2, 1],
- [3, undefined], [4, 1], [5, 1]
- ]);
- // reachability plot should be always the same for different epsilon values
- optics.run(dataset, 10, 2);
- plot = optics.getReachabilityPlot();
- plot.should.eql([
- [0, undefined], [1, 1], [2, 1],
- [3, undefined], [4, 1], [5, 1]
- ]);
- });
- });
- });
|