Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import * as fs from 'fs';
- import { join } from 'path';
- import * as km from 'node-kmeans';
- const FILENAME_ONE = join('datasets', 'KNN-1.txt')
- const FILENAME_TWO = join('datasets', 'KNN-2.txt')
- let fileStringArr: string[] = fs.readFileSync(FILENAME_TWO, 'utf8').split('\n');
- let array = fileStringArr.slice(1).map(value => {
- let itemsString = value.split(' ');
- let itemsParsed: number[] = [];
- // itemsParsed.push(parseInt(itemsString[0]));
- for(let i=1; i<itemsString.length; i++) {
- itemsParsed.push(parseFloat(itemsString[i]));
- }
- return itemsParsed;
- }).filter(value => value != null && typeof value == 'object' && value.length !== 0);
- // let length = array[0].length;
- // for(let i=0; i<array.length; i++) {
- // if(array[i].length !== length) console.log(`${i}\n ${array[i]}`)
- // }
- let points: {x: number; y:number}[] = [];
- for(let clusters=1; clusters<11; clusters++) {
- km.clusterize(array, {k: clusters}, (error, results: {centroid: number[], cluster: number[][]}[]) => {
- if (error) {
- console.log(`Error: ${error}`);
- return;
- }
- let numClusters = results.length;
- let distance = results.reduce((acc , cluster) => {
- return acc + calculateDistanceSquared(cluster.centroid, cluster.cluster)
- }, 0);
- points.push({x: numClusters, y: distance});
- console.log(`${numClusters}, ${distance}`);
- });
- }
- function calculateDistanceSquared(centroid: number[], clusters: number[][]): number {
- let sum = 0;
- for(let i=0; i<clusters.length; i++) {
- let curCluster = clusters[i];
- for(let dim=0; dim<curCluster.length; dim++) {
- sum += Math.pow(Math.abs(centroid[dim] - curCluster[dim]),2);
- }
- }
- return sum;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement