Một lời giải thích đơn giản về phân loại Naive Bayes


547

Tôi cảm thấy khó hiểu quá trình của Naive Bayes, và tôi đã tự hỏi liệu ai đó có thể giải thích nó bằng một quy trình từng bước đơn giản bằng tiếng Anh. Tôi hiểu rằng cần phải so sánh theo thời gian xảy ra như một xác suất, nhưng tôi không biết dữ liệu đào tạo có liên quan đến tập dữ liệu thực tế như thế nào.

Xin vui lòng cho tôi một lời giải thích về vai trò của tập huấn luyện. Tôi đang đưa ra một ví dụ rất đơn giản cho các loại trái cây ở đây, ví dụ như chuối

training set---
round-red
round-orange
oblong-yellow
round-red

dataset----
round-red
round-orange
round-red
round-orange
oblong-yellow
round-red
round-orange
oblong-yellow
oblong-yellow
round-red

18
Nó khá dễ nếu bạn hiểu Định lý Bayes. Nếu bạn chưa đọc 'định lý Bayes', hãy thử liên kết này yudkowsky.net/rational/bayes .
Pinch

1
hãy giải thích ví dụ của bạn cho dòng đầu tiên trong tập huấn luyện của bạn: vòng được phân loại là màu đỏ, hoặc là cả hai, các biến tròn và đỏ được phân loại là một cái gì khác? nếu là cái sau, phân loại cho mỗi mục trong tập huấn luyện của bạn là gì?
K Mehta

22
LƯU Ý: Câu trả lời được chấp nhận dưới đây không phải là một ví dụ truyền thống cho Naïve Bayes. Đó chủ yếu là ak Thực hiện hàng xóm gần nhất. Đọc cho phù hợp.
chmullig

1
@Jaggerjack: Câu trả lời của RamNaraimhan được giải thích rõ hơn câu trả lời được chấp nhận.
Unmesha SreeVeni

2
Chà, nếu người ta nhìn thấy một biểu đồ với một số dấu chấm không thực sự có nghĩa đó là KNN :) Cách bạn tính toán xác suất là tùy thuộc vào bạn. Naive Bayes tính toán nó bằng cách sử dụng trước nhân với khả năng vì vậy đó là những gì Yavar đã thể hiện trong câu trả lời của mình. Làm thế nào để đến những xác suất đó thực sự không quan trọng ở đây. Câu trả lời là hoàn toàn chính xác và tôi thấy không có vấn đề gì trong đó.
avinash shah

Câu trả lời:


672

Câu hỏi của bạn khi tôi hiểu nó được chia thành hai phần, phần một là bạn cần hiểu rõ hơn về trình phân loại Naive Bayes và phần hai là sự nhầm lẫn xung quanh Tập huấn luyện.

Nói chung, tất cả các thuật toán học máy cần được đào tạo cho các nhiệm vụ học tập có giám sát như phân loại, dự đoán, v.v. hoặc cho các nhiệm vụ học tập không giám sát như phân cụm.

Trong bước đào tạo, các thuật toán được dạy với một bộ dữ liệu đầu vào cụ thể (tập huấn luyện) để sau này chúng tôi có thể kiểm tra chúng cho các đầu vào chưa biết (mà chúng chưa từng thấy trước đây) mà chúng có thể phân loại hoặc dự đoán, v.v. (trong trường hợp được giám sát học tập) dựa trên học tập của họ. Đây là những gì mà hầu hết các kỹ thuật Machine Learning như Neural Networks, SVM, Bayesian, v.v.

Vì vậy, trong một dự án Machine Learning chung về cơ bản, bạn phải chia bộ đầu vào của mình thành Tập phát triển (Tập huấn luyện + Tập kiểm tra phát triển) & Tập kiểm tra (hoặc Tập đánh giá). Hãy nhớ mục tiêu cơ bản của bạn sẽ là hệ thống của bạn học và phân loại các đầu vào mới mà chúng chưa từng thấy trước đây trong tập Dev hoặc tập kiểm tra.

Bộ kiểm tra thường có định dạng giống như tập huấn luyện. Tuy nhiên, điều rất quan trọng là bộ kiểm tra phải khác biệt với tập huấn luyện: nếu chúng ta chỉ sử dụng lại tập huấn làm tập kiểm tra, thì một mô hình chỉ ghi nhớ đầu vào của nó, mà không học cách khái quát hóa cho các ví dụ mới, sẽ nhận được một cách sai lệch điểm cao.

