You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
159 lines
4.6 KiB
159 lines
4.6 KiB
const regression = require('regression'); |
|
|
|
// const readline = require('node:readline'); |
|
// const rl = readline.createInterface({ |
|
// input: process.stdin, |
|
// output: process.stdout |
|
// }) |
|
|
|
const data = [ |
|
[6,88], |
|
[10,71], |
|
[5,19], |
|
[9,59], |
|
[8,18], |
|
[3,77], |
|
[2,61], |
|
[1,53], |
|
[7,13], |
|
[4,40], |
|
] |
|
|
|
class Nemoodar{ |
|
data; |
|
first_length=0; |
|
algorithms={ |
|
"linear":{ |
|
data:[], |
|
enheraf:0, |
|
}, |
|
"exponential":{ |
|
data:[], |
|
enheraf:0, |
|
}, |
|
"power":{ |
|
data:[], |
|
enheraf:0, |
|
}, |
|
"logarithmic":{ |
|
data:[], |
|
enheraf:0, |
|
}, |
|
"polynomial2":{ |
|
data:[], |
|
enheraf:0, |
|
}, |
|
"polynomial3":{ |
|
data:[], |
|
enheraf:0, |
|
}, |
|
"polynomial4":{ |
|
data:[], |
|
enheraf:0, |
|
},"polynomial5":{ |
|
data:[], |
|
enheraf:0, |
|
} |
|
} |
|
constructor({data,predict=1,option="linear",n=2}){ |
|
console.log("option",option) |
|
this.data = [...data.sort((a,b)=> a[0] - b[0])]; |
|
this.first_length = this.data.length; |
|
for(let algo in this.algorithms){ |
|
switch(algo){ |
|
case "linear": |
|
this.algorithms[algo].data=this.linear([...data],predict); |
|
break; |
|
case "exponential": |
|
this.algorithms[algo].data=this.exponential([...data],predict) |
|
break; |
|
case "power": |
|
this.algorithms[algo].data=this.power([...data],predict) |
|
break; |
|
case "logarithmic": |
|
this.algorithms[algo].data=this.logarithmic([...data],predict) |
|
break; |
|
case "polynomial2": |
|
this.algorithms[algo].data=this.polynomial([...data],predict,2); |
|
break; |
|
case "polynomial3": |
|
this.algorithms[algo].data=this.polynomial([...data],predict,3); |
|
break; |
|
case "polynomial4": |
|
this.algorithms[algo].data=this.polynomial([...data],predict,4); |
|
break; |
|
case "polynomial5": |
|
this.algorithms[algo].data=this.polynomial([...data],predict,5); |
|
break; |
|
} |
|
} |
|
for(let algo in this.algorithms){ |
|
const theData = this.algorithms[algo].data; |
|
let sum = 0; |
|
for(let i=0;i<this.first_length;i++){ |
|
const first = this.data[i][1]; |
|
const second = theData[i][1]; |
|
sum += Math.pow(second-first,2); |
|
} |
|
this.algorithms[algo].enheraf = sum; |
|
} |
|
let min_enheraf = -1; |
|
let final_result = {}; |
|
|
|
for(let algo in this.algorithms){ |
|
if(min_enheraf==-1) min_enheraf=this.algorithms[algo].enheraf; |
|
if(this.algorithms[algo].enheraf<min_enheraf){ |
|
min_enheraf = this.algorithms[algo].enheraf; |
|
final_result = {"algorithm":algo,data:this.algorithms[algo].data,enheraf:this.algorithms[algo].enheraf}; |
|
} |
|
} |
|
console.log(final_result) |
|
return final_result; |
|
} |
|
linear(data,predict){ |
|
const result = regression.linear(data); |
|
return this.predict(result,predict) |
|
} |
|
|
|
exponential(data,predict){ |
|
const result = regression.exponential(data); |
|
return this.predict(result,predict) |
|
} |
|
|
|
power(data,predict){ |
|
const result = regression.power(data); |
|
return this.predict(result,predict) |
|
} |
|
|
|
logarithmic(data,predict){ |
|
const result = regression.logarithmic(data); |
|
return this.predict(result,predict) |
|
} |
|
polynomial(data,predict,n=2){ |
|
if(n<2) n=2; |
|
if(n>5) n=5; |
|
const result = regression.polynomial(data,{order: n}); |
|
return this.predict(result,predict) |
|
} |
|
predict(rgr,predict){ |
|
console.log(rgr.string); |
|
const newData = [] |
|
for(let i=0;i<predict+this.first_length;i++){ |
|
const predicted = rgr.predict(i+1); |
|
// console.log(`predicted value for ${predicted[0]+first_length} is ${predicted[1]}`) |
|
newData.push(predicted); |
|
// this.data.push([predicted[0]+first_length,predicted[1]]) |
|
} |
|
return newData; |
|
// console.log(this.data.push) |
|
} |
|
} |
|
|
|
new Nemoodar({data,predict:5,option:"logarithmic",n:2}) |
|
|
|
// linear |
|
// exponential |
|
// power |
|
// logarithmic |
|
// polynomial option:"polynomial",n:2 (example) |
|
|
|
|