====================
Gaussian Naive Bayes
====================
Gaussian Naive Bayes classifies data according to how well it aligns with the Gaussian distributions of several different classes.
The probability that some feature :math:`x_{i}` in the feature vector :math:`i` belongs to class :math:`c`, :math:`p(x_{i}|c)`, is given by
.. math::
p(x_{i}|c)=\frac{1}{\sqrt{2\pi\sigma_{x,c}^{2}}}\exp \left(-\frac{(x_{i}-\mu_{x,c})^{2}}{2\sigma_{x,c}^{2}} \right)
For each vector, the Gaussian Naive Bayes classifier chooses the class :math:`c` which the vector most likely belongs to, given by
.. math::
\argmax_c p(c)\prod_{i}p(x_{i}|c)
See Chapter 10 in :cite:`barber2012bayesian` for a detailed introduction.
-------
Example
-------
Imagine we have files with training and test data. We create CDenseFeatures (here 64 bit floats aka RealFeatures) and :sgclass:`CMulticlassLabels` as
.. sgexample:: gaussian_naive_bayes.sg:create_features
We create an instance of the :sgclass:`CGaussianNaiveBayes` classifier, passing it training data and the label.
.. sgexample:: gaussian_naive_bayes.sg:create_instance
Then we run the train Gaussian Naive Bayes algorithm and apply it to the test data, which here gives `CMulticlassLabels`
.. sgexample:: gaussian_naive_bayes.sg:train_and_apply
----------
References
----------
:wiki:`Naive_Bayes_classifier#Gaussian_naive_Bayes`