Nói chung, ví dụ, 70% dữ liệu của chúng tôi có thể được sử dụng làm trường hợp tập huấn. Cũng nhớ phân vùng bộ gốc vào bộ huấn luyện và kiểm tra ngẫu nhiên .

Bây giờ tôi đến câu hỏi khác của bạn về Naive Bayes.

Để thể hiện khái niệm Phân loại Naïve Bayes, hãy xem xét ví dụ được đưa ra dưới đây:

nhập mô tả hình ảnh ở đây

Như đã chỉ ra, các đối tượng có thể được phân loại là GREENhoặc RED. Nhiệm vụ của chúng tôi là phân loại các trường hợp mới khi chúng đến, tức là quyết định chúng thuộc về nhãn lớp nào, dựa trên các đối tượng hiện có.

Vì có số lượng GREENđối tượng nhiều gấp đôi RED, nên có thể tin rằng một trường hợp mới (chưa được quan sát) có khả năng có thành viên GREENcao gấp đôi RED. Trong phân tích Bayes, niềm tin này được gọi là xác suất trước. Xác suất trước dựa trên kinh nghiệm trước đó, trong trường hợp này là tỷ lệ phần trăm GREENREDđối tượng và thường được sử dụng để dự đoán kết quả trước khi chúng thực sự xảy ra.

Vì vậy, chúng ta có thể viết:

Xác suất trước củaGREEN :number of GREEN objects / total number of objects

Xác suất trước củaRED :number of RED objects / total number of objects

Vì có tổng số 60đối tượng, 40trong đó có GREENvà 20 RED, xác suất trước đây của chúng tôi cho thành viên lớp là:

Xác suất trước choGREEN :40 / 60

Xác suất trước choRED :20 / 60

Đã xác định xác suất trước của chúng tôi, bây giờ chúng tôi đã sẵn sàng để phân loại một đối tượng mới ( WHITEkhoanh tròn trong sơ đồ bên dưới). Vì các đối tượng được phân cụm tốt, nên có lý khi cho rằng càng nhiều GREEN(hoặc RED) các đối tượng trong vùng lân cận của X, thì các trường hợp mới càng thuộc về màu đặc biệt đó. Để đo lường khả năng này, chúng tôi vẽ một vòng tròn quanh X bao gồm một số (sẽ được chọn một ưu tiên) các điểm không phân biệt nhãn lớp của chúng. Sau đó, chúng tôi tính toán số điểm trong vòng tròn thuộc về mỗi nhãn lớp. Từ đó, chúng tôi tính toán khả năng:

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Từ hình minh họa ở trên, rõ ràng Khả năng Xcho trước GREENnhỏ hơn Khả năng Xcho trước RED, vì vòng tròn bao gồm các 1 GREENđối tượng và đối tượng 3 RED. Như vậy:

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Mặc dù các xác suất trước đó chỉ ra rằng Xcó thể thuộc về GREEN(với số lượng gấp đôi GREENso với RED), khả năng chỉ ra điều khác; rằng thành viên của lớp XRED(cho rằng có nhiều REDđối tượng trong vùng lân cận Xhơn GREEN). Trong phân tích Bayes, phân loại cuối cùng được tạo ra bằng cách kết hợp cả hai nguồn thông tin, nghĩa là trước và khả năng, để tạo thành xác suất sau sử dụng quy tắc gọi là Bayes (được đặt tên theo Rev. Thomas Bayes 1702-1761).

nhập mô tả hình ảnh ở đây

Cuối cùng, chúng tôi phân loại X REDvì thành viên lớp của nó đạt được xác suất hậu nghiệm lớn nhất.


39
không phải thuật toán này ở trên giống như hàng xóm gần nhất của k sao?
Đổi mới

251
Câu trả lời này thật khó hiểu - nó trộn lẫn KNN (k hàng xóm gần nhất) và vịnh ngây thơ.
Michal Illich

7
Câu trả lời đã được tiến hành độc đáo cho đến khi khả năng xuất hiện. Vì vậy, @Yavar đã sử dụng hàng xóm gần nhất của K để tính khả năng. Làm thế nào là đúng? Nếu có, một số phương pháp khác để tính khả năng là gì?
thúc

