UNPKG

@ai-on-browser/data-analysis-models

Version:

Data analysis model package without any dependencies

51 lines (47 loc) 1.23 kB
/** * Gasser–Müller kernel estimator */ export default class GasserMuller { // https://en.wikipedia.org/wiki/Kernel_regression // Kernel Smoothers: An Overview of Curve Estimators for the First Graduate Course in Nonparametric Statistics /** * @param {number} h Smoothing parameter for the kernel */ constructor(h) { this._h = h this._f = (x, s0, s1) => { return this._cdf((x - s0) / this._h) - this._cdf((x - s1) / this._h) } } _cdf(x) { return 1 / (1 + Math.exp(-1.7 * x)) } /** * Fit model. * @param {Array<Array<number>>} x Training data * @param {Array<Array<number>>} y Target values */ fit(x, y) { const d = x.map((v, i) => [v[0], y[i]]) d.sort((a, b) => a[0] - b[0]) this._x = d.map(v => v[0]) this._s = this._x.slice(1).map((v, i) => (v + this._x[i]) / 2) this._s.unshift(-Infinity) this._s.push(Infinity) this._y = d.map(v => v[1]) } /** * Returns predicted values. * @param {Array<Array<number>>} x Sample data * @returns {number[]} Predicted values */ predict(x) { return x.map(v => { let m = 0 for (let i = 0; i < this._s.length - 1; i++) { m += this._f(v[0], this._s[i], this._s[i + 1]) * this._y[i][0] } return m / this._h }) } }