logistic_regression = (data, x, y, options) => {
options = Object.assign({
learning_rate: 1 / data.length,
beta0: new Array(data[0][x].length).fill(1),
maxiter: 1000
}, options);
const results = gradient_ascent((beta) => bernoulli_log_likelihood(data, x, y, beta), (beta) => bernoulli_log_likelihood_prime(data, x, y, beta), options.beta0, options.maxiter, options.learning_rate);
const predict = (x) => {
return inv_logit(dot(x, results.x));
}
const predictions = data.map((d) => {
return predict(d[x]);
});
return ({
beta: results.x,
predictions: predictions,
gradient_ascent: results,
predict: predict
});
return results;
}