689 lines
257 KiB
Plaintext
689 lines
257 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "TQqrOdkY6nsy"
|
||
},
|
||
"source": [
|
||
"# **Klasyfikacja za pomocą naiwnej metody bayesowskiej z rozkładem normalnym**"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "SSaJsYOhz8h8"
|
||
},
|
||
"source": [
|
||
""
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "AlcfRFCPSXIj"
|
||
},
|
||
"source": [
|
||
"# **Twierdzenie Bayesa**\n",
|
||
""
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "rcpTnWjOh5dq"
|
||
},
|
||
"source": [
|
||
"P(A) -- oznacza prawdopodobieństwo a-priori wystąpienia klasy A (tj. prawdopodobieństwo, że dowolny przykład należy do klasy A)\n",
|
||
"\n",
|
||
"P(B|A) -- oznacza prawdopodobieństwo a-posteriori, że B należy do \n",
|
||
"klasy A\n",
|
||
"\n",
|
||
"P(B) -- znacza prawdopodobieństwo a-priori wystąpienia przykładu B "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "Yabcm4Rei2ue"
|
||
},
|
||
"source": [
|
||
""
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"id": "dsf6FnlgjiOL"
|
||
},
|
||
"source": [
|
||
"# Funkcja gęstości prawdopodobieństwa rozkładu normalnego \n",
|
||
""
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"metadata": {
|
||
"id": "v0oeHebytjNp"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"import numpy as np\n",
|
||
"import pandas as pd\n",
|
||
"import scipy.stats as stats\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"import seaborn as sns\n",
|
||
"from sklearn.model_selection import train_test_split\n",
|
||
"sns.set(style=\"whitegrid\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"metadata": {
|
||
"id": "fOYTA3VVtjNw"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"class NaiveBayesClassifier():\n",
|
||
" def calc_prior(self, features, target):\n",
|
||
" '''\n",
|
||
" Wyliczenie prawdopodobieństwa a priori\n",
|
||
" '''\n",
|
||
" self.prior = (features.groupby(target).apply(lambda x: len(x)) / self.rows).to_numpy()\n",
|
||
"\n",
|
||
" return self.prior\n",
|
||
" \n",
|
||
" def calc_statistics(self, features, target):\n",
|
||
" '''\n",
|
||
" Wyliczenie średnich i wariancji dla danych\n",
|
||
" ''' \n",
|
||
" self.mean = features.groupby(target).apply(np.mean).to_numpy()\n",
|
||
" self.var = features.groupby(target).apply(np.var).to_numpy()\n",
|
||
" \n",
|
||
" return self.mean, self.var\n",
|
||
" \n",
|
||
" def gaussian_density(self, class_idx, x): \n",
|
||
" '''\n",
|
||
" Wyliczenie prawdopodobieństwa z rozkładu normalnego \n",
|
||
" (1/√2pi*σ) * exp((-1/2)*((x-μ)^2)/(2*σ²))\n",
|
||
" μ -średnia\n",
|
||
" σ² - wariancja\n",
|
||
" σ - odchylenie standardowe\n",
|
||
" '''\n",
|
||
" mean = self.mean[class_idx]\n",
|
||
" var = self.var[class_idx]\n",
|
||
" numerator = np.exp((-1/2)*((x-mean)**2) / (2 * var))\n",
|
||
" denominator = np.sqrt(2 * np.pi * var)\n",
|
||
" prob = numerator / denominator\n",
|
||
" return prob\n",
|
||
" \n",
|
||
" def calc_posterior(self, x):\n",
|
||
" '''\n",
|
||
" Wyliczenie prawdopodobieństwa a posteriori i zwrócenie klasy, dla której prawdopodobieństwo jest najwyższe\n",
|
||
" '''\n",
|
||
" posteriors = []\n",
|
||
" posteriors_no_log = []\n",
|
||
"\n",
|
||
" # calculate posterior probability for each class\n",
|
||
" for i in range(self.count):\n",
|
||
" prior = np.log(self.prior[i]) # Do predykcji używane jest prawodopodobieństwo logarytmiczne\n",
|
||
" prior_no_log = self.prior[i] # Zwykłe prawdopodobieństwo liczymy, żeby zwrócić je z predykcjami\n",
|
||
"\n",
|
||
" conditional = np.sum(np.log(self.gaussian_density(i, x))) \n",
|
||
" conditional_no_log = np.prod(self.gaussian_density(i, x))\n",
|
||
"\n",
|
||
" posterior = prior + conditional\n",
|
||
" posterior_no_log = prior_no_log * conditional_no_log\n",
|
||
"\n",
|
||
" posteriors.append(posterior)\n",
|
||
" posteriors_no_log.append(posterior_no_log)\n",
|
||
"\n",
|
||
" # Zwracamy klasę o największym prawdopodobieństwie\n",
|
||
" return self.classes[np.argmax(posteriors)], np.max(posteriors_no_log)\n",
|
||
"\n",
|
||
" def fit(self, features, target):\n",
|
||
" '''\n",
|
||
" Główna metoda trenująca model\n",
|
||
" '''\n",
|
||
" self.classes = np.unique(target)\n",
|
||
" self.count = len(self.classes)\n",
|
||
" self.feature_nums = features.shape[1]\n",
|
||
" self.rows = features.shape[0]\n",
|
||
" \n",
|
||
" self.calc_statistics(features, target)\n",
|
||
" self.calc_prior(features, target)\n",
|
||
" \n",
|
||
" def predict(self, features):\n",
|
||
" '''\n",
|
||
" Predykcja wartości dla każdego wiersza\n",
|
||
" '''\n",
|
||
" preds = [self.calc_posterior(f) for f in features.to_numpy()]\n",
|
||
" return preds\n",
|
||
"\n",
|
||
" def accuracy(self, y_test, y_pred):\n",
|
||
" '''\n",
|
||
" Wyliczenie accuracy modelu\n",
|
||
" '''\n",
|
||
" accuracy = np.sum(y_test == y_pred) / len(y_test)\n",
|
||
" return accuracy\n",
|
||
"\n",
|
||
" def visualize(self, y_true, y_pred, target):\n",
|
||
" '''\n",
|
||
" Narysowanie wykresu porównującego rozkład klas prawdziwych i przewidzianych\n",
|
||
" '''\n",
|
||
" tr = pd.DataFrame(data=y_true, columns=[target])\n",
|
||
" pr = pd.DataFrame(data=y_pred, columns=[target])\n",
|
||
" \n",
|
||
" \n",
|
||
" fig, ax = plt.subplots(1, 2, sharex='col', sharey='row', figsize=(15,6))\n",
|
||
" \n",
|
||
" sns.countplot(x=target, data=tr, ax=ax[0], palette='viridis', alpha=0.7, hue=target, dodge=False)\n",
|
||
" sns.countplot(x=target, data=pr, ax=ax[1], palette='viridis', alpha=0.7, hue=target, dodge=False)\n",
|
||
" \n",
|
||
"\n",
|
||
" fig.suptitle('True vs Predicted Comparison', fontsize=20)\n",
|
||
"\n",
|
||
" ax[0].tick_params(labelsize=12)\n",
|
||
" ax[1].tick_params(labelsize=12)\n",
|
||
" ax[0].set_title(\"Prawdziwe wartości\", fontsize=18)\n",
|
||
" ax[1].set_title(\"Predyckje\", fontsize=18)\n",
|
||
" plt.show()\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"metadata": {
|
||
"colab": {
|
||
"base_uri": "https://localhost:8080/",
|
||
"height": 382
|
||
},
|
||
"id": "5-riUAGntjN2",
|
||
"outputId": "f87f047d-bc71-41ef-a43a-17b6f7cf84c3"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"(2948, 9) (2948,)\n",
|
||
"(328, 9) (328,)\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"# Preprocessing danych\n",
|
||
"\n",
|
||
"# Uzupełnienie pustych wartości w kolumnach\n",
|
||
"def fill_nan(df):\n",
|
||
" for index, column in enumerate(df.columns[:9]):\n",
|
||
" df[column] = df[column].fillna(df.groupby('Potability')[column].transform('mean'))\n",
|
||
" return df\n",
|
||
"\n",
|
||
"# Wczytywanie danych\n",
|
||
"df = pd.read_csv(\"water_potability.csv\")\n",
|
||
"\n",
|
||
"df = fill_nan(df)\n",
|
||
"\n",
|
||
"# Zrandomizowanie kolejności danych w datasecie\n",
|
||
"df = df.sample(frac=1, random_state=10).reset_index(drop=True)\n",
|
||
"\n",
|
||
"# Podział na atrybuty i przewidywane wartości\n",
|
||
"X, y = df.iloc[:, :-1], df.iloc[:, -1]\n",
|
||
"\n",
|
||
"# Normalizacja i skalowanie danych\n",
|
||
"from sklearn.preprocessing import StandardScaler\n",
|
||
"sc = StandardScaler()\n",
|
||
"X = sc.fit_transform(X.to_numpy())\n",
|
||
"X = pd.DataFrame(X, columns=df.columns.values.tolist()[:-1])\n",
|
||
"\n",
|
||
"# Podział na dane trenujące i testowe, z uwzględnieniem równego rozłożenia danych\n",
|
||
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, stratify=y, random_state=1)\n",
|
||
"\n",
|
||
"print(X_train.shape, y_train.shape)\n",
|
||
"print(X_test.shape, y_test.shape)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"metadata": {
|
||
"id": "O82SGzK6tjN5"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>ph</th>\n",
|
||
" <th>Hardness</th>\n",
|
||
" <th>Solids</th>\n",
|
||
" <th>Chloramines</th>\n",
|
||
" <th>Sulfate</th>\n",
|
||
" <th>Conductivity</th>\n",
|
||
" <th>Organic_carbon</th>\n",
|
||
" <th>Trihalomethanes</th>\n",
|
||
" <th>Turbidity</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>1022</th>\n",
|
||
" <td>0.003078</td>\n",
|
||
" <td>0.688791</td>\n",
|
||
" <td>0.846257</td>\n",
|
||
" <td>1.428934</td>\n",
|
||
" <td>-0.858263</td>\n",
|
||
" <td>0.002792</td>\n",
|
||
" <td>0.913790</td>\n",
|
||
" <td>0.232417</td>\n",
|
||
" <td>2.319505</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3191</th>\n",
|
||
" <td>-0.587365</td>\n",
|
||
" <td>0.223203</td>\n",
|
||
" <td>-0.731867</td>\n",
|
||
" <td>0.397503</td>\n",
|
||
" <td>0.759893</td>\n",
|
||
" <td>0.330607</td>\n",
|
||
" <td>0.094379</td>\n",
|
||
" <td>0.282563</td>\n",
|
||
" <td>0.235024</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>13</th>\n",
|
||
" <td>0.003078</td>\n",
|
||
" <td>-0.241037</td>\n",
|
||
" <td>0.773051</td>\n",
|
||
" <td>0.580019</td>\n",
|
||
" <td>1.334369</td>\n",
|
||
" <td>-0.049130</td>\n",
|
||
" <td>-1.121422</td>\n",
|
||
" <td>-0.200432</td>\n",
|
||
" <td>-0.946356</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2068</th>\n",
|
||
" <td>-2.176058</td>\n",
|
||
" <td>1.443006</td>\n",
|
||
" <td>-1.626771</td>\n",
|
||
" <td>-4.164610</td>\n",
|
||
" <td>-0.033706</td>\n",
|
||
" <td>-1.050763</td>\n",
|
||
" <td>-0.391328</td>\n",
|
||
" <td>-0.398649</td>\n",
|
||
" <td>-0.298341</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1484</th>\n",
|
||
" <td>0.213047</td>\n",
|
||
" <td>0.403036</td>\n",
|
||
" <td>-0.464729</td>\n",
|
||
" <td>0.070417</td>\n",
|
||
" <td>0.021560</td>\n",
|
||
" <td>-0.952776</td>\n",
|
||
" <td>-0.213330</td>\n",
|
||
" <td>0.111419</td>\n",
|
||
" <td>-0.235893</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>691</th>\n",
|
||
" <td>0.003078</td>\n",
|
||
" <td>1.199106</td>\n",
|
||
" <td>-0.003483</td>\n",
|
||
" <td>-0.670308</td>\n",
|
||
" <td>-0.069513</td>\n",
|
||
" <td>0.185754</td>\n",
|
||
" <td>-0.466010</td>\n",
|
||
" <td>0.031975</td>\n",
|
||
" <td>0.676276</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1283</th>\n",
|
||
" <td>-2.034004</td>\n",
|
||
" <td>-1.508135</td>\n",
|
||
" <td>0.255310</td>\n",
|
||
" <td>0.083839</td>\n",
|
||
" <td>-1.413707</td>\n",
|
||
" <td>0.694074</td>\n",
|
||
" <td>-1.110579</td>\n",
|
||
" <td>0.232996</td>\n",
|
||
" <td>2.544703</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2818</th>\n",
|
||
" <td>-0.702987</td>\n",
|
||
" <td>-0.575677</td>\n",
|
||
" <td>0.755056</td>\n",
|
||
" <td>0.664695</td>\n",
|
||
" <td>0.021560</td>\n",
|
||
" <td>-0.489334</td>\n",
|
||
" <td>0.371852</td>\n",
|
||
" <td>-2.272990</td>\n",
|
||
" <td>-1.764684</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1330</th>\n",
|
||
" <td>1.525943</td>\n",
|
||
" <td>0.497074</td>\n",
|
||
" <td>-0.714355</td>\n",
|
||
" <td>-1.024237</td>\n",
|
||
" <td>-1.022037</td>\n",
|
||
" <td>-0.327074</td>\n",
|
||
" <td>-1.107341</td>\n",
|
||
" <td>0.517432</td>\n",
|
||
" <td>-1.230528</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1926</th>\n",
|
||
" <td>-0.043558</td>\n",
|
||
" <td>-0.882359</td>\n",
|
||
" <td>-0.456141</td>\n",
|
||
" <td>-0.770271</td>\n",
|
||
" <td>0.795189</td>\n",
|
||
" <td>0.560306</td>\n",
|
||
" <td>-1.086081</td>\n",
|
||
" <td>-1.356820</td>\n",
|
||
" <td>0.172521</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>2948 rows × 9 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" ph Hardness Solids Chloramines Sulfate Conductivity \\\n",
|
||
"1022 0.003078 0.688791 0.846257 1.428934 -0.858263 0.002792 \n",
|
||
"3191 -0.587365 0.223203 -0.731867 0.397503 0.759893 0.330607 \n",
|
||
"13 0.003078 -0.241037 0.773051 0.580019 1.334369 -0.049130 \n",
|
||
"2068 -2.176058 1.443006 -1.626771 -4.164610 -0.033706 -1.050763 \n",
|
||
"1484 0.213047 0.403036 -0.464729 0.070417 0.021560 -0.952776 \n",
|
||
"... ... ... ... ... ... ... \n",
|
||
"691 0.003078 1.199106 -0.003483 -0.670308 -0.069513 0.185754 \n",
|
||
"1283 -2.034004 -1.508135 0.255310 0.083839 -1.413707 0.694074 \n",
|
||
"2818 -0.702987 -0.575677 0.755056 0.664695 0.021560 -0.489334 \n",
|
||
"1330 1.525943 0.497074 -0.714355 -1.024237 -1.022037 -0.327074 \n",
|
||
"1926 -0.043558 -0.882359 -0.456141 -0.770271 0.795189 0.560306 \n",
|
||
"\n",
|
||
" Organic_carbon Trihalomethanes Turbidity \n",
|
||
"1022 0.913790 0.232417 2.319505 \n",
|
||
"3191 0.094379 0.282563 0.235024 \n",
|
||
"13 -1.121422 -0.200432 -0.946356 \n",
|
||
"2068 -0.391328 -0.398649 -0.298341 \n",
|
||
"1484 -0.213330 0.111419 -0.235893 \n",
|
||
"... ... ... ... \n",
|
||
"691 -0.466010 0.031975 0.676276 \n",
|
||
"1283 -1.110579 0.232996 2.544703 \n",
|
||
"2818 0.371852 -2.272990 -1.764684 \n",
|
||
"1330 -1.107341 0.517432 -1.230528 \n",
|
||
"1926 -1.086081 -1.356820 0.172521 \n",
|
||
"\n",
|
||
"[2948 rows x 9 columns]"
|
||
]
|
||
},
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"X_train"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 5,
|
||
"metadata": {
|
||
"id": "a3jkTMFLtjN6"
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# Trenowanie modelu klasyfikatora\n",
|
||
"x = NaiveBayesClassifier()\n",
|
||
"x.fit(X_train, y_train)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"metadata": {
|
||
"id": "CoC22aNgtjN9"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0"
|
||
]
|
||
},
|
||
"execution_count": 6,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# Predykcja wartości dla danych testowych\n",
|
||
"predictions = x.predict(X_test)\n",
|
||
"\n",
|
||
"# Prawdopodobieństwa kolejnych predykcji\n",
|
||
"probabilities = [p[1] for p in predictions]\n",
|
||
"\n",
|
||
"# Przewidziana wartość\n",
|
||
"predictions = [p[0] for p in predictions]\n",
|
||
"predictions[0]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 7,
|
||
"metadata": {
|
||
"id": "JR06zodmtjN9"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0.6280487804878049"
|
||
]
|
||
},
|
||
"execution_count": 7,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# Wyliczenie accuracy modelu\n",
|
||
"x.accuracy(y_test, predictions)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 8,
|
||
"metadata": {
|
||
"id": "1jW0QPootjN_"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0.14084507042253522"
|
||
]
|
||
},
|
||
"execution_count": 8,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"from sklearn.metrics import f1_score\n",
|
||
"\n",
|
||
"f1_score(y_test, predictions)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 9,
|
||
"metadata": {
|
||
"id": "vEVogTmAtjOA"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0 0.609756\n",
|
||
"1 0.390244\n",
|
||
"Name: Potability, dtype: float64"
|
||
]
|
||
},
|
||
"execution_count": 9,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"y_test.value_counts(normalize=True)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 10,
|
||
"metadata": {
|
||
"id": "jCVOdBZytjOB"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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kmChSERERERERBIsFImIiIiIiEiChSIRERERERFJsFAkIiIiIiIiCRaKREREREREJMFCkYiIiIiIiCRYKBIREREREZEEC0UiIiIiIiKSYKFIREREREREEiwUiYiIiIiISIKFIhEREREREUmwUCQiIiIiIiIJFopEREREREQkwUKRiIiIiIiIJFgoEhERERERkQQLRSIiIiIiIpJgoUhEREREREQSLBSJiIiIiIhIgoUiERERERERSbBQJCIiIiIiIgkWikRERERERCTBQpGIiIiIiIgkWCgSERERERGRBAtFIiIiIiIikmChSERERERERBIsFImIiIiIiEiChSIRERERERFJsFAkIiIiIiIiCRaKREREREREJMFCkYiIiIiIiCRYKBIREREREZEEC0UiIiIiIiKSYKFIREREREREEiwUiYiIiIiISIKFIhEREREREUmwUCQiIiIiIiIJFopEREREREQkUS6FYkFBAaZPnw5fX1+4uLigR48eOH78uNgfFRUFf39/ODk5YcCAAUhOTpZsO23aNDRr1gze3t4IDQ0tj5CJiIiIiIiqrHIpFJ89e4aaNWti/fr1OHPmDMaPH48JEyYgKSkJGRkZGDt2LMaPH49Tp07BwcEBEydOFLcNDg7GnTt3cOzYMaxbtw4rV65EREREeYRNRERERERUJZVLoWhoaIjAwEDUqVMHmpqa8PX1RZ06dXDp0iUcOnQIDRo0QKdOnaCnp4fAwEDEx8cjISEBALBz506MGTMGpqamsLOzQ+/evREWFlYeYRMREREREVVJ2hVx0LS0NNy+fRv29vbYvHkz5HK52GdoaIh69erhxo0bsLS0REpKCho2bCj2N2zYEEeOHCnR8S5evFgqcVvVqAmByzqpDGmgCKkP7ld0GERUhZRWjrSsURtZWVmlsi+iV+Xm5uLMzesVHQZRlVLuhWJhYSEmT56MgIAA2NnZITc3FxYWFpIxxsbGyMnJQW5uLgDAxMRE7DMxMUFOTk6Jjung4AA9Pb13jj018zF+3LjvnfdDVJzJ/TujefPmFR0G0XspPz+/1IqeqqQ0c6SpqWkpRESkzNDQkPmR6C29bX4s18tjRUVFmDJlCnR0dDBz5kwAL9742dnZknE5OTkwMjKCoaEhAEj6s7OzYWRkVH5BExERERERVTHlVigKgoBvvvkGaWlpCA4Oho6ODgCg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S3P66adnz549GT9+fB544IFjClBXV5epU6cmScaNG5fvfve7ufTSS9Pe3t77ATft7e0ZNWpU79d1dXVHdY2mpqbexx+Lf777XhoaGo55Hzic2traXHjhhZWOAQNSuVzus9IzkBzrfDYjGQjMR/joPup8POKieOqpp2b9+vV59dVXs2fPnpx22mk5//zzM2zYEd+9ekRqamqSJD09PWloaMj48ePT2tqa2bNnJ0laW1szefLkPr0mAAxU/TWfARhajrgoJsmwYcMybdq0TJs27agv1NXV1fueie7u7pTL5QwfPjx//etfU19fn4kTJ6atrS3f//73M2vWrN7bTRctWpR169alqakpe/fuzcMPP5wf/OAHR319ABisjmU+A8ChHFVRPBbr1q3L/fff3/v9xo0bs2zZspx11llZvXp13nnnnYwePTqXXHJJVq9e3XvejTfemLvuuitz587NiSeemOuuu85/jQEAAHAc9VtRbGlpSUtLyyGPff7znz/s40aOHJlVq1Zl1apVxysaAAAA/8YbGAAAAChQFAEAAChQFAEAAChQFAEAAChQFAEAAChQFAEAAChQFAEAAChQFAEAAChQFAEAAChQFAEAAChQFAEAAChQFAEAAChQFAEAAChQFAEAAChQFAEAAChQFAEAACg4odIBgOr3f+VSyt2dlY7BIDVq+IjUj6qtdAwA4N8oisCHKnd35t6tj1U6BoPU8hmLUl/pEABAgVtPAQAAKFAUAQAAKFAUAQAAKFAUAQAAKFAUAQAAKFAUAQAAKFAUAQAAKFAUAQAAKFAUAQAAKFAUAQAAKFAUAQAAKFAUAQAAKFAUAQAAKFAUAQAAKFAUAQAAKFAUAQAAKFAUAQAAKFAUAQAAKFAUAQAAKFAUAQAAKFAUAQAAKFAUAQAAKOi3ovjQQw/l6quvTlNTU2699dbCsT/84Q+56qqrcsEFF+Taa6/N7t27e4/t378/t912Wz71qU9l9uzZ+eUvf9lfkQEAAIakfiuKEyZMyNKlS/PFL36xsP7OO+9k2bJlWb58ef74xz+mqakp3/rWt3qPr1mzJm+++Waee+65/OpXv8rPfvazvPDCC/0VGwAAYMjpt6J45ZVX5oorrsiYMWMK688880ymTJmS+fPnZ9SoUWlpaUlra2tef/31JMljjz2WpUuXpqGhIZMmTco111yT9evX91dsAACAIeeESgfYsWNHzj333N7va2trc+aZZ2bnzp0ZN25c3n777TQ2NvYeb2xszLPPPntU19i+fXufZB136ifS1tbWJ3vBoZRKpWx7Y0elYxxk/P+c7rnPcVMqlbLttZ2VjjFkmZEMBNU6H2Ewq3hRLJVKGTt2bGFt9OjR6ejoSKlUSpLU19f3Hquvr09HR8dRXaOpqSmjRo065qz/fPe9NDQ0HPM+cDi1tbW58MILKx3jIHtLbZ77HDd99bwvl8t9VnqGEjOSgaBa5yMMBB91Plb8U09ra2vT3t5eWOvo6EhdXV1qa2uTpHC8vb09dXV1/ZoRAABgKKl4UZwyZUpaW1t7vy+VSvn73/+eyZMnp6GhIePHjy8cb21tzeTJkysRFQAAYEjot6LY1dWVcrmcAwcOpLu7O+VyOV1dXZk3b1527NiRp556KuVyOWvXrs25556bSZMmJUkWLVqUdevWpa2tLa+//noefvjhLF68uL9iAwAADDn9VhTXrVuX888/Pz/96U+zcePGnH/++Vm3bl3Gjh2bNWvW5J577snMmTPz6quvZvXq1b2Pu/HGG3PGGWdk7ty5ufbaa/P1r389c+bM6a/YAAAAQ06/fZhNS0tLWlpaDnnskksuye9+97tDHhs5cmRWrVqVVatWHc94AAAA/H8Vf48iAAAA1UVRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoEBRBAAAoKBqiuK1116bqVOnZvr06Zk+fXo++9nP9h7btGlT5s6dm2nTpmXp0qXZt29fBZMCAAAMblVTFJPkzjvvzCuvvJJXXnklTz31VJJkx44dufPOO/PDH/4wW7ZsyUknnZS77767wkkBAAAGr6oqioeyadOmNDc3Z+bMmamrq8vy5cvzzDPPpL29vdLRAAAABqWqKoo//vGPc9FFF+XLX/5yXnrppST/ekXx3HPP7T3nzDPPzIgRI7Jr164KpQQAABjcTqh0gA+sWLEikyZNysiRI/PEE0/k+uuvz4YNG1IqlVJfX184d/To0eno6Djivbdv394nGced+om0tbX1yV5wKKVSKdve2FHpGAcZ/z+ne+5z3JRKpWx7bWelYwxZZiQDQbXORxjMqqYoXnDBBb1fL168OI8//nief/751NbWHnSbaXt7e+rq6o5476ampowaNeqYM/7z3ffS0NBwzPvA4dTW1ubCCy+sdIyD7C21ee5z3PTV875cLvdZ6RlKzEgGgmqdjzAQfNT5WFW3nv67mpqa9PT0ZMqUKWltbe1df+utt9LZ2ZmJEydWLhwAAMAgVhVF8b333svmzZtTLpfT1dWVjRs3ZuvWrbn00kuzYMGCPPfcc9m6dWtKpVLuvffezJs3L6NHj650bAAAgEGpKm497erqyk9+8pO88cYbGT58eM4+++ysXbs2Z599dpLk7rvvzooVK7Jv375cfPHFWbVqVYUTAwAADF5VURTHjh2bRx999LDHFyxYkAULFvRjIgAAgKGrKm49BQAAoHooigAAABQoigAAABQoigAAABQoigAAABQoigAAABQoigAAABQoigAAABQoigAAABQoigAAABQoigAAABQoigAAABQoigAAABQoigAAABQoigAAABQoigAAABQoigAAABQoigAAABQoigAAABQoigAAABQoigAAABQoigAAABQoigAAABQoigAAABQoigAAABQoigAAABQoigAAABQoigAAABQoigAAABScUOkAAAAwEP1fuZRyd2elYzBIjRo+IvWjait2fUURAAA+gnJ3Z+7d+lilYzBILZ+xKPUVvL5bTwEAAChQFAEAAChQFAEAAChQFAEAAChQFAEAAChQFAEAAChQFAEAAChQFAEAAChQFAEAACgYEEVx3759ueGGGzJt2rTMnTs3mzZtqnQkAACAQeuESgc4EitXrsyIESOyZcuWvPbaa1myZEkaGxszZcqUSkcDAAAYdKq+KJZKpTz99NPZtGlT6urqMmPGjDQ3N2fDhg1ZsWLFf31sT09PkmT//v19kqWrszO1o6r+V8YA1tXZmXK5XOkYB+na35namhGVjsEg1bW/M+Xhx/68/+Bv/Qd/+/nvzEgGEvORoajS87Hq/6Lv2rUrw4YNy1lnndW71tjYmJdffvlDH9vZ2Zkk+dvf/tZneT7/qbM+/CT4iP73rV3537cqneLQrqw9t9IRGKR2v/5mdvfhfp2dnTnxxBP7cMfByYxkIDEfGYoqPR+rviiWSqXU19cX1urr69PR0fGhj62rq8s555yTESNGpKam5nhFBKAK9PT0pLOzM3V1dZWOMiCYkQBDw0edj1VfFGtra9Pe3l5Ya29vP6IfdNiwYQeVTAAGL68kHjkzEmDo+Cjzseo/9XTixInp7u7Orl27etdaW1szefLkyoUCAAAYxKq+KNbW1mbevHm57777UiqVsm3btjz77LNZuHBhpaMBAAAMSjU9A+Dj4fbt25fbb789L774YsaMGZObb745CxYsqHQsAACAQWlAFEUAAAD6T9XfegoAAED/UhQBAAAoUBQBAAAoUBQBAAAoUBTpc/v27csNN9yQadOmZe7cudm0aVOlI8Fx99BDD+Xqq69OU1NTbr311krHAaqUGclQZEYOTCdUOgCDz8qVKzNixIhs2bIlr732WpYsWZLGxsZMmTKl0tHguJkwYUKWLl2azZs3p1wuVzoOUKXMSIYiM3Jg8ooifapUKuXpp5/O8uXLU1dXlxkzZqS5uTkbNmyodDQ4rq688spcccUVGTNmTKWjAFXKjGSoMiMHJkWRPrVr164MGzYsZ511Vu9aY2Njdu7cWcFUAFB5ZiQwkCiK9KlSqZT6+vrCWn19fTo6OiqUCACqgxkJDCSKIn2qtrY27e3thbX29vbU1dVVKBEAVAczEhhIFEX61MSJE9Pd3Z1du3b1rrW2tmby5MmVCwUAVcCMBAYSRZE+VVtbm3nz5uW+++5LqVTKtm3b8uyzz2bhwoWVjgbHVVdXV8rlcg4cOJDu7u6Uy+V0dXVVOhZQRcxIhiozcmCq6enp6al0CAaXffv25fbbb8+LL76YMWPG5Oabb86CBQsqHQuOqzVr1uT+++8vrC1btiwtLS0VSgRUIzOSociMHJgURQAAAArcegoAAECBoggAAECBoggAAECBoggAAECBoggAAECBoggAAECBogiDzEsvvZQ5c+Yc9vidd96ZtWvXHvLcz33uc3nppZeOe0YA6G/mIxydEyodAIaS5ubm7N27N8OHD89JJ52Uyy+/PHfccUfq6uoO+5g1a9bkzTffzI9+9KM+ybBy5crDHnviiSeO23UB4HDMR6g+XlGEfvbAAw/klVdeyfr16/OXv/wl69atq3QkAKg48xGqi6IIFXLKKafksssuy44dO/KPf/wj119/fWbNmpV58+blt7/9bZLkhRdeyIMPPpgnn3wy06dPzxe+8IUkyaOPPpr58+dn+vTp+cxnPpPf/OY3B+3/wAMP5KKLLkpzc3M2btzYu37rrbfmnnvuOWSm5ubmvPjii4e87pNPPpmrr766cP4vfvGLLF26tK9+JQBgPkKVcOspVMiePXvywgsvZN68ebn55pszefLkbN68OW+88Ua++tWv5owzzsicOXOyZMmSg25x+fjHP54HH3wwZ5xxRl5++eVcd911mTp1aj75yU8mSfbu3Zt33303mzdvzp/+9Kd84xvfSFNTU84+++wjynao6+7fvz933XVXXn/99UyaNClJsnHjxnzzm9/s498MAEOZ+QjVwSuK0M9uuOGGzJgxI1/5ylcyc+bMfOlLX8q2bduyYsWKjBo1Kuedd16uueaabNiw4bB7fPrTn86ZZ56ZmpqazJo1K7Nnz87WrVsL5yxfvjwjR47MrFmzcvnll+fJJ588ptwjR47M/Pnze//1dceOHdm9e3fmzp17TPsCQGI+QrXxiiL0s7Vr1+aSSy7p/f7Pf/5zGhoaMnr06N61008/Pdu3bz/sHs8//3zWrl2bXbt25cCBA3n//fdzzjnn9B4/+eSTU1tbW9jv7bffPubsixcvzre//e3cdNNN2bBhQ+bPn5+RI0ce874AYD5CdfGKIlTYhAkT0tbWlvb29t61PXv25JRTTkmS1NTUFM7fv39/brzxxnzta1/Lli1bsnXr1syZMyc9PT2957z33nsplUqF/SZMmHBUuf7zukkybdq0jBgxIlu3bs3jjz/e+54QAOhr5iNUlqIIFXbaaadl+vTpWb16dcrlclpbW/PII49kwYIFSf71fovdu3fnwIEDSf41CPfv35+xY8fmhBNOyPPPP58tW7YctO+aNWuyf//+bN26Nb///e9z1VVXHVWu/7zuBxYtWpSVK1dm+PDhmTFjxkf8qQHgvzMfobIURagCq1evzu7du3PZZZdl2bJlaWlpyezZs5Okd4BddNFFWbx4cUaPHp077rgjN910U2bOnJnHH388zc3Nhf3GjRuXk08+OZdddllWrFiR733ve71vsD9S/3ndDyxcuDA7duzIwoULj+VHBoAPZT5C5dT0/Pvr8QAf4v3338/FF1+c9evXZ+LEiZWOAwBVwXxksPGKInBUfv3rX2fq1KmGIAD8G/ORwcanngJHrLm5OT09PVm7dm2lowBA1TAfGYzcegoAAECBW08BAAAoUBQBAAAoUBQBAAAoUBQBAAAoUBQBAAAoUBQBAAAo+H8r2GFjWf2giQAAAABJRU5ErkJggg==\n",
|
||
"text/plain": [
|
||
"<Figure size 1080x432 with 2 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"x.visualize(y_test, predictions, 'Potability')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 11,
|
||
"metadata": {
|
||
"id": "aw8Tefprhjnn"
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/usr/lib/python3/dist-packages/matplotlib/cbook/__init__.py:1377: FutureWarning: Support for multi-dimensional indexing (e.g. `obj[:, None]`) is deprecated and will be removed in a future version. Convert to a numpy array before indexing instead.\n",
|
||
" x[:, None]\n",
|
||
"/usr/lib/python3/dist-packages/matplotlib/axes/_base.py:237: FutureWarning: Support for multi-dimensional indexing (e.g. `obj[:, None]`) is deprecated and will be removed in a future version. Convert to a numpy array before indexing instead.\n",
|
||
" x = x[:, np.newaxis]\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 432x288 with 6 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"ph_val = X_test[\"ph\"]\n",
|
||
"sulfate_val = X_test[\"Sulfate\"]\n",
|
||
"hard_val = X_test[\"Hardness\"]\n",
|
||
"carb_val = X_test[\"Organic_carbon\"]\n",
|
||
"turb_val = X_test[\"Turbidity\"]\n",
|
||
"ch_val = X_test[\"Chloramines\"]\n",
|
||
"\n",
|
||
"\n",
|
||
"figure, axes = plt.subplots(nrows=3, ncols=2)\n",
|
||
"\n",
|
||
"axes[0, 0].plot(ph_val, predictions, 'bo')\n",
|
||
"axes[0, 0].set_title(\"pH\")\n",
|
||
"\n",
|
||
"axes[0, 1].plot(sulfate_val, predictions, 'bo')\n",
|
||
"axes[0, 1].set_title(\"Sulfate\")\n",
|
||
"\n",
|
||
"axes[1, 0].plot(hard_val, predictions, 'bo')\n",
|
||
"axes[1, 0].set_title(\"Hardness\")\n",
|
||
"\n",
|
||
"axes[1, 1].plot(carb_val, predictions, 'bo')\n",
|
||
"axes[1, 1].set_title(\"Organic carbon\")\n",
|
||
"\n",
|
||
"axes[2, 0].plot(turb_val, predictions, 'bo')\n",
|
||
"axes[2, 0].set_title(\"Turbidity\")\n",
|
||
"\n",
|
||
"axes[2, 1].plot(ch_val, predictions, 'bo')\n",
|
||
"axes[2, 1].set_title(\"Chloramines\")\n",
|
||
"\n",
|
||
"plt.show()"
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"colab": {
|
||
"collapsed_sections": [],
|
||
"name": "naive_bayes.ipynb",
|
||
"provenance": []
|
||
},
|
||
"kernelspec": {
|
||
"display_name": "Python 3",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.7.3"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 4
|
||
}
|