Machine Learning Dərs 3 — Naive Bayes sinifləndirmə

Hasan Jafarov
5 min readApr 12, 2020

--

Əvvəlki dərsdə KNN sinifləndimrə alqoritminə qısaca nəzər saldıq. Bu dəfə daha bir sinifləndirmə alqoritmi olan Naive Bayes alqoritminə baxacıyıq. Bu alqoritm bayes teoreminə əsaslanır. Bayes teoremi ehtimal nəzəriyyəsində ən çox istifadə olunan teoremdir. Bu teorem 18-ci əsrdə Thomas Bayesin şərti ehtimalı(conditional probability) hesablamaq üçün ortaya atılmış və isbat edilmiş düsturdur.

Burada,

P(A|B) = B hadisəsi olduqda A hadisəsinin olma ehtimalı

P(A) = A hadisəsinin həyata keçmə ehtimalı

P(B|A) = A hadisəsi olduqda B hadisəsinin olma ehtimalı

P(B) = B hadisəsinin olma ehtimalı

Bayes teoremini başa düşmək üçün belə bir məsələyə baxaq:

Tutaq ki Azərbaycanda koronavirus testi verən insanların hər 100 nəfərdən 70 nəfər normal vətəndaş 30 nəfər tibb işçisidir.Normal insanlarda 2% koronovirus müsbət çıxır və tibb işçlilərində hər 8% müsbət nəticə çıxır. Bu halda müsbət çıxan testin tibb işçisi olma ehtimalını tapaq.

Həll:

p(A) : Testi verənin tibb işçisi olma ehtimalı=30/100=0.3

p(B) : Testin müsbət çıxma ehtimalı=0.3*0.08+0.7*0.02=0.024+0.014=0.038

p(B|A) : Tibb işçilərinin testinin müsbət çıxma ehtimalı=0.08

p(A|B) : Müsbət testin tibb işçisi olma ehtimalı=p(B|A)*p(A)/p(B)= (0.08*0.3)/0.038= 0.024/0.038=0.63=63%

Müsbət çıxan testlərin tibb işçisi olma ehtimalı 63 faizdir.

İndi qayıdaq yenə Naive Bayes sinifləndirmə alqoritminə. Naive Bayes alqoritmində məqsədimiz digər sinifləndirmə alqoritmlərdə olduğu kimi özündə birdən çox xüsusiyyət daşıyan datalarımız var və yeni gələn datanı düzgün şəkildə hansı sinifə aid olduğunu təyin etməkdən ibarətdir. Alqoritm yeni gələn datanın hər vəziyyət üçün ehtimalını hesablayır. Ən yüksək ehtimala görə sinifləndirir.

Əlimdə real case olmadığına görə xəyali bir case üzərində naive bayes alqoritmini tətbiq etməyə çalışacam. Yenə də koronovirus testləri haqqında xəyali bir case. Aşağıdakı sütunlar olacaq.

Test –Testin nəticəsi

Son14 — Son 14 gündə xarici ölkədə olubmu

Oovy — oldugu olkede virusa yoluxma nisbeti (cox/orta/az/olmuyub)

Tibbiscisidir — Tibb işçisidirmi

İstip — Məşğul olduğu işdə nə qədər insanla ünsiyətdə olur (cox/az)

Yuxarıda son sətirdə testin nəticəsini naive bayeslə təxmin edək.

Əlimizdəki datanın sayı — 12

Müsbət test nəticələrinin sayı — 7

Mənfi Test nəticələrinin sayı — 5

İndi isə 13-cü sətirdəki datalara görə ehtimalları tapaq.

Son 14 gundə xarici ölkədə olub mu? — hə

Test müsbət çıxanlarda cavab hə olma ehtimalı — 5/7

Test mənfi çıxanlarda cavab hə olma ehtimalı — 1/5

Olduğu ölkədə virus yayılması — Çox

Müsbət — 2/7

Mənfi — 1/5

Tibb işçisidir? –hə

Müsbət — 3/7

Mənfi — 2/5

Məşğul olduğu işdə nə qədər insanla ünsiyətdə olur — çox

Müsbət — 4/7

Mənfi — 3/5

Yekunda verilən datamızın müsbət vəya mənfi çıxma ehtimalını tapırıq.

P(+) = 7/12 * 5/7 * 2/7 * 3/7 * 4/7 =0.029

P(-) = 5/12 * 1/5 * 1/5 * 2/5 * 3/5 = 0.004

P(+) > P(-) olduğunda deyə bilərik ki 13-cü adamın çox təəssüf ki test nəticəsinin müsbət olma ehtimalı daha çoxdur.

