Iti0210lab9: erinevus redaktsioonide vahel

Allikas: Lambda
Mine navigeerimisribale Mine otsikasti
PriitJ (arutelu | kaastöö)
PriitJ (arutelu | kaastöö)
42. rida: 42. rida:
* veerg 13 klassifikatsioon (1 - rämps, 0 - ei ole rämps)
* veerg 13 klassifikatsioon (1 - rämps, 0 - ei ole rämps)


Märkus: 12 tunnust on valitud selleks, et näide loetavam oleks. Selline sõnade arv on praktikas väga väike (liiga väike) arv teksti sisu klassifitseerimiseks.
Märkus: 12 tunnust on valitud selleks, et näide loetavam oleks. Selline sõnade arv on praktikas väga väike (liiga väike) teksti sisu klassifitseerimiseks.


Andmete näidis, koos sõnadega mis tunnusteks valitud (sõna SPAM tähistab veergu, kus on klassifikatsioon):
Andmete näidis, koos sõnadega mis tunnusteks valitud (sõna SPAM tähistab veergu, kus on klassifikatsioon):

Redaktsioon: 15. november 2018, kell 22:01

"Naiivne" Bayesi klassifikaator

Sissejuhatus

Naiivne Bayesi (lühidalt NB) tõenäosusmudel põhineb eeldusel, et kui meil on peidetud põhjus, siis selle nähtavad tagajärjed on kõik üksteisest sõltumatud. See eeldus võimaldab tagajärgede alusel põhjuse tõenäosust leida üsna lihtsa valemi järgi. Seda mudelit saab kasutada ka klassifitseerimisel (vt. klassikaline klassifitseerimise näide).

Kui meil on teada klassifitseeritava objekti mingid tunnused x1, ..., xn ning mingid võimalikud klassid c1, c2, ..., siis tõenäosus, et objekti klass on ci on proportsionaalne järgmise valemiga:

NB valem

Täpset tõenäosust see valem ei anna, aga piisab kui teame, milline tõenäosus on kõige suurem. Selleks tuleb see valem arvutada välja iga võimaliku klassi ci kohta. Vaja on iga klassifitseeringu esinemise tõenäosust P(ci) ning iga tunnuse tinglikku tõenäosusjaotust iga klassi kohta P(Xj|ci)

Kirjuta programm, mis:

  1. etteantud treeningnäidetest, kus on antud nii tunnused kui ka klass, ehitab vajalikud tõenäosustabelid;
  2. leiab ainult tunnuste alusel objekti klassi

NB mudeli üks esimesi ja tuntumaid rakendusi on rämpsposti klassifitseerimine. Treeni oma mudel antud treeningandmetega, kus väikesest rämpsmeilide korpusest [1] on juba valitud 12 sõna tunnusteks. Seejärel proovi, kas õnnestub kahte toodud kirja klassifitseerida.

Taustainfo: lühidalt, detailsemalt saad lugeda loengukava alt viidatud materjalidest.

Treenimine ja ennustamine

Et klassifikaatorit treenida, tuleb leida:

  • iga klassi ci esinemise sagedus treeningnäidetes (annab eeltõenäosuse)
  • iga tunnuse väärtuse esinemise sagedus, kui klass on ette antud (annab tunnuse väärtuse tingliku tõenäosuse mingi klassi puhul).

Pane tähele, et NB valemis toodud korrutis läheb nulliks klassi ja tunnuse väärtuse kombinatsioonide puhul mida treeningnäidetes ei esine (esinemissagedus 0). Juhul kui treeningandmeid on vähe, ei saa me sellest kohe järeldada, et see kombinatsioon võimatu oleks.

Seetõttu kasuta tunnuse väärtuse tingliku tõenäosuse leidmiseks järgmist valemit:

Laplace smoothing

Kus Nx on juhtumite arv (klassi kohta), kus mingi tunnuse väärtus esines; Nc on selle klassiga juhtumite koguarv ja d on antud tunnuse võimalike väärtuste arv.

Kuigi NB mudel töötab ka osalise informatsiooni alusel, siis lihtsustamise eesmärgil eeldame, et nii treeningnäidetes kui klassifitseeritavate objektide puhul on kõik tunnused alati antud.

Treeningandmed

Andmed on antud ridade kaupa, iga rida vastab ühele kirjale:

  • veerud 1-12 tunnused (1 - sõna esines, 0 - ei esinenud)
  • veerg 13 klassifikatsioon (1 - rämps, 0 - ei ole rämps)

Märkus: 12 tunnust on valitud selleks, et näide loetavam oleks. Selline sõnade arv on praktikas väga väike (liiga väike) teksti sisu klassifitseerimiseks.

Andmete näidis, koos sõnadega mis tunnusteks valitud (sõna SPAM tähistab veergu, kus on klassifikatsioon):

company statements may http email within price money get com enron gas SPAM
0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 1 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 1 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 1 1 0 0 1 0
0 0 1 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1 0 0 0 0 1
0 0 1 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0 1 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 1 0 0 0 0 1
0 0 0 1 1 0 0 0 0 0 0 0 1
0 0 0 1 0 0 1 1 0 0 0 0 1
0 0 0 1 0 0 0 0 0 1 0 0 1

Siin on 15 näidet, millest 8 on rämps. Seega P(rämps) = 8/15 = 0.533.

Kui tahame leida P(money|rämps), loendame näidiseid. N_c = 8. Nendest kirjadest 3-s esineb sõna "money". Igal tunnusel on kaks võimalikku väärtust, seega d = 2. Kokku saame, et P(money|rämps) = (3 + 1) / (8 + 2) = 0.4.

Andmed mudeli treenimiseks CSV kujul.