Sunteți pe pagina 1din 19

Învățarea automată

(Machine Learning)
Curs 3
Obiective
• Recapitularea unor principii de bază din teoria probabilităților utilizate
în cadrul metodei de învățare automată Naive Bayes și prezentarea
acestei metode de învățare automată.
• Prezentarea unui set de pachete R specializate pentru procesare,
analiza și vizualizare în analiza datelor text
• Exemplificarea capacităților metodei Naive Bayes în filtrarea
mesajelor de spam (mesaje de email sau SMS) .
Metoda Naive Bayes
• Descrie o aplicație simplă a teoremei lui Bayes pentru clasificare.
• Se bazează pe metode probabilistice
• metode preocupate să descrie incertitudinea
• metode care utilizează date din trecut pentru a extrapola evenimente viitoare
• Utilizează date despre evenimente anterioare pentru a estima
probabilitatea unor evenimente viitoare, în lumina unor informații
suplimentare.
• Mai precis:
• Clasificatorii utilizează datele de antrenare pentru a calcula probabilitatea observată a fiecărei
clase, pe baza valorilor atributelor.
• Atunci când clasificatorul este utilizat mai târziu pe un exemplu neetichetat, folosește
probabilitățile observate pentru a prognoza ceai mai probabilă clasă pentru noile valori ale
atributelor.
Utilizări ale metodelor bayesiene
• Clasificarea textului:
• filtrarea mesajelor spam
• identificarea autorului
• clasificarea subiectului
• Detecția intruziunilor sau anomaliilor în rețelele de calculatoarele
• Diagnosticul medical în funcție de simptome observate
• Etc.
Avantaje vs. dezavantaje
• Avantaje • Dezavantaje
• simplu, rapid și foarte eficient • se bazează pe ipoteza, adesea
• se descurcă bine cu date afectate eronată, că atributele sunt toate la
de zgomot și cu valori lipsă fel de importante și că sunt
• necesită relativ puține exemple de independente
antrenare dar se descurcă bine și • nu este soluția ideală pentru
cu un număr mare de exemple seturile de date cu un număr mare
• se obține ușor probabilitatea de atribute numerice
estimată pentru predicție • probabilitățile estimate sunt mai
puțin sigure decât clasele
prognozate
Concepte de bază ale metodelor bayesiene
• Probabilitatea
• poate fi estimată din datele observate, prin împărțirea numărului de cazuri în care
evenimentul A s-a produs la numărul total de cazuri.
$(")
! " =
$
• Probabilitatea condiționată
• calculul probabilității producerii a două evenimente simultan depinde de modul în
care probabilitatea de producere a unui eveniment este legată sau nu de
probabilitatea de producere a altuia
• evenimente independente = evenimente care nu sunt legate
• Teorema lui Bayes – descrie relații dintre evenimentele dependente
! ( ⁄" ! " ! (∩"
! " ⁄( = =
! ( ! (
Exemplu – filtrarea mesajelor spam după
frecvența de apariție a unui cuvânt
Drug Drug

Frecve Da Nu Total Frecve Da Nu Total


nță nță
spam 4 16 20 spam 4/20 16/20 20

non- 1 79 80 non- 1/80 79/80 80


spam spam
Total 5 95 100 Total 5/100 95/100 100
Exemplu – filtrarea mesajelor spam folosind
mai multe cuvinte
Drug (W1) Money (W2) Groceries (W3) Unsubscribe (W4)

Likelihood Yes No Yes No Yes No Yes No Total

spam 4/20 16/20 10/20 10/20 0/20 20/20 12/20 8/20 20

ham 1/80 79/80 14/80 66/80 8/80 71/80 23/80 57/20 80

Total 5/100 95/100 24/100 76/100 8/100 91/100 35/100 65/100 100

• În condiții reale:
! '1 ∩ ¬'2 ∩ ¬'3 ∩ ' 4⁄/$%& ! /$%&
! #$%&⁄' 1 ∩ ¬'2 ∩ ¬'3 ∩ '4 =
! '1 ∩ ¬'2 ∩ ¬'3 ∩ '4
• În condițiile independenței condiționate de clasă (class-conditional
independence):
0 1 2⁄3456 0 ¬1 7⁄3456 0 ¬1 8⁄9456 0 1 :⁄3456 0 3456
! /$%&⁄' 1 ∩ ¬'2 ∩ ¬'3 ∩ '4 =
0 12 0 ¬17 0 ¬18 0 1:
Algoritmul de clasificare naive Bayes

*
1
! #$ ⁄%& , %(, . . . , %* = . #$ / . %0 ⁄#$
-
01&
Estimatorul Laplace
• Dacă un eveniment nu apare niciodată pentru unul sau mai multe
niveluri ale clasei, formula de mai sus conduce la rezultate eronate:
probabilitatea nulă.
• Soluție: Se adaugă în tabelul de frecvențe un număr mic (implicit,
valoarea 1) la fiecare atribut astfel încât să se asigure că nu va apare
niciodată probabilitatea zero în niciunul din cazuri.
• Obs. Estimatorul laplacian poate fi setat la orice valoare și nu trebuie să fie
neapărat același pentru toate atributele
Utilizarea atributelor numerice
• Deoarece atributele numerice nu au categorii de valori, algoritmul
Naive Bayes nu poate lucra direct cu datele numerice.
• Soluție: discretizarea atributelor numerice, ceea ce înseamnă că
numerele sunt puse în categorii cunoscute sub numele de container
(Eng. bin).
• cea mai obișnuită metodă de
discretizare este cea de explorare
a datelor pentru a identifica
acele categorii naturale din
distribuția datelor respectiv,
punctele de tăiere
(Eng. cut points).
Utilizarea metodei Naive Bayes pentru
filtrarea mesajelor de spam (1)
• Pasul 1 – Colectarea datelor
• Se vor utiliza datele din colecția de mesaje SMS de la adresa
http://www.dt.fee.unicamp.br/~tiago/smsspamcollection/
• Colecția conține 5559 mesaje text etichetate cu spam sau ham
• Exemple:
• Ham (4812 mesaje):
I” got another job! The one at the hospital doing data analysis or something, starts on
monday! Not sure when my thesis will got finished.”
• Spam (747 mesaje):
”Congratulations ur awarded 500 of CD vouchers or 125 gift guaranteed & Free entry 2100
wkly draw txt MUSIC to 87066”
Utilizarea metodei Naive Bayes pentru
filtrarea mesajelor de spam (2)
• Pasul 2 – Explorarea și pregătirea datelor
• Citirea datelor din fișier:
> sms_raw<- read.csv(”sms_spam.csv”, stringsAsFactor = FALSE)
> sms_raw$type <- factor(sms_raw$type)

• Procesarea datelor text pentru analiză


• Instalarea și încărcarea pachetului pentru NLP – Text Mining
> install.packages(”tm”)
> library(tm)
• Crearea unui corpus de documente
> sms_corpus <- Corpus(VectorSource(sms_raw$text))
> inspect(sms_corpus[1:3])
Utilizarea metodei Naive Bayes pentru
filtrarea mesajelor de spam (3)
• Pasul 2 – Explorarea și pregătirea datelor (cont.)
• Înlocuirea majusculelor, eliminarea numerelor, a semnelor de punctuație și a cuvintelor
de legătură (stopwords), comprimarea spațiilor:
> corpus_clean <- tm_map(sms_corpus, tolower)
> corpus_clean <- tm_map(corpus_clean, removeNumbers)
> corpus_clean<-tm_map(corpus_clean, removeWords,
stopwords())
> corpus_clean <- tm_map(corpus_clean, removePunctuation)
> corpus_clean <- tm_map(corpus_clean, stripWithespace)

• Atomizarea (tokenization) mesajelor:


> sms_dtm <- DocumentTermMatrix(corpus_clean)
Utilizarea metodei Naive Bayes pentru
filtrarea mesajelor de spam (4)
• Pasul 2 – Explorarea și pregătirea datelor (cont.)
• Crearea seturile de date de antrenare și test
(75% - 25%)
> sms_raw_train <- sms_raw[1:4169, ]
> sms_raw_test <- sms_raw[4170:5559, ]
> sms_dtm_train <- sms_dtm[1:4169, ]
> sms_dtm_test <- sms_dtm[4170:5559, ]
> sms_corpus_train <- corpus_clean[1:4169]
> sms_corpus_test <- corpus_clean [4170:5559]
• Vizualizarea datelor text
> wordcloud(sms_corpus_train,
min.freq=40, random.order=FALSE)
Utilizarea metodei Naive Bayes pentru
filtrarea mesajelor de spam (5)
• Pasul 2 – Explorarea și pregătirea datelor (cont.)
• Crearea atributelor indicatoare pentru cuvintele frecvente: Word clouds
> sms_dict <- findFreqTerms(sms_dtm_train, 5) Mesaje spam vs. mesaje valide:
> sms_train <- DocumentTermMatrix(
sms_corpus_train,
list(dictionary = sms_dict))
> sms_test <- DocumentTermMatrix(sms_corpus_test,
list(dictionary = sms_dict))
> convert_counts <- function(x) {
x <- ifelse(x>0, 1, 0)
x <- factor(x, levels = c(0,1),
labels = c(”No”, ”Yes”))
return (x)
}
> sms_train <- apply(sms_train, MARGIN = 2,
convert_counts)
> sms_test <- apply(sms_test, MARGIN = 2,
convert_counts)
Utilizarea metodei Naive Bayes pentru
filtrarea mesajelor de spam (6)
• Pasul 3 – Antrenarea unui model
• se utilizează pachetul e1071
> library(gmodels)
> sms_clasifier <- naiveBayes(sms_train, sms_raw_train$type)
• Pasul 4 – Evaluarea performanței modelului
> sms_test_pred <- predict(
sms_clasifier, sms_test)
> library(gmodels)
> CrossTable(sms_test_pred,
sms_raw_test$type,
prop.chisq = FALSE,
prop.t = false,
dnn = c(‘predict’,’actual’))
Utilizarea metodei Naive Bayes pentru
filtrarea mesajelor de spam (7)
• Pasul 5 – Îmbunătățirea performanței modelului
• utilizarea estimatorului laplacian
> sms_clasifier2 <- naiveBayes(sms_train, sms_raw_train$type,
laplace = 1)
> sms_test_pred2 <- predict(sms_clasifier2, sms_test)
> CrossTable(sms_test_pred,
sms_raw_test$type,
prop.chisq = FALSE,
prop.t = false,
dnn = c(‘predict’,
’actual’))
Bibliografie
• Tom Mitchell, Machine Learning, McGraw-Hill, 1997
• Max Kuhn, Kjell Johnson, Applied Predictive Modeling, Springer, 2013
• Brett Lantz, Machine Learning with R, Packt Publishing, 2013
• Pawel Cichocz, Data Mining Algorthims Explained Using R, Wiley,
2015
• Michaels Berthold, David J. Hands (Eds.), Intelligent Data Analysis,
Springer, 2003
• ***, Manual R, https://cran.r-project.org/doc/manuals/r-release/R-
intro.html

S-ar putea să vă placă și