@ai-on-browser/data-analysis-models
Version:
Data analysis model package without any dependencies
43 lines (40 loc) • 853 B
JavaScript
/**
* Kolmogorov–Zurbenko filter
*/
export default class KolmogorovZurbenkoFilter {
// https://en.wikipedia.org/wiki/Kolmogorov%E2%80%93Zurbenko_filter
/**
* @param {number} m Window size
* @param {number} k Iteration count of a moving average
*/
constructor(m, k) {
this._m = m
this._k = k
}
_ma(x) {
const p = []
const n = x.length
for (let i = 0; i < x.length; i++) {
const t1 = i - Math.floor((this._m - 1) / 2)
const t2 = t1 + this._m
p[i] = 0
for (let k = Math.max(0, t1); k < Math.min(n, t2); k++) {
p[i] += x[k]
}
p[i] /= Math.min(n, t2) - Math.max(0, t1)
}
return p
}
/**
* Returns predicted values.
* @param {number[]} x Training data
* @returns {number[]} Predicted values
*/
predict(x) {
let p = x
for (let i = 0; i < this._k; i++) {
p = this._ma(p)
}
return p
}
}