Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import * as fs from 'fs';
  2. import { join } from 'path';
  3. import * as km from 'node-kmeans';
  4.  
  5. const FILENAME_ONE = join('datasets', 'KNN-1.txt')
  6. const FILENAME_TWO = join('datasets', 'KNN-2.txt')
  7.  
  8. let fileStringArr: string[] = fs.readFileSync(FILENAME_TWO, 'utf8').split('\n');
  9.  
  10. let array = fileStringArr.slice(1).map(value => {
  11.     let itemsString = value.split(' ');
  12.     let itemsParsed: number[] = [];
  13.    
  14.     // itemsParsed.push(parseInt(itemsString[0]));
  15.  
  16.     for(let i=1; i<itemsString.length; i++) {
  17.         itemsParsed.push(parseFloat(itemsString[i]));
  18.     }
  19.  
  20.     return itemsParsed;
  21. }).filter(value => value != null && typeof value == 'object' && value.length !== 0);
  22.  
  23. // let length = array[0].length;
  24. // for(let i=0; i<array.length; i++) {
  25. //     if(array[i].length !== length) console.log(`${i}\n ${array[i]}`)
  26. // }
  27.  
  28.  
  29. let points: {x: number; y:number}[] = [];
  30.  
  31. for(let clusters=1; clusters<11; clusters++) {
  32.  
  33.     km.clusterize(array, {k: clusters}, (error, results: {centroid: number[], cluster: number[][]}[]) => {
  34.         if (error) {
  35.             console.log(`Error: ${error}`);
  36.             return;
  37.         }
  38.  
  39.         let numClusters = results.length;
  40.  
  41.         let distance = results.reduce((acc , cluster) => {
  42.             return acc + calculateDistanceSquared(cluster.centroid, cluster.cluster)
  43.         }, 0);
  44.  
  45.         points.push({x: numClusters, y: distance});
  46.         console.log(`${numClusters}, ${distance}`);
  47.     });
  48.  
  49. }
  50.  
  51. function calculateDistanceSquared(centroid: number[], clusters: number[][]): number {
  52.     let sum = 0;
  53.  
  54.     for(let i=0; i<clusters.length; i++) {
  55.         let curCluster = clusters[i];
  56.        
  57.         for(let dim=0; dim<curCluster.length; dim++) {
  58.             sum += Math.pow(Math.abs(centroid[dim] - curCluster[dim]),2);
  59.         }
  60.     }
  61.  
  62.     return sum;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement