///|
/// Online Logistic Regression using Stochastic Gradient Descent.
pub struct SGDLogisticRegression {
  weights : Array[Double]
  /// Learning rate
  alpha : Double
} derive(ToJson, FromJson)

///|
/// Create a new SGD Logistic Regression model.
pub fn SGDLogisticRegression::new(
  dim : Int,
  alpha? : Double = 0.01,
) -> SGDLogisticRegression {
  { weights: Array::make(dim, 0.0), alpha }
}

///|
/// Predict the probability (0 to 1) for a given feature vector.
pub fn SGDLogisticRegression::predict(
  self : SGDLogisticRegression,
  features : Array[Double],
) -> Double {
  let mut z = 0.0
  let dim = self.weights.length()
  for i in 0.. Unit {
  let pred = self.predict(features)
  let error = pred - label
  let dim = self.weights.length()
  for i in 0..