# Data Science: Implementing a Naive Bayesian Classifier using the Empirical Density.

--

*This story is part of my **Data Science** series.*

In my previous story (see here), I have provided an example implementation for a random forest based on a classification problem stemming from this set of data.

As one further approach for solving this problem I want to use a Naive Bayes classifier which implementation shall be the focus of this story.

In general, since the data set is quite large, the Naive Bayes approach is a good choice despite of its rather hard assumptions imposed on the data. You may find some more details on that in the theoretic outline here.

As a quick reminder, the Naive Bayes is based on the following relation of conditional probabilities:

`P(C | X) = P(C) / P(X) * P(X | C)`

where `C`

is the categorical outcome random variable and `X`

the feature random variable.

As we see, in order to find an estimate for the outcome to be `1`

based on the condition the feature to take value `x`

, we need an estimate for

`P(X = x | C = 1)`

A typical approach here is to assume each component of `X`

is driven by a Gaussian distribution. But because this is another hard assumption on the data, I will follow a different path of estimating the **empirical conditional density** of

`P(X | C = 0)`

and

P(X | C = 1)

This is easier than it sounds and can be accomplished by just computing a histogram on the sample of `X`

.

## Implementation:

The first thing one should do for this task is to normalize the data to the interval `[-1, 1]`

. Therefore, for each component of `X`

, I do compute a normalization factor by using `1 / (max(X) — min(X))`

. You can use various methods to obtain these values. For me, since I do store the data on a DuckDB this looks like so:

`pub fn compute_norm_factors() -> Vec<f64> {`

let con =…