1
Bạn đã sử dụng một vòng tròn như một ví dụ về khả năng. Tôi đọc về vịnh Gaussian Naive trong đó khả năng là gaussian. Làm thế nào mà có thể được giải thích?
umair durrani

1
Trên thực tế, câu trả lời với knn là chính xác. Nếu bạn không biết phân phối và do đó, mật độ xác suất của phân phối đó, bằng cách nào đó bạn phải tìm thấy nó. Điều này có thể được thực hiện thông qua kNN hoặc Kernels. Tôi nghĩ rằng có một số điều còn thiếu. Bạn có thể kiểm tra trình bày này mặc dù.
CS

1053

Tôi nhận ra rằng đây là một câu hỏi cũ, với một câu trả lời được thiết lập. Lý do tôi đăng là câu trả lời được chấp nhận có nhiều yếu tố của k-NN ( hàng xóm k -gần nhất), một thuật toán khác.

Cả k-NN và NaiveBayes đều là thuật toán phân loại. Về mặt khái niệm, k-NN sử dụng ý tưởng "gần" để phân loại các thực thể mới. Trong k-NN, "độ gần" được mô hình hóa với các ý tưởng như Khoảng cách Euclide hoặc Khoảng cách Cosine. Ngược lại, ở NaiveBayes, khái niệm 'xác suất' được sử dụng để phân loại các thực thể mới.

Vì câu hỏi là về Naive Bayes, đây là cách tôi mô tả các ý tưởng và các bước cho ai đó. Tôi sẽ cố gắng làm điều đó với càng ít phương trình và bằng tiếng Anh càng nhiều càng tốt.

Đầu tiên, Xác suất có điều kiện & Quy tắc Bayes

