Notebook ini merangkum teori dan derivasi dari pengklasifikasi bayes yang optimal. Ini kemudian
memberikan perbandingan batas pengklasifikasi Optimal dan Naif.
Langkah pertama adalah memutuskan fungsi kerugian yang sesuai, karena \ qq {kuadrat kerugian)
yang biasa tidak sesuai untuk output diskrit. Sebagai gantinya kita akan menggunakan fungsi \ qq {0-
1 loss} sederhana yang didefinisikan sebagai berikut.
\ begin {aligned} L (k, l) & \ begin {cases} 0 & \ text {if} \ k = l \\ 1 & \ text {if} \ k \ neq l \ end {cases} \\
L (k, l) & = \ mathcal {I} (k \ neq l) = 1 - \ mathcal {I} (k = l) \ end {aligned}
\ begin {aligned} \ hat f (x) & = argmin_g \ sum_ {k = 1} ^ KL [k, g] Pr (k | X) \\ & = argmin_g \ sum_ {k
= 1} ^ K (1 - \ mathcal {I} (k = g)) Pr (k | X) \\ & = argmax_g \ sum_ {k = 1} ^ K \ mathcal {I} (k = g) Pr
(k | X) \ end {sejajar}
Karena, untuk pengamatan yang diberikan xx, distribusi marginal dari p(x)p(x) adalah konstan dalam
penyebut teorema Bayes, kita dapat menyederhanakan aturan keputusan ini lebih lanjut sebagai:
\ begin {aligned} \ hat f (x) & = argmax_g Pr (g | X = x) \\ & = argmax_g \ frac {Pr (x | g) p (g)} {p (x)} \\
& = argmax_g Pr (x | g) p (g) \\ & = argmax_g \ log Pr (x | g) + \ log p (g) \ end {aligned}
Formulir ini memperjelas bahwa aturan keputusan MAP mencoba untuk mencapai kompromi antara
harapan a priori p(g)p(g) dan bukti yang diberikan oleh data melalui fungsi
kemungkinan p(x|g)p(x|g).
Dalam kehidupan nyata, kita biasanya tidak tahu distribusi posterior, tetapi kita
memperkirakannya. Pengklasifikasi Naive Bayes mendekati pengelompokan Bayes optimal
dengan melihat distribusi empiris dan dengan mengasumsikan independensi para prediktor. Jadi
pengklasifikasi Naif Bayes itu sendiri tidak optimal, tetapi mendekati solusi optimal.
Sumber
https://stats.stackexchange.com/questions/92180/expected-prediction-error-derivation
Elemen Pembelajaran Statistik ESL
http://www.lx.it.pt/~mtf/learning/Bayes_lecture_notes.pdf
https://www.youtube.com/watch?time_continue=28&v=pFtiNSmJuoE
Implementasi
impor numpy sebagai np
impor panda sebagai pd
dari matplotlib import pyplot as plt
impor matplotlib.colors sebagai warna
impor seaborn sebagai sns
impor itertools
dari norma impor scipy.stats
impor scipy.stats
dari sklearn.naive_bayes impor GaussianNB
% matplotlib sebaris
sns . set ()
def predict_Bayes_class ( X , mu_list , sigma_list ):
#Kembalikan kelas prediksi dari pengklasifikasi bayes yang optimal - distribusi
harus diketahui
Score_list = []
kelas = len ( mu_list )
mu1 = [ 2 , 2 ]
sigma1 = [[ 5 , - 4 ], [ - 4 , 5 ]]
x1 , y1 = np . acak . multivariate_normal ( mu1 , sigma1 , 100 ) . T
mu2 = [ - 2 , - 2 ]
sigma2 = [[ 3.5 , 3 ], [ 3 , 3.5 ]]
x2 , y2 = np . acak . multivariate_normal ( mu2 , sigma2 , 100 ) . T
# Pengaturan angka
fig = plt . gambar ( figsize = ( 16 , 7 ))
kapak = ara . add_subplot ( 1 , 2 , 1 )
# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%. %%%%%%%%%%%%%%%%%%%
%% # #
# Menempatkan kontur Gaussians di plot sebelah kiri
untuk saya dalam kisaran ( 2 ):
zz = np . array ( [ scipy . stats . multivariate_normal . pdf ( np . array ([ x
x , yy ]), mean = mu_list [ i ], cov = sigma_list [ i ])
untuk xx , yy di zip ( np . ravel ( X ), np . ravel ( Y )) ] )
# Pasang kontur
kapak . kontur ( X , Y , Z , 5 , alfa = . 3 , warna = color_list [ i ])
# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%. %%%%%%%%%%%%%%%%%%%
%% # #
# Pasang kontur
kapak . kontur ( X , Y , Z , 1 , alfa = . 3 , warna = ( 'darkblue' , 'darkgreen' ))
kapak . contourf ( X , Y , Z , 1 , alpha = . 1 , warna = ( 'darkblue' , 'darkgreen'
))
# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%. %%%%%%%%%%%%%%%%%%%
%% # #
#Naive Bayes Classifier
dari sklearn.naive_bayes impor GaussianNB
Model #Cocok
model_sk = GaussianNB ( prior = Tidak ada )
model_sk . cocok ( X_data , y_labels )
# Pasang kontur
kapak . kontur ( X , Y , Z , 1 , alfa = . 3 , warna = ( 'merah' ))
plt . tampilkan ()
Akurasi
Akurasi #Optimal Bayes
y_pred = np . array ( [ predict_Bayes_class ( np . array ([ xx , yy ]), mu_list , s
igma_list )
untuk xx , yy di zip ( np . ravel ( X_data [:, 0 ]), np . ravel
( X_data [:, 1 ])) ] ))
display ( np . mean ( y_pred == y_labels ))
mu1 = [ 2 , 2 ]
sigma1 = [[ 5 , 0 ], [ 0 , 5 ]]
x1 , y1 = np . acak . multivariate_normal ( mu1 , sigma1 , 100 ) . T
mu2 = [ - 2 , - 2 ]
sigma2 = [[ 3 , 0 ], [ 0 , 3 ]]
x2 , y2 = np . acak . multivariate_normal ( mu2 , sigma2 , 100 ) . T
# Pengaturan angka
fig = plt . gambar ( figsize = ( 16 , 7 ))
kapak = ara . add_subplot ( 1 , 2 , 1 )
# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%. %%%%%%%%%%%%%%%%%%%
%% # #
# Pasang kontur
kapak . kontur ( X , Y , Z , 5 , alfa = . 3 , warna = color_list [ i ])
# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%. %%%%%%%%%%%%%%%%%%%
%% # #
# Pasang kontur
kapak . kontur ( X , Y , Z , 1 , alfa = . 3 , warna = ( 'darkblue' , 'darkgreen' ))
kapak . contourf ( X , Y , Z , 1 , alpha = . 1 , warna = ( 'darkblue' , 'darkgreen'
))
# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%. %%%%%%%%%%%%%%%%%%%
%% # #
#Naive Bayes Classifier
dari sklearn.naive_bayes impor GaussianNB
Model #Cocok
model_sk = GaussianNB ( prior = Tidak ada )
model_sk . cocok ( X_data , y_labels )
# Pasang kontur
kapak . kontur ( X , Y , Z , 1 , alfa = . 3 , warna = ( 'merah' ))
plt . tampilkan ()
Akurasi
Akurasi #Optimal Bayes
y_pred = np . array ( [ predict_Bayes_class ( np . array ([ xx , yy ]), mu_list , s
igma_list )
untuk xx , yy di zip ( np . ravel ( X_data [:, 0 ]), np . ravel
( X_data [:, 1 ])) ] ))
display ( np . mean ( y_pred == y_labels ))
https://xavierbourretsicotte.github.io/Optimal_Bayes_Classifier.html