Bu naives bayes alqoritminin tətbiqinin ən sadə halıdır. Yuxarıdakı nümunələrdə 4 parametr işlətdik və diqqətlə baxsaq görərik ki bunların hamısın aldığı dəyərlər sabitdir (enum) yəni rəqəmsal parametrlər deyil. Bu halda çox vaxt Naive bayes alqoritminin bu sadə halı tətbiq olunur.

Ancaq parametrlərimiz rəqəmlərdən ibarət olarsa bu şəkildə həll yolu tapa bilməyiciyik. Bu zaman Naive Bayesə Gauss paylanmasını tətbiq edərək hesablama aparmaq lazımdır. Çox vaxt buna Gauss naive bayes alqoritmi deyilir. Bu halda hər bir verilənin bütün verilənlərə nisbətən fərqli bir məna ifadə edə biləcəyində bizim şərti ehtimal hesablama düsturumuz dəyişir. Buna Gauss paylanması da deyilir. Düstur bu şəkildədir.

Burada,

μ — ədədi ortadır

. σ — Standart yayınma (Standart deviation)

. σ 2 — Aydın məsələdir ki, variance-dır.

Standart yayınmanı hesablayaq. Düstur bu şəkildədir.

A=(1,6,3,43,22,33,15,11,77,52,6)

1. Verilən rəqəmlərin ədədi ortası hesablanır.

(1+6+3+43+22+33+15+11+77+52+6)/11=24.45

2. Hər bir rəqəmlə ədədi ortanın fərqi tapılır.

1–24.45=-23.45

6–24.45=-18.45

3–24.45=-21.45

43–24.45=18.55

22–24.45=-2.45

33–24.45=8.55

15–24.45=-9.45

11–24.45=-13.45

77–24.45=52.55

52–24.45=27.55

6–24.45=-18.45

3. Fərqlərin kvadratı toplanır.

-23.45²+-18.45²+-21.45²+18.55²+-2.45²+8.55²+-9.45²+-13.45²+52.55²+27.55)-²+-18.45²=5904.7275

4. Sonda alınan rəqəm rəqəmlərin sayının 1 əksiyinə bölünür.

5904.7275/(11–1)=590.47275=590.5 -Bu varyansdır.

Sqrt(590.5)=24.30 — Bu isə standart yayınmadır.

İndi bir nümunəyə baxaq. Bu da xəyali bir casedir. Aşağıdakı sütunlarımız var.

Test — testin nəticəsi

Vsnv — Daşıdığı virus simptomları sayı

Sbhuois — Son bir həftədə ünsiyyətdə olduğu insan sayı

Obvys — Yaşadığı bölgədə virusa yoluxan sayı

Excel vasitəsiylə mənfi və müsbət nəticələrin ədədi orta və standart yayınmanı tapaq.

Yaş(+) üçün gauss yayılmasını tətbiq edək.

Yaş(+)=0.76

Digərlərinə buradan hesabladım.

Vsnv(+)=0.3745

Sbhuois(+)=0.5636

Obvys(+)=0.4483

Yaş(-)=0.7881

Vsnv(-)=0.6736

Sbhuois(-)=0.9778

Obvys(-)=0.8577

Əlimizdəki datanın sayı — 13

Müsbət test nəticələrinin sayı — 8

Mənfi Test nəticələrinin sayı — 5

P(+) = 8/13 * 0.76*0.3745*0.5636*0.4483=0.04425

P(-) = 5/13 * 0.7881 * 0.6736 * 0.9778 * 0.8577=0.17123

P(+)<P(-) olduğundan 14-cü sətirdəki parametrlərə sahib şəxsin test nəticəsi mənfi çıxma ehtimalı daha böyükdür.

Naive Bayesin üstünlükləri odur ki, tətbiq edilməsi çoxda çətin deyil, öyrətmə üçün çox data lazım deyil və bir çox halda uğurlu nəticələr verir. Zəif tərəfləri kimi isə onu göstərmək olar ki, parametrlər arasındakı əlaqəni modelləmək mümkün olmur ancaq realda isə çox vaxt parametrlər bir birilə əlaqəli olur.

Belə bir hal ola bilər ki ehtimallardan biri 0 ola bilər bu halda yekun nəticə də 0 olacaq. Belə halları aradan qaldırmaq üçün Laplas düzəltməsindən (Laplacian correction) istifadə olunur. Qısa olaraq belə izah etmək olar ki, əlimizdə çox böyük data var və bura kiçik əlavələr ümumi nəticəyə çoxda təsir etməyəcək.

Naive bayes aqloritminin bundan başqa multinomial naive bayes və Bernoulli navie bayes tipləri var. Daha sonra scikit-learn kitabxanası ilə pythonda nümunələr yazılacaq.

--

--

Responses (1)