yobx.sklearn.naive_bayes.nb#

yobx.sklearn.naive_bayes.nb.sklearn_bernoulli_nb(g: GraphBuilderExtendedProtocol, sts: Dict, outputs: List[str], estimator: BernoulliNB, X: str, name: str = 'bernoulli_nb') Tuple[str, str][source]#

Converts a sklearn.naive_bayes.BernoulliNB into ONNX.

The joint log-likelihood follows the sklearn formula:

neg_prob  = log1p(-exp(feature_log_prob_))   (C x F)  — precomputed
diff      = feature_log_prob_ - neg_prob       (C x F)  — precomputed
neg_sum   = Σ_f neg_prob                       (C,)     — precomputed

X_bin     = (X > binarize).astype(dtype)       if binarize is not None
jll       = X_bin @ diffᵀ  +  class_log_prior_  +  neg_sum   (N x C)

probabilities ← Softmax(jll, axis=1) label ← classes_[ArgMax(jll, axis=1)]

Parameters:
  • g – the graph builder to add nodes to

  • sts – shapes defined by scikit-learn

  • outputs – desired names (label, probabilities)

  • estimator – a fitted BernoulliNB

  • X – input tensor name

  • name – prefix for added node names

Returns:

tuple (label_result_name, proba_result_name)

yobx.sklearn.naive_bayes.nb.sklearn_gaussian_nb(g: GraphBuilderExtendedProtocol, sts: Dict, outputs: List[str], estimator: GaussianNB, X: str, name: str = 'gaussian_nb') Tuple[str, str][source]#

Converts a sklearn.naive_bayes.GaussianNB into ONNX.

The joint log-likelihood for class c is:

jll[n, c] = log(prior[c])
            - 0.5 * Σ_f  log(2π·var[c,f])
            - 0.5 * Σ_f  (x[n,f] - θ[c,f])² / var[c,f]

Rewritten as a quadratic form to avoid per-class broadcast:

A  = -0.5 / var_          (C x F)
B  = θ_ / var_            (C x F)
K  = log(prior)
     - 0.5 · Σ_f log(2π·var)
     - 0.5 · Σ_f θ²/var   (C,)

jll = (X² @ Aᵀ) + (X @ Bᵀ) + K    (N x C)

probabilities ← Softmax(jll, axis=1) label ← classes_[ArgMax(jll, axis=1)]

Parameters:
  • g – the graph builder to add nodes to

  • sts – shapes defined by scikit-learn

  • outputs – desired names (label, probabilities)

  • estimator – a fitted GaussianNB

  • X – input tensor name

  • name – prefix for added node names

Returns:

tuple (label_result_name, proba_result_name)

yobx.sklearn.naive_bayes.nb.sklearn_multinomial_nb(g: GraphBuilderExtendedProtocol, sts: Dict, outputs: List[str], estimator: MultinomialNB | ComplementNB, X: str, name: str = 'multinomial_nb') Tuple[str, str][source]#

Converts a sklearn.naive_bayes.MultinomialNB or sklearn.naive_bayes.ComplementNB into ONNX.

MultinomialNB:

jll = X @ feature_log_prob_ᵀ + class_log_prior_    (N x C)

ComplementNB (multi-class, no class_log_prior_ added):

jll = X @ feature_log_prob_ᵀ                       (N x C)

probabilities ← Softmax(jll, axis=1) label ← classes_[ArgMax(jll, axis=1)]

Parameters:
  • g – the graph builder to add nodes to

  • sts – shapes defined by scikit-learn

  • outputs – desired names (label, probabilities)

  • estimator – a fitted MultinomialNB or ComplementNB

  • X – input tensor name

  • name – prefix for added node names

Returns:

tuple (label_result_name, proba_result_name)