Bayes teoremi olasılıklar hesabında önemli bir yere sahiptir. Bayes teoremine dayanarak sınıflandırma yapmak mümkündür.

Bayes sınıflandırıcıları istatistiksel sınıflandırma teknikleri arasında yer alır. Basit bir olasılıksal sınıflandırıcıdır. Daha detaylı bilgi almak için wikipedia sayfasını ziyaret edebilirsiniz.

Teorik bilgiden ziyade uygulamanın daha akılda kalıcı olacağını düşünüyorum.

Elimizde aşağıdaki tablo gibi bir eğitim kümesi olduğunu varsayalaım. 8 adet adayın eğitimyaş ve cinsiyet bilgilerine göre kabul edilip edilmedikleri gösterilmiştir. Bizden istenen ise Sade Bayes Sınıflandırıcısı ile eğitim=yüksek,yaş=orta ve cinsiyet=kadın şartlarındaki bir isteğin kabul görüp görmeyeceğine karar verilmesidir.
C1 : KABUL =  EVET Bayes sınıflandırması gerçekleştirmek için her bir hipotezin Bayes olasılıkları tek tek hesaplanır.

C1 : KABUL = HAYIR

olmak üzere

P(X | C1) * P(C1) ve P(X | C2) * P(C2) ifadelerini hesaplamamız gerekmektedir. İfadelerden büyük olanı örneğin sınıfını verecektir.

a ) P(X | C1) * P(C1) olasılığının hesaplanması

P(X1 | C1) = P(EĞİTİM=YÜKSEK | KABUL=EVET) = 1/5
P(X1 | C1) = P(YAŞ=ORTA | KABUL=EVET) = 3/5
P(X1 | C1) = P(CİNSİYET=KADIN | KABUL=EVET) = 2/5
olduğuna göre;
P(X | C1) = P(X | KABUL=EVET) = 1/5*3/5*2/5 = 6/125
olarak hesaplanır.
P(C1) = P(KABUL = EVET) = 5/8
olduğuna göre;
P(X | C1) * P(C1) = 6/125*5/8 = 0.03
olarak elde edilmiş olur.

b ) P(X | C2) * P(C2) olasılığının hesaplanması

P(X1 | C2) = P(EĞİTİM=YÜKSEK | KABUL=HAYIR) = 1/3
P(X1 | C2) = P(YAŞ=ORTA | KABUL=HAYIR) = 1/3
P(X1 | C2) = P(CİNSİYET=KADIN | KABUL=HAYIR) = 2/3
olduğuna göre;
P(X | C2 = P(X | KABUL=HAYIR) = 1/3*1/3*2/3 = 2/27
olarak hesaplanır.
P(C2) = P(KABUL=HAYIR) = 3/8
olduğuna göre;
P(X | C2) * P(C2) = 2/27 * 3/8 = 0.027
olarak elde edilmiş olur.

  1. c) Sonuç
    arg max{ (X | Ci) P(Ci)} = max{0.03, 0.027} = 0.03
    Böylece verilen örneğin 0.03 olasılığı ile ilgili olan sınıfa yani EVET sınıfına ailt olduğu anlaşılmaktadır.

Örnek php kodu aşağıdadır:

<?php

 

/*

create sade-bayes.txt file and paste data list

—————-

orta,yaşlı,erkek,evet

ilk,genç,erkek,hayır

yüksek,orta,kadın,hayır

orta,orta,erkek,evet

ilk,orta,erkek,evet

yüksek,yaşlı,kadın,evet

ilk,genç,kadın,hayır

orta,orta,kadın,evet

*/

 

class Sade_Bayes {

 

public $dataFile = ‘sade-bayes.txt’;

private $arrValues = array();

private $cKabulEvet = 0;

private $cKabulHayir = 0;

private $arrArgumans = array(‘egitim’,’yas’,’cinsiyet’,’kabul’);

private $toplamKayit = 0;

private $kosulEvet = 0;

private $kosulHayir = 0;

 

function __construct()

{

header(‘Content-Type: text/html; charset=utf-8’);

$this->readDataFile();

}

 

function execute($egitim,$yas,$cinsiyet)

{

$this->getKabulOlasilik();

$this->getOlasilikKabulEvet($egitim,$yas,$cinsiyet);

$this->getOlasilikKabulHayir($egitim,$yas,$cinsiyet);

return $this->result();

}

 

private function getOlasilikKabulEvet($egitim,$yas,$cinsiyet)

{

$pEgitim = 0;

$pYas = 0;

$pCinsiyet = 0;

 

foreach ($this->arrValues as $var) {

if ($var[‘egitim’] == $egitim && $var[‘kabul’] == ‘evet’) $pEgitim++;

if ($var[‘yas’] == $yas && $var[‘kabul’] == ‘evet’) $pYas++;

if ($var[‘cinsiyet’] == $cinsiyet && $var[‘kabul’] == ‘evet’) $pCinsiyet++;

}

 

$p1 = $pEgitim/$this->cKabulEvet;

$p2 = $pYas/$this->cKabulEvet;

$p3 = $pCinsiyet/$this->cKabulEvet;

$this->kosulEvet = ($p1*$p2*$p3)*($this->cKabulEvet/$this->toplamKayit);

}

 

private function getOlasilikKabulHayir($egitim,$yas,$cinsiyet)

{

$pEgitim = 0;

$pYas = 0;

$pCinsiyet = 0;

 

foreach ($this->arrValues as $var) {

if ($var[‘egitim’] == $egitim && $var[‘kabul’] == ‘hayır’) $pEgitim++;

if ($var[‘yas’] == $yas && $var[‘kabul’] == ‘hayır’) $pYas++;

if ($var[‘cinsiyet’] == $cinsiyet && $var[‘kabul’] == ‘hayır’) $pCinsiyet++;

}

 

$p1 = $pEgitim/$this->cKabulHayir;

$p2 = $pYas/$this->cKabulHayir;

$p3 = $pCinsiyet/$this->cKabulHayir;

$this->kosulHayir = ($p1*$p2*$p3)*($this->cKabulHayir/$this->toplamKayit);

}

 

private function readDataFile()

{

$f = fopen($this->dataFile, “r”);

 

$i = 0;

$arrTemp = array();

 

while ( $line = fgets($f) ) {

 

$arrTemp = explode(‘,’,$line);

 

$j = 0;

foreach ($arrTemp as $var) {

$indis = $this->arrArgumans[$j];

$this->arrValues[$i][$indis] = trim($var);

$j++;

}

 

$i++;

}

 

$this->toplamKayit = $i;

}

 

private function getKabulOlasilik()

{

foreach ($this->arrValues as $var) {

if ($var[‘kabul’] == ‘evet’) $this->cKabulEvet++;

else $this->cKabulHayir++;

}

}

 

private function result()

{

if ($this->kosulEvet > $this->kosulHayir) return ‘EVET’;

else return ‘HAYIR’;

}

 

private function print_pre($data)

{

echo “<pre>”;

print_r($data);

echo “</pre>”;

}

}

 

$sadeBayes = new Sade_Bayes();

echo $sadeBayes->execute(‘orta’,’genç’,’kadın’);

echo “<br>”;

echo $sadeBayes->execute(‘yüksek’,’orta’,’kadın’);

Not: Uygulama ve anlatımda Dr. Yalçın ÖZKAN’ın Veri Madenciliği Yöntemleri kitabı esas alınmıştır. Hocamıza teşekkür ediyorum.

 

CEVAP VER