Chập chững bước vào thế giới ML

Machine Learning và hành trình khám phá vẻ đẹp của nó ❤

Giả sử có hai hộp đựng đầy bánh quy. Hộp thứ nhất có 10 chiếc bánh quy sô-cô-la và 30 chiếc bánh quy bơ. Hộp thứ hai đựng mỗi loại bánh 20 chiếc. Bé Khoai chọn ngẫu nhiên một hộp, rồi nhặt đại một chiếc bánh. Ta có thể giả thiết rằng bé Khoai còn rất nhỏ nên không phân biệt hộp này hộp kia, và bé thích tất cả các loại bánh kẹo nên bánh loại nào với bé cũng vậy. Và chiếc bánh mà bé Khoai chọn té ra là một chiếc bánh quy bơ. Vậy khả năng Khoai nhặt chiếc bánh đó từ trong hộp thứ nhất là bao nhiêu? (2)

Câu hỏi trên trích từ wiki về suy luận Bayes.

Trước khi đi tìm lời giải, chúng ta tìm hiểu chút về Định lý Bayes (1).

Xác xuất xảy ra sự kiện A nếu có B (ký hiệu là P(A|B)) được tính bằng xác suất của sự kiện B nếu có A (ký hiệu là P(B|A)) nhân với xác xuất xảy ra A của riêng nó chia cho xác xuất xảy ra B của riêng nó.

Phù, nghe cái phát biểu ù cả tai. Tạm chấp nhận nó thì chúng ta cùng tiến đến suy luận Bayes, nghe sẽ ngọt ngào và đẹp hơn.

Suy luận Bayes sử dụng một ước lượng bằng số về mức độ tin tưởng vào một giả thuyết trước khi quan sát được bằng chứng, và tính toán một ước lượng bằng số về mức độ tin tưởng vào giả thuyết đó sau khi đã quan sát được bằng chứng. Trong quá trình quy nạp, suy luận Bayes thường dựa vào các mức độ tin tưởng, hay là các xác suất chủ quan, và không nhất thiết khẳng định về việc cung cấp một phương pháp quy nạp khách quan.
Suy luận Bayes

Để giải thích cho công thức trên chúng ta quay lại bài toán của cậu bé Khoai đầu bài viết.

Một cách trực quan, có vẻ rõ ràng là câu trả lời phải lớn hơn 1/2, do trong hộp 1 có nhiều bánh quy bơ hơn. Câu trả lời chính xác được tính theo định lý Bayes. Giả sử H1 tương ứng với hộp 1, và H2 tương ứng với hộp 2. Ta biết rằng đối với bé Khoai, hai hộp là như nhau, do đó, P(H1) = P(H2), và tổng của chúng phải bằng 1, do đó cả hai đều bằng 0,5. Dữ liệu D là quan sát về chiếc bánh quy bơ. Từ nội dung của hai hộp bánh, ta biết rằng P(D | H1) = 30/40 = 0,75 và P(D | H2) = 20/40 = 0,5. Khi đó, công thức Bayes cho ra kết quả:

Trước khi quan sát thấy chiếc bánh mà bé Khoai nhặt, xác suất cho việc Khoai chọn hộp 1 là xác suất tiên nghiệm, P(H1), có giá trị 0,5. Sau khi đã nhìn thấy chiếc bánh, ta chỉnh lại xác suất đó thành P(H1|D), có giá trị 0,6. Điều này phản ánh trực giác của ta rằng chiếc bánh có khả năng được lấy từ hộp 1 hơn, do hộp này có tỉ lệ bánh quy bơ so với bánh quy sô-cô-la cao hơn hộp kia. Quyết định được cho dưới dạng một xác suất, điều này khác với thông kê cổ điển.

Ứng dụng trong khoa học máy tính

Có rất nhiều ứng dụng của Naive Bayes, trong đó quan trọng nhất đó là áp dụng vào bài toán phân loại phân lớp. Dưới đây là ví dụ về ứng dụng của PositiveNaiveBayesClassifier (3).

>>> from nltk.classify import PositiveNaiveBayesClassifier

Giờ cho tập mẫu về sports zô:

>>> sports_sentences = [ 'The team dominated the game',
... 'They lost the ball',
... 'The game was intense',
... 'The goalkeeper catched the ball',
... 'The other team controlled the ball' ]

Rồi trộn thêm tập khác có cả sport và thứ khác.

>>> various_sentences = [ 'The President did not comment',
... 'I lost the keys',
... 'The team won the game',
... 'Sara has two kids',
... 'The ball went off the court',
... 'They had the ball for the whole game',
... 'The show is over' ]

Đặt features, cái này nôm na là đặt luật để nhận diện, ở dưới đơn giản là từ đó có chứa trong câu. Các ứng dụng thực tế sẽ xử lý tokenizer theo ngôn ngữ để tăng độ chính xác.

>>> def features(sentence):
... words = sentence.lower().split()
... return dict(('contains(%s)' % w, True) for w in words)

Giờ đến lúc train cho nó

>>> positive_featuresets = list(map(features, sports_sentences))
>>> unlabeled_featuresets = list(map(features, various_sentences))
>>> classifier = PositiveNaiveBayesClassifier.train(positive_featuresets, unlabeled_featuresets)

Rồi xong, thử nhé

>>> classifier.classify(features('The cat is on the table'))
False

>>> classifier.classify(features('My team lost the game'))
True

Giờ chắc tò mò lắm phải không? Nếu bạn đang còn băn khoăn và mới bước vào thế giới ML thì bạn có thể đọc tựa Natural Language Processing with Python tại http://www.nltk.org/book/

Về ML thì có thì nói như Amazon thì nó là thứ giúp chúng ta sử dụng hiệu quả dữ liệu đã xảy ra (thu thập được) để giúp các Sếp đưa ra quyết định kinh doanh tốt hơn. Trong đó việc áp dụng các giải thuật ML sẽ giúp tạo nên các tập dữ liệu mẫu, tập nhận dạng và dùng toán học để khai phá trong khối dữ liệu lớn, từ đó tiên đoán được những thứ bạn mong đợi, hay thậm chí vượt sự mong đợi của bạn.

Bài tiếp theo sẽ viết một chút về AI và xu thế hiện nay, liệu anh em ta có thể làm được những gì?

PS: Anh em nào là nhà nghiên cứu về ML xin cho em và team được thỉnh giáo. Em thì mới chập chững, những gì viết ra chỉ là hóng hớt từ anh em, nhưng em hi vọng được giao lưu với anh em yêu thích về ML. Anh em có thể comment ở dưới bài viết hoặc nhắn tin cho em m.me/phuongcsa đều tốt cả ❤

Tham khảo thêm

(1) https://vi.wikipedia.org/wiki/%C4%90%E1%BB%8Bnh_l%C3%BD_Bayes

(2) https://vi.wikipedia.org/wiki/Suy_lu%E1%BA%ADn_Bayes

(3) http://www.nltk.org/api/nltk.classify.html

A single golf clap? Or a long standing ovation?

By clapping more or less, you can signal to us which stories really stand out.