export function linearRegression(x, y) {
var lr = {};
var n = y.length;
var sum_x = 0;
var sum_y = 0;
var sum_xy = 0;
var sum_xx = 0;
var sum_yy = 0;
for (var i = 0; i < y.length; i++) {
sum_x += x[i];
sum_y += y[i];
sum_xy += (x[i] * y[i]);
sum_xx += (x[i] * x[i]);
sum_yy += (y[i] * y[i]);
}
lr['sl'] = (n * sum_xy - sum_x * sum_y) / (n * sum_xx - sum_x * sum_x);
lr['off'] = (sum_y - lr.sl * sum_x) / n;
lr['r2'] = Math.pow((n * sum_xy - sum_x * sum_y) / Math.sqrt((n * sum_xx - sum_x * sum_x) * (n * sum_yy - sum_y * sum_y)), 2);
return lr;
}
export function renderModel(model_id, key_metric, range) {
Plotly.newPlot(
"model_" + model_id,
[{
type: "bar",
orientation: "h",
x: [0],
marker: {
color: "rgb(0, 180, 255)",
},
hoverinfo: "none",
}],
{
xaxis: {
range: range,
showgrid: false,
zeroline: false,
visible: false,
},
yaxis: {
showgrid: false,
zeroline: false,
visible: false,
},
paper_bgcolor: 'rgba(0,0,0,0)',
plot_bgcolor: 'rgba(0,0,0,0)',
margin: { l: 0, r: 0, b: 0, t: 0, pad: 0 },
scrollZoom: false,
dragmode: false,
},
{ displayModeBar: false, responsive: true }
)
Plotly.animate(
"model_" + model_id,
{
data: [{ x: [key_metric] }],
traces: [0],
layout: {}
}, {
transition: {
duration: 500,
easing: 'cubic-in-out'
},
frame: {
duration: 500
}
}
)
}
export function renderDistribution(feature_name, samples, dip) {
Plotly.newPlot(
feature_name + '_distribution',
[{
type: "histogram",
name: feature_name,
x: samples,
marker: {
color: "rgba(0, 180, 255, 0.7)",
line: {
color: "rgba(0, 180, 255, 1)",
width: 1
},
},
}],
{
title: {
font: { family: "Roboto, \"Microsoft Sans Serif\", \"Helvetica Neue\", Arial, sans-serif" },
text: "Distribution: dip = " + (Math.round(dip * 100) / 100).toString(),
},
hoverlabel: {
color: "rgba(0, 180, 255, 0.7)",
bordercolor: "rgba(255, 255, 255, 1)",
font: {
color: "rgba(255, 255, 255, 1)",
family: "Roboto, \"Microsoft Sans Serif\", \"Helvetica Neue\", Arial, sans-serif",
size: 12
},
},
paper_bgcolor: 'rgba(0,0,0,0)',
plot_bgcolor: 'rgba(0,0,0,0)',
yaxis: { automargin: true },
xaxis: { automargin: true },
margin: { l: 0, r: 0, b: 0, t: 50, pad: 0 },
scrollZoom: false,
dragmode: false,
},
{ displayModeBar: false, responsive: true }
);
}
export function renderOutliers(feature_name, samples, stddev) {
Plotly.newPlot(
feature_name + '_outliers',
[{
type: "box",
jitter: 0.3,
pointpos: -1.8,
boxpoints: 'all',
name: feature_name,
y: samples,
marker: {
color: "rgba(0, 180, 255, 0.3)",
line: {
color: "rgba(0, 180, 255, 0.5)",
width: 1
},
},
}],
{
title: {
font: { family: "Roboto, \"Microsoft Sans Serif\", \"Helvetica Neue\", Arial, sans-serif" },
text: "Outliers: σ = " + (Math.round(stddev * 100) / 100).toString(),
},
hoverlabel: {
bgcolor: "rgba(0, 180, 255, 0.7)",
bordercolor: "rgba(255, 255, 255, 1)",
font: {
color: "rgba(255, 255, 255, 1)",
family: "Roboto, \"Microsoft Sans Serif\", \"Helvetica Neue\", Arial, sans-serif",
size: 12
},
},
paper_bgcolor: 'rgba(0,0,0,0)',
plot_bgcolor: 'rgba(0,0,0,0)',
yaxis: { automargin: true },
xaxis: { automargin: true },
margin: { l: 0, r: 0, b: 0, t: 50, pad: 0 },
scrollZoom: false,
dragmode: false,
},
{ displayModeBar: false, responsive: true }
);
}
export function renderCorrelation(feature_name, other_name, samples, y) {
var lr = linearRegression(samples, y);
var fit_from = Math.min(...samples);
var fit_to = Math.max(...samples);
Plotly.newPlot(
feature_name + '_correlation_' + other_name,
[{
type: "scatter",
mode: "markers",
name: feature_name,
x: samples,
y: y,
marker: {
color: "rgba(0, 180, 255, 0.4)",
line: {
color: "rgba(0, 180, 255, 0.6)",
width: 1
},
},
}, {
type: 'scatter',
mode: 'lines',
name: "R2 = " + (Math.round(lr.r2 * 100) / 100).toString(),
x: [fit_from, fit_to],
y: [fit_from * lr.sl + lr.off, fit_to * lr.sl + lr.off],
marker: {
color: "rgba(255, 232, 20, 1)",
line: {
color: "rgba(255, 232, 20, 1)",
width: 2
},
},
}],
{
font: { family: "Roboto, \"Microsoft Sans Serif\", \"Helvetica Neue\", Arial, sans-serif" },
title: "Correlation: R2 = " + (Math.round(lr.r2 * 100) / 100).toString(),
hoverlabel: {
bgcolor: "rgba(0, 180, 255, 0.7)",
bordercolor: "rgba(255, 255, 255, 1)",
font: {
color: "rgba(255, 255, 255, 1)",
family: "Roboto, \"Microsoft Sans Serif\", \"Helvetica Neue\", Arial, sans-serif",
size: 12
},
},
paper_bgcolor: 'rgba(0,0,0,0)',
plot_bgcolor: 'rgba(0,0,0,0)',
yaxis: { automargin: true },
xaxis: { automargin: true },
margin: { l: 0, r: 0, b: 0, t: 50, pad: 0 },
showlegend: false,
scrollZoom: false,
dragmode: false,
},
{ displayModeBar: false, responsive: true }
);
}
export function renderHyperparam(id, name, title, param, best_index, mean, std) {
console.log("renderHyperparam", id, name, title, param, best_index, mean, std);
Plotly.newPlot(
id,
[{
type: "scatter",
mode: "markers",
name: name,
x: param,
y: mean,
error_y: {
type: 'data',
array: std,
visible: true,
color: "rgba(0, 180, 255, 0.05)"
},
marker: {
color: "rgba(0, 180, 255, 0.4)",
line: {
color: "rgba(0, 180, 255, 0.6)",
width: 1
},
},
},
{
type: "scatter",
mode: "markers",
name: name,
x: [param[best_index]],
y: [mean[best_index]],
error_y: {
type: 'data',
type: 'constant',
value: std[best_index],
visible: true,
color: "rgba(255, 43, 158, 0.5)"
},
marker: {
color: "rgba(255, 43, 158, 0.7)",
line: {
color: "rgba(255, 43, 158, 1.0)",
width: 1
},
},
}],
{
font: { family: "Roboto, \"Microsoft Sans Serif\", \"Helvetica Neue\", Arial, sans-serif" },
title: title,
hoverlabel: {
bgcolor: "rgba(0, 180, 255, 0.7)",
bordercolor: "rgba(255, 255, 255, 1)",
font: {
color: "rgba(255, 255, 255, 1)",
family: "Roboto, \"Microsoft Sans Serif\", \"Helvetica Neue\", Arial, sans-serif",
size: 12
},
},
paper_bgcolor: 'rgba(0,0,0,0)',
plot_bgcolor: 'rgba(0,0,0,0)',
yaxis: { automargin: true },
xaxis: { automargin: true },
margin: { l: 0, r: 0, b: 0, t: 50, pad: 0 },
showlegend: false,
scrollZoom: false,
dragmode: false,
},
{ displayModeBar: false, responsive: true }
);
}