Trước khi ai đó có thể hiểu và đánh giá cao các sắc thái của Naive Bayes, trước tiên họ cần biết một vài khái niệm liên quan, cụ thể là ý tưởng về Xác suất có điều kiện và Quy tắc của Bayes. (Nếu bạn quen thuộc với các khái niệm này, hãy bỏ qua phần có tiêu đề Bắt đầu đến Naive Bayes ' )

Xác suất có điều kiện bằng tiếng Anh đơn giản: Xác suất để điều gì đó sẽ xảy ra, với điều gì đó đã xảy ra.

Chúng ta hãy nói rằng có một số Kết quả O. Và một số Bằng chứng E. Từ cách xác định các xác suất này: Xác suất có cả Kết quả O và Bằng chứng E là: (Xác suất xảy ra O) nhân với (Xác suất của E cho rằng O đã xảy ra)

Một ví dụ để hiểu Xác suất có điều kiện:

Hãy nói rằng chúng tôi có một bộ sưu tập Thượng nghị sĩ Hoa Kỳ. Thượng nghị sĩ có thể là đảng Dân chủ hoặc Cộng hòa. Họ cũng là nam hoặc nữ.

Nếu chúng ta chọn một thượng nghị sĩ hoàn toàn ngẫu nhiên, xác suất người này là nữ Dân chủ là bao nhiêu? Xác suất có điều kiện có thể giúp chúng ta trả lời điều đó.

Xác suất của (Dân chủ và Thượng nghị sĩ nữ) = Prob (Thượng nghị sĩ là Dân chủ) nhân với Xác suất có điều kiện là Nữ cho rằng họ là Dân chủ.

  P(Democrat & Female) = P(Democrat) * P(Female | Democrat) 

Chúng ta có thể tính toán chính xác điều tương tự, theo cách ngược lại:

  P(Democrat & Female) = P(Female) * P(Democrat | Female) 

Hiểu quy tắc Bayes

Về mặt khái niệm, đây là một cách để đi từ P (Evidence | Known Outcome) đến P (Outcome | Known Evidence). Thông thường, chúng tôi biết tần suất một số bằng chứng cụ thể được quan sát, đưa ra một kết quả đã biết . Chúng ta phải sử dụng thực tế đã biết này để tính toán ngược lại, để tính toán khả năng kết quả đó xảy ra , đưa ra bằng chứng.

P (Kết quả được đưa ra mà chúng tôi biết một số Bằng chứng) = P (Bằng chứng được đưa ra mà chúng tôi biết Kết quả) lần Prob (Kết quả), được chia tỷ lệ theo P (Bằng chứng)

Ví dụ kinh điển để hiểu Quy tắc của Bayes:

Probability of Disease D given Test-positive = 

               Prob(Test is positive|Disease) * P(Disease)
     _______________________________________________________________
     (scaled by) Prob(Testing Positive, with or without the disease)

Bây giờ, tất cả điều này chỉ là lời mở đầu, để đến Naive Bayes.

Đến Naive Bayes '

Cho đến nay, chúng ta chỉ nói về một bằng chứng. Trong thực tế, chúng ta phải dự đoán một kết quả được đưa ra nhiều bằng chứng. Trong trường hợp đó, toán học trở nên rất phức tạp. Để giải quyết vấn đề phức tạp đó, một cách tiếp cận là 'tách rời' nhiều bằng chứng và coi mỗi phần bằng chứng là độc lập. Cách tiếp cận này là lý do tại sao điều này được gọi là Bayes ngây thơ .

P(Outcome|Multiple Evidence) = 
P(Evidence1|Outcome) * P(Evidence2|outcome) * ... * P(EvidenceN|outcome) * P(Outcome)
scaled by P(Multiple Evidence)

Nhiều người chọn ghi nhớ điều này như:

                      P(Likelihood of Evidence) * Prior prob of outcome
P(outcome|evidence) = _________________________________________________
                                         P(Evidence)

Lưu ý một vài điều về phương trình này:

  • Nếu Prob (bằng chứng | kết quả) là 1, thì chúng ta chỉ nhân với 1.
  • Nếu Prob (một số bằng chứng cụ thể | kết quả) bằng 0, thì toàn bộ thăm dò. trở thành 0. Nếu bạn thấy bằng chứng mâu thuẫn, chúng ta có thể loại trừ kết quả đó.
  • Vì chúng ta chia mọi thứ cho P (Bằng chứng), chúng ta thậm chí có thể thoát khỏi mà không cần tính toán.
  • Trực giác đằng sau nhân với ưu tiên là để chúng tôi đưa ra xác suất cao cho các kết quả phổ biến hơn và xác suất thấp cho các kết quả không mong muốn. Chúng cũng được gọi base ratesvà chúng là một cách để mở rộng xác suất dự đoán của chúng tôi.

Làm thế nào để áp dụng NaiveBayes để dự đoán kết quả?

Chỉ cần chạy công thức trên cho mỗi kết quả có thể. Vì chúng tôi đang cố gắng phân loại , mỗi kết quả được gọi là a classclass label.công việc của chúng tôi là xem xét bằng chứng, xem xét khả năng nó là lớp này hoặc lớp đó và gán nhãn cho mỗi thực thể. Một lần nữa, chúng tôi thực hiện một cách tiếp cận rất đơn giản: Lớp có xác suất cao nhất được tuyên bố là "người chiến thắng" và nhãn lớp đó được gán cho sự kết hợp các bằng chứng đó.

Ví dụ trái cây

Hãy thử lấy một ví dụ để tăng hiểu biết của chúng tôi: OP đã yêu cầu một ví dụ nhận dạng 'trái cây'.

Hãy nói rằng chúng tôi có dữ liệu về 1000 miếng trái cây. Chúng tình cờchuối , cam hoặc một số loại trái cây khác . Chúng tôi biết 3 đặc điểm về mỗi loại trái cây:

  1. Cho dù đó là dài
  2. Cho dù đó là ngọt ngào và
  3. Nếu màu của nó là Vàng.

Đây là 'tập huấn luyện' của chúng tôi. Chúng tôi sẽ sử dụng điều này để dự đoán loại trái cây mới mà chúng tôi gặp phải.

Type           Long | Not Long || Sweet | Not Sweet || Yellow |Not Yellow|Total
             ___________________________________________________________________
Banana      |  400  |    100   || 350   |    150    ||  450   |  50      |  500
Orange      |    0  |    300   || 150   |    150    ||  300   |   0      |  300
Other Fruit |  100  |    100   || 150   |     50    ||   50   | 150      |  200
            ____________________________________________________________________
Total       |  500  |    500   || 650   |    350    ||  800   | 200      | 1000
             ___________________________________________________________________

Chúng tôi có thể tính toán trước rất nhiều điều về bộ sưu tập trái cây của chúng tôi.

Cái gọi là xác suất "Ưu tiên". (Nếu chúng ta không biết bất kỳ thuộc tính trái cây nào, đây sẽ là dự đoán của chúng ta.) Đây là những thuộc tính của chúng tabase rates.

 P(Banana)      = 0.5 (500/1000)
 P(Orange)      = 0.3
 P(Other Fruit) = 0.2

Xác suất của "Bằng chứng"

p(Long)   = 0.5
P(Sweet)  = 0.65
P(Yellow) = 0.8

Xác suất của "Khả năng"

P(Long|Banana) = 0.8
P(Long|Orange) = 0  [Oranges are never long in all the fruit we have seen.]
 ....

P(Yellow|Other Fruit)     =  50/200 = 0.25
P(Not Yellow|Other Fruit) = 0.75

Cho một quả, làm thế nào để phân loại nó?

Hãy nói rằng chúng ta được cung cấp các thuộc tính của một loại trái cây chưa biết và được yêu cầu phân loại nó. Chúng ta được biết rằng quả dài, ngọt và vàng. Có phải là một quả chuối? Nó có phải là cam không? Hay là một số trái cây khác?

Chúng ta có thể chỉ cần chạy các số cho mỗi trong số 3 kết quả, từng kết quả một. Sau đó, chúng tôi chọn xác suất cao nhất và 'phân loại' trái cây chưa biết của chúng tôi thuộc về nhóm có xác suất cao nhất dựa trên bằng chứng trước đó của chúng tôi (bộ đào tạo 1000 trái cây của chúng tôi):

P(Banana|Long, Sweet and Yellow) 
      P(Long|Banana) * P(Sweet|Banana) * P(Yellow|Banana) * P(banana)
    = _______________________________________________________________
                      P(Long) * P(Sweet) * P(Yellow)

    = 0.8 * 0.7 * 0.9 * 0.5 / P(evidence)

    = 0.252 / P(evidence)


P(Orange|Long, Sweet and Yellow) = 0


P(Other Fruit|Long, Sweet and Yellow)
      P(Long|Other fruit) * P(Sweet|Other fruit) * P(Yellow|Other fruit) * P(Other Fruit)
    = ____________________________________________________________________________________
                                          P(evidence)

    = (100/200 * 150/200 * 50/200 * 200/1000) / P(evidence)

    = 0.01875 / P(evidence)

Theo tỷ lệ áp đảo ( 0.252 >> 0.01875), chúng tôi phân loại loại quả ngọt / dài / vàng này có khả năng là một quả chuối.

Tại sao Bayes Classifier rất phổ biến?

Nhìn vào những gì nó cuối cùng đi xuống. Chỉ cần một số đếm và nhân. Chúng tôi có thể tính toán trước tất cả các điều khoản này và do đó việc phân loại trở nên dễ dàng, nhanh chóng và hiệu quả.

Let z = 1 / P(evidence). Bây giờ chúng tôi nhanh chóng tính toán ba số lượng sau đây.

P(Banana|evidence) = z * Prob(Banana) * Prob(Evidence1|Banana) * Prob(Evidence2|Banana) ...
P(Orange|Evidence) = z * Prob(Orange) * Prob(Evidence1|Orange) * Prob(Evidence2|Orange) ...
P(Other|Evidence)  = z * Prob(Other)  * Prob(Evidence1|Other)  * Prob(Evidence2|Other)  ...

Chỉ định nhãn lớp của bất kỳ số nào là số cao nhất và bạn đã hoàn thành.

Mặc dù tên của nó, Naive Bayes hóa ra lại xuất sắc trong một số ứng dụng nhất định. Phân loại văn bản là một lĩnh vực mà nó thực sự tỏa sáng.

Hy vọng rằng sẽ giúp hiểu được các khái niệm đằng sau thuật toán Naive Bayes.


14
Cảm ơn lời giải thích rất rõ ràng! Dễ dàng là một trong những cái tốt hơn trôi nổi trên web. Câu hỏi: vì mỗi P (kết quả / bằng chứng) được nhân với 1 / z = p (bằng chứng) (trong trường hợp trái cây, có nghĩa là mỗi cơ bản chỉ là xác suất dựa trên bằng chứng trước đó), nên nói đúng là z không Có vấn đề gì với Naïve Bayes không? Do đó, điều đó có nghĩa là nếu, người ta chạy vào một quả dài / ngọt / vàng không phải là chuối, thì nó sẽ được phân loại không chính xác.
hiệp phương sai

7
@ E.Chow Có, bạn đúng trong việc tính toán z không quan trọng đối với Naive Bayes. (Đây là một cách để chia tỷ lệ xác suất nằm trong khoảng từ 0 đến 1.) Lưu ý rằng z là sản phẩm của xác suất của tất cả các bằng chứng trong tay. (Nó khác với các linh mục là tỷ lệ cơ sở của các lớp.) Bạn đúng: Nếu bạn đã tìm thấy một quả Long / Ngọt / Vàng không phải là chuối, NB sẽ phân loại nó không chính xác như một quả chuối, dựa trên điều này tập huấn luyện. Thuật toán này là một 'dự đoán xác suất tốt nhất dựa trên bằng chứng' và do đó, nó sẽ phân loại sai theo dịp.
Ram Narasimhan

1
@Jasper Trong bảng có tổng cộng 200 "Trái cây khác" và 50 trong số đó có màu Vàng. Vì vậy, cho rằng trái cây là "Trái cây khác", vũ trụ là 200. 50 trong số đó có màu Vàng. Do đó 50/200. Lưu ý rằng 800 là tổng số quả Vàng. Vì vậy, nếu chúng tôi muốn P (trái cây khác / Vàng), chúng tôi sẽ làm những gì bạn đề xuất: 50/800.
Ram Narasimhan

3
Giải thích tuyệt đối. Tôi không hiểu algoritm này từ các bài báo và sách học thuật. Bởi vì, giải thích bí truyền thường được chấp nhận phong cách viết có thể. Đó là tất cả, và rất dễ dàng. Cảm ơn.
Tiến sĩ Suat Atan

3
Tại sao không có xác suất thêm tới 1? Bằng chứng là 0,26 trong ví dụ (500/100 * 650/1000 * 800/1000), và do đó P cuối cùng (chuối | ...) = 0,252 / 0,26 = 0,969 và P (khác | ...) = 0,00875 / 0,26 = 0,072. Họ cùng nhau thêm tới 1,04!
Mauricio

18

Ram Narasimhan đã giải thích khái niệm này rất độc đáo dưới đây là một giải thích thay thế thông qua ví dụ mã của Naive Bayes trong hành động
Nó sử dụng một vấn đề mẫu từ cuốn sách này ở trang 351
Đây là tập dữ liệu mà chúng tôi sẽ sử dụng trong tập dữ liệu trên nếu chúng tôi đưa ra giả thuyết = thì xác suất anh ta sẽ mua hoặc không mua máy tính là bao nhiêu. Đoạn mã dưới đây trả lời chính xác câu hỏi đó. Chỉ cần tạo một tệp có tên và dán nội dung sau đây.
nhập mô tả hình ảnh ở đây
{"Age":'<=30', "Income":"medium", "Student":'yes' , "Creadit_Rating":'fair'}

new_dataset.csv

Age,Income,Student,Creadit_Rating,Buys_Computer
<=30,high,no,fair,no
<=30,high,no,excellent,no
31-40,high,no,fair,yes
>40,medium,no,fair,yes
>40,low,yes,fair,yes
>40,low,yes,excellent,no
31-40,low,yes,excellent,yes
<=30,medium,no,fair,no
<=30,low,yes,fair,yes
>40,medium,yes,fair,yes
<=30,medium,yes,excellent,yes
31-40,medium,no,excellent,yes
31-40,high,yes,fair,yes
>40,medium,no,excellent,no

Đây là mã các ý kiến ​​giải thích mọi thứ chúng tôi đang làm ở đây! [trăn]

import pandas as pd 
import pprint 

class Classifier():
    data = None
    class_attr = None
    priori = {}
    cp = {}
    hypothesis = None


    def __init__(self,filename=None, class_attr=None ):
        self.data = pd.read_csv(filename, sep=',', header =(0))
        self.class_attr = class_attr

    '''
        probability(class) =    How many  times it appears in cloumn
                             __________________________________________
                                  count of all class attribute
    '''
    def calculate_priori(self):
        class_values = list(set(self.data[self.class_attr]))
        class_data =  list(self.data[self.class_attr])
        for i in class_values:
            self.priori[i]  = class_data.count(i)/float(len(class_data))
        print "Priori Values: ", self.priori

    '''
        Here we calculate the individual probabilites 
        P(outcome|evidence) =   P(Likelihood of Evidence) x Prior prob of outcome
                               ___________________________________________
                                                    P(Evidence)
    '''
    def get_cp(self, attr, attr_type, class_value):
        data_attr = list(self.data[attr])
        class_data = list(self.data[self.class_attr])
        total =1
        for i in range(0, len(data_attr)):
            if class_data[i] == class_value and data_attr[i] == attr_type:
                total+=1
        return total/float(class_data.count(class_value))

    '''
        Here we calculate Likelihood of Evidence and multiple all individual probabilities with priori
        (Outcome|Multiple Evidence) = P(Evidence1|Outcome) x P(Evidence2|outcome) x ... x P(EvidenceN|outcome) x P(Outcome)
        scaled by P(Multiple Evidence)
    '''
    def calculate_conditional_probabilities(self, hypothesis):
        for i in self.priori:
            self.cp[i] = {}
            for j in hypothesis:
                self.cp[i].update({ hypothesis[j]: self.get_cp(j, hypothesis[j], i)})
        print "\nCalculated Conditional Probabilities: \n"
        pprint.pprint(self.cp)

    def classify(self):
        print "Result: "
        for i in self.cp:
            print i, " ==> ", reduce(lambda x, y: x*y, self.cp[i].values())*self.priori[i]

if __name__ == "__main__":
    c = Classifier(filename="new_dataset.csv", class_attr="Buys_Computer" )
    c.calculate_priori()
    c.hypothesis = {"Age":'<=30', "Income":"medium", "Student":'yes' , "Creadit_Rating":'fair'}

    c.calculate_conditional_probabilities(c.hypothesis)
    c.classify()

đầu ra:

Priori Values:  {'yes': 0.6428571428571429, 'no': 0.35714285714285715}

Calculated Conditional Probabilities: 

{
 'no': {
        '<=30': 0.8,
        'fair': 0.6, 
        'medium': 0.6, 
        'yes': 0.4
        },
'yes': {
        '<=30': 0.3333333333333333,
        'fair': 0.7777777777777778,
        'medium': 0.5555555555555556,
        'yes': 0.7777777777777778
      }
}

Result: 
yes  ==>  0.0720164609053
no  ==>  0.0411428571429

Hy vọng nó sẽ giúp hiểu rõ hơn vấn đề

Sự thanh bình


18

Naive Bayes: Naive Bayes được giám sát học máy, được sử dụng để phân loại các bộ dữ liệu. Nó được sử dụng để dự đoán mọi thứ dựa trên kiến ​​thức độc lập và giả định trước đó.

Họ gọi nó là ngây thơ bởi vì đó là giả định (giả định rằng tất cả các tính năng trong bộ dữ liệu đều quan trọng và độc lập như nhau) thực sự lạc quan và hiếm khi đúng trong hầu hết các ứng dụng trong thế giới thực.

Đây là thuật toán phân loại đưa ra quyết định cho tập dữ liệu chưa biết. Nó dựa trên Định lý Bayes mô tả xác suất của một sự kiện dựa trên kiến ​​thức trước đó của nó.

Dưới đây biểu đồ cho thấy Bayes ngây thơ hoạt động như thế nào

nhập mô tả hình ảnh ở đây

Công thức dự đoán NB:

nhập mô tả hình ảnh ở đây

Làm thế nào để sử dụng thuật toán Naive Bayes?

Hãy lấy một ví dụ về cách NB woks

Bước 1: Đầu tiên chúng ta tìm ra Khả năng của bảng cho thấy xác suất có hoặc không trong sơ đồ bên dưới. Bước 2: Tìm xác suất sau của mỗi lớp.

nhập mô tả hình ảnh ở đây

Problem: Find out the possibility of whether the player plays in Rainy condition?

P(Yes|Rainy) = P(Rainy|Yes) * P(Yes) / P(Rainy)

P(Rainy|Yes) = 2/9 = 0.222
P(Yes) = 9/14 = 0.64
P(Rainy) = 5/14 = 0.36

Now, P(Yes|Rainy) = 0.222*0.64/0.36 = 0.39 which is lower probability which means chances of the match played is low.

Để tham khảo thêm tham khảo các blog này .

Tham khảo Kho lưu trữ GitHub Naive-Bayes-Ví dụ


14

Tôi cố gắng giải thích quy tắc Bayes bằng một ví dụ.

Cơ hội mà một người ngẫu nhiên được chọn từ xã hội là người hút thuốc là gì?

Bạn có thể trả lời 10%.

Bây giờ, nếu người đó là một người đàn ông15 tuổi thì sao?

Không thể là 60%, trong khi chúng tôi biết rằng tỷ lệ người hút thuốc là rất thấp. Nó cũng không thể dưới 10%. 15 hoặc 20% là những dự đoán tốt hơn.

Trên thực tế, chúng tôi cố gắng cập nhật dự đoán ban đầu với các bằng chứng mới ( P(smoker) vs. P(smoker | evidence)). Quy tắc Bayes là một cách để kết nối hai xác suất này.

P(smoker | evidence) = P(smoker)* p(evidence | smoker)/P(evidence)

Mỗi bằng chứng có thể tăng hoặc giảm cơ hội này. Ví dụ, thực tế rằng anh ta là một người đàn ông có thể tăng cơ hội, với điều kiện tỷ lệ này (là đàn ông) trong số những người không hút thuốc là thấp hơn. Nói cách khác, là một người đàn ông phải là một chỉ số tốt để trở thành người hút thuốc chứ không phải là người không hút thuốc.

Chúng tôi có thể thể hiện sự đóng góp này theo một cách khác quá. Đối với mỗi tính năng, bạn có thể so sánh mức độ phổ biến (xác suất) của tính năng đó trong các điều kiện nhất định với tính phổ biến của nó. ( P(f | x) vs. P(f)).

P(smoker | evidence) / P(smoker) = P(evidence | smoker)/P(evidence)

Ví dụ, nếu chúng ta biết rằng 90% người hút thuốc là đàn ông, vẫn chưa đủ để nói liệu đàn ông có phải là một chỉ số của người hút thuốc hay không. Ví dụ, nếu xác suất trở thành đàn ông trong xã hội cũng là 90%, thì việc biết rằng ai đó là đàn ông không giúp chúng ta ((90% / 90%) = 1. Nhưng nếu đàn ông đóng góp cho 40% xã hội, nhưng 90% người hút thuốc, thì biết rằng ai đó là đàn ông sẽ tăng cơ hội hút thuốc (90% / 40%) = 2.25, do đó, nó làm tăng dự đoán ban đầu (10%) lên 2,25, kết quả là 22,5%.

Tuy nhiên, nếu xác suất trở thành đàn ông là 95% trong xã hội, thì bất kể thực tế là tỷ lệ nam giới trong số những người hút thuốc là cao (90%)! bằng chứng cho thấy ai đó là đàn ông làm giảm cơ hội anh ta hút thuốc! (90% / 95%) = 0.95).

Vì vậy chúng tôi có:

P(smoker | f1, f2, f3,... ) = P(smoker) * contribution of f1* contribution of f2 *... =
P(smoker)* 
(P(being a man | smoker)/P(being a man))*
(P(under 20 | smoker)/ P(under 20))

Lưu ý rằng trong công thức này, chúng tôi cho rằng là đàn ôngdưới 20 tuổi là những đặc điểm độc lập nên chúng tôi đã nhân lên chúng, điều đó có nghĩa là biết rằng ai đó dưới 20 tuổi không có tác dụng gì trong việc đoán rằng anh ta là đàn ông hay phụ nữ. Nhưng nó có thể không đúng, ví dụ có lẽ hầu hết thanh thiếu niên trong xã hội là đàn ông ...

Để sử dụng công thức này trong một bộ phân loại

Phân loại được đưa ra với một số tính năng (là một người đàn ông và dưới 20 tuổi) và nó phải quyết định xem anh ta có phải là người hút thuốc hay không (đây là hai lớp). Nó sử dụng công thức trên để tính xác suất của mỗi lớp theo bằng chứng (tính năng) và nó gán cho lớp có xác suất cao nhất cho đầu vào. Để cung cấp các xác suất cần thiết (90%, 10%, 80% ...), nó sử dụng tập huấn luyện. Ví dụ, nó đếm những người trong tập huấn luyện là những người hút thuốc và thấy họ đóng góp 10% trong mẫu. Sau đó, đối với người hút thuốc, hãy kiểm tra xem có bao nhiêu người là nam hay nữ .... có bao nhiêu người trên 20 hoặc dưới 20 .... Nói cách khác, họ cố gắng xây dựng phân phối xác suất của các tính năng cho mỗi lớp dựa trên khóa đào tạo dữ liệu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.