StackGenVis: Alignment of Data, Algorithms, and Models for Stacking Ensemble Learning Using Performance Metrics https://doi.org/10.1109/TVCG.2020.3030352
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.
StackGenVis/frontend/node_modules/circumcenter/circumcenter.js

68 lines
1.3 KiB

4 years ago
"use strict"
var dup = require("dup")
var solve = require("robust-linear-solve")
function dot(a, b) {
var s = 0.0
var d = a.length
for(var i=0; i<d; ++i) {
s += a[i] * b[i]
}
return s
}
function barycentricCircumcenter(points) {
var N = points.length
if(N === 0) {
return []
}
var D = points[0].length
var A = dup([points.length+1, points.length+1], 1.0)
var b = dup([points.length+1], 1.0)
A[N][N] = 0.0
for(var i=0; i<N; ++i) {
for(var j=0; j<=i; ++j) {
A[j][i] = A[i][j] = 2.0 * dot(points[i], points[j])
}
b[i] = dot(points[i], points[i])
}
var x = solve(A, b)
var denom = 0.0
var h = x[N+1]
for(var i=0; i<h.length; ++i) {
denom += h[i]
}
var y = new Array(N)
for(var i=0; i<N; ++i) {
var h = x[i]
var numer = 0.0
for(var j=0; j<h.length; ++j) {
numer += h[j]
}
y[i] = numer / denom
}
return y
}
function circumcenter(points) {
if(points.length === 0) {
return []
}
var D = points[0].length
var result = dup([D])
var weights = barycentricCircumcenter(points)
for(var i=0; i<points.length; ++i) {
for(var j=0; j<D; ++j) {
result[j] += points[i][j] * weights[i]
}
}
return result
}
circumcenter.barycenetric = barycentricCircumcenter
module.exports = circumcenter