Sınıflandırma problemi (Classification) günümüzde makine öğrenmesinin temel bir problemlidir. Bir sınıflandırma probleminde, algoritmanın amacı sınıflarıyla birlikte verilen bir eğitim seti ile bir sınıflandırıcı oluşturmaktır. Genellikle verilen bir eğitim seti E, bir özellik vektörü (x1, x2, ..., xn) ile temsil edilmektedir. Burada xi, özellik vektörü Xi'nin değeridir. Diyelim ki C sınıflandırma değişkenini temsil etsin ve c sınıflandırma değişkeninin değerini temsil etsin. Bu çalışmada sadece 2 sınıf olduğu varsayılmaktadır: + (pozitif sınıf) veya - (negatif sınıf).
Sınıflandırıcı verilen örnek E'ye bir sınıf değeri atayan fonksiyondur. Bu çalışma için 3 model geliştirilecektir. Birinci model saf gaussian naive bayes kullanılarak oluşturulmuştur, ikinci model parametre optimizasyonu yapılmış naive bayestir, üçüncü model ise düzenlenmiş veri ile eğitilen naive bayestir. Naive bayes'in olasılık dağılımına göre verilen bir örnek E = (x1, x2, ..., xn) için sınıfın c olma olasılığı:
P(C | x1, ..., xn) = (P(C) * P(x1, ..., xn | C)) / P(x1, ..., xn)
Verilen örnek E, c olarak sınıflandırılması için gerek ve yeter şart:
fb(E) = P(C = +| x1, ..., xn) / P(C = -| x1, ..., xn) >= 1
Burada fb(E) bayesian sınıflandırıcı olarak adlandırılır. Varsayın ki verilen örnek E'de bütün özellikler birbirinden bağımsız; yani,
P(E | C) = P(x1, ..., xn | C) = ∏ni=1 Pxi | C)
Buna göre sınıflandırıcı:
fnb(E) = P(C = +) / P(C = -) * ∏ni=1 P(xi | C = +) / P(xi | C = -)
Burada fnb(E) fonksiyonu bayes sınıflandırıcısı veya naive bayes olarak adlandırılır.
Bu algoritma öncelikle verilen örnek E'nin (x1, x2, ..., xn) bütün özelliklerini gaussian (normal) dağılımına dönüştürmektedir. Yani algoritma çalışırken özellik sayısı kadar gaussian dağılımı oluşturulmaktadır. Ardından verilen örnek E'nin hangi sınıfa ait olduğunu hesaplamak içinse önce bir P(C = +) ön değeri hesaplamaktadır. Bu ön değer herhangi bir yaklaşıklık olabilir. Örneğin; veri setinde 200 adet pozitif 150 adet negatif sınıf varsa, P(C = +) olasılığı 200 / 350 şeklinde hesaplanabilir. Aynı şekilde P(C = -)'de 150 / 350 şeklinde hesaplanır. Bunlara prior probability (önsel olasılık) denir. Sınıflandırıcı oluşmadan önce (deneyden önce) yapılabilecek en iyi varsayım olarak da geçer. Prior probability hesaplandıktan sonra verilen örnek E'nin pozitif sınıf ve negatif sınıf likelihood'ları hesaplanır. Bunlar örnek hakkında bir çıkarımdır ve daha önceden oluşturulan gaussian dağılımlarına göre hesaplanır. Örneğin 3 özelliği olan örnek E1'nin sınıfını manuel olarak hesaplayalım:
Özellik | Özellik Değeri |
---|---|
Glikoz Değeri | 85 |
BMI Değeri | 33.6 |
İnsulin Değeri | 12 |
P(E | C) = P(x1, ..., xn | C) = P(C) * ∏ni=1 P(xi | C)'dir. Burada P(C) prior probability olup herhangi bir varsayım olabilir, şimdilik 0.6 varsayalım. Ardından likelihood'lar hesaplanır: P(xi | C). Bu değerde hesaplanan gaussian dağılımına göre bulunur. Dağılım fonksiyonunda x yerine 85 (Glikoz Değeri) girersek y değeri 0.004 olmaktadır. BMI değeri için 0.0001, insulin değeri için ise çok çok küçük bir değer çıkmaktadır. Bunları çarpıp formüle göre P(E | C) bulabiliriz. Ancak çok küçük değerlerle çarpım işlemi yapıldığı zaman bilgisayar zorlanmaktadır. Bilgisayarın bir sayıyı hafızada tutabilmesi için ancak belli bir küçüklükte olmalıdır, o değerden daha da küçük bir sayı tutmaya çalıştığında ise hata vermektedir. Bundan dolayı biz bu çarpımın logaritmasını alıyoruz. Logaritma içinde çarpım logaritmaların ayrı ayrı toplanması demektir. Bu işlemi tüm özellikler için yaptıktan sonra elde ettiğimiz değer diyelim P(x1 | C = +) = -53 olsun. Aynı işlemleri negatif sınıf için yaparsak da diyelim ki P(x1 | C = -) = -23 olsun. O zaman P(x1 | C = -) > P(x1 | C = +) olduğundan dolayı sınıflandırıcı sonuç olarak negatif (0) değerini verecektir.
Saf veri ile gaussian naive bayes eğittiğimiz zaman accuracy (kesinlik) değeri yaklaşık olarak 0.83 çıkmaktadır. Bu veride hiç düzenlemem yapılmamış olup parametrelerini standart bıraktığımız bir model için gayet iyidir. Bu modelde parametre optimizasyonu yapmak için 2 metot seçilmiştir. Biri GridSearchCV olmakla birlikte verilen parametre adaylarının hepsini tek tek model uzayında deneyip en iyisini döndürmektedir. İkinci yöntem ise RandomizedSearchCV'dir. Bu yöntem GridSearchCV gibi tüm değerlere bakmak yerine rastgele seçilmiş parametre kombinasyonlarını denemektedir. GridSearchCV çalışma süresi GoogleColab üzerinde 3dk sürmüş olmasında rağmen RandomSearchCV sadece 1 saniye sürmüştür. Ancak GridSearch sonunda elde edilen parametreler ile 0.84 accuracy elde etmişken, RandomSearch ile 0.82 accuracy elde etmiş bulunmaktayız. Bu değer standart parametrelerden bile düşüktür ancak hız konusunda en hızlısı diyebiliriz. GridSearch ise en iyi sınıflandırıcıyı bulurken en yavaşıdır. Diğer bir taraftan confusion matrix değerlerine baktığımız zaman yanlış negatif değeri RandomSearch'de 4 iken GridSearch'de 5'tir (Standart parametreler ile 6'dır). Bu RandomSearch'ün bazı durumlarda GridSearch'ten daha iyi olduğunu gösterir.
Verileri işledikten sonra eğitilen model GridSearch tarafından seçilen parametreler ile eğitilmiştir çünkü bu çalışmada asıl amacımız accuracy'yi en yüksek seviyeye çıkarmaktır. Standart normalizasyon sonrası elde edilen accuracy değeri 0.75'tir. Min-max normalizasyonu ardından elde edilen accuracy ise 0.74'dür. Buda bize Naive Bayes'te normalizasyonun çok da iyi sonuç göstermediğini verir. Bu iki değerde saf veri ile eğitilmiş modellerden düşüktür.
Naive Bayes için parametre optimizasyonu önemli olmaktadır ve dikkat edilmesi gereklidir. GridSearchCV ile yapılan optimizasyon modelde güzel performans verirken RandomSearchCV biraz işi şansa bırakmaktadır. Ancak süre kısmından bakıldığı zaman kısa sürede model eğitmek gerekli ise RandomSearchCV daha işlevsel olacaktır. Normalizasyon kısmına gelirsek diabetes data setinin Naive Bayes için normalize edilmesi iyi bir sonuç vermemiştir. Bunun sebebi veride eksik değerler (0) olması olabilir. Daha detaylı bir analiz yapılması gereklidir. Eğitilen modellerden en yüksek accuracy değeri 0.84'dür ki buda Naive Bayes için iyi sayılır. Naive Bayes'in özellikler arasında hiçbir bağ olmamasını varsayım yaparak çalışmasına rağmen nasılda bu kadar yüksek bir accuracy aldığına gelirsek ise veri setinin sıcaklık grafiğine baktığımız zaman bu bize özelliklerin birbiri ile korelasyonlarını gösterir. Buda çalışmada çoğu özellik için düşük gelmiştir. Yani bu veri seti için Naive Bayes kullanılabilir çünkü özellikler arasında bağlantı bazı istisnalar dışında yok denecek kadar azdır. Veri setinde sınıfların dağılıma bakarsak ise negatif sınıfların sayısı daha fazladır buda accuracy'yi düşüren faktörlerden bir tanesi olabilir.