2009-12-29 27 views
9

Tôi đang làm việc để triển khai Bộ phân loại A Naive Bayes. Programming Collective Intelligence giới thiệu chủ đề này bằng cách mô tả Bayes Theorem như:Hiểu Định lý Bayes

Pr(A | B) = Pr(B | A) x Pr(A)/Pr(B) 

Cũng như một ví dụ cụ thể có liên quan đến phân loại tài liệu:

Pr(Category | Document) = Pr(Document | Category) x Pr(Category)/Pr(Document) 

Tôi đã hy vọng ai đó có thể giải thích cho tôi những ký hiệu sử dụng ở đây, những gì làm Pr (A | B) và Pr (A) có nghĩa là gì? Nó trông giống như một số loại chức năng nhưng sau đó những gì hiện các đường ống có nghĩa là, vv? (Tôi bị mất một chút)

Xin cảm ơn trước.

+1

chắc chắn là một câu hỏi http://mathoverflow.net/. –

+10

@Ofri Raviv: Tôi nghi ngờ điều đó. MathOverflow dành cho các nhà toán học chuyên nghiệp, câu hỏi này sẽ bị đóng ngay lập tức. –

+1

Vui lòng sử dụng mathoverflow.net. Mối quan tâm duy nhất của tôi rằng câu hỏi này sẽ được đóng lại ở đó quá đơn giản. –

Trả lời

11
  • Pr (A | B) = Xác suất của A xảy ra cho rằng B đã xảy ra
  • Pr (A) = Xác suất của A xảy ra

Nhưng ở trên là liên quan đến việc tính toán với xác suất có điều kiện. Những gì bạn muốn là một trình phân loại, trong đó sử dụng nguyên tắc này để quyết định xem một cái gì đó thuộc về một thể loại dựa trên xác suất trước đó.

Xem http://en.wikipedia.org/wiki/Naive_Bayes_classifier cho một ví dụ hoàn chỉnh

+0

Cảm ơn bạn, có ý nghĩa. Ở khắp mọi nơi điều này được mô tả một kiến ​​thức toán học nhất định được giả định, một kiến ​​thức nhất định tôi không có :-). – benofsky

1

Pr (A | B): Xác suất có điều kiện của A: tức là xác suất A, cho rằng tất cả chúng ta đều biết là B

Pr (A): Xác suất trước của A

1

đường ống (|) có nghĩa là "đã cho". Xác suất của A cho trước B bằng với xác suất B cho A x Pr (A)/Pr (B)

1

Dựa trên câu hỏi của bạn, tôi có thể khuyên bạn nên đọc một số sách đại học về lý thuyết xác suất trước . Nếu không có điều này bạn sẽ không thăng tiến đúng với nhiệm vụ của bạn trên Naive Bayes Classifier.

Tôi muốn giới thiệu cho bạn cuốn sách này http://www.athenasc.com/probbook.html hoặc xem MIT OpenCourseWare.

+0

Cảm ơn, tôi chắc chắn sẽ xem xét điều đó. – benofsky

0

Hình như tôi đang viết một cách chính xác những điều tương tự như bạn làm :)

Tôi đã cố gắng tìm một thư viện (trong ruby) để phân loại tài liệu sử dụng Naive Bayes. Tìm thấy một số thư viện, nhưng mỗi thư viện lại có tập hợp các vấn đề riêng. Vì vậy, tôi đã kết thúc bằng văn bản thực hiện của riêng tôi. Bài viết wikipedia rất khó hiểu, đặc biệt nếu bạn là người mới đối với loại điều này. Đối với tôi, các bài viết của Paul Graham về triển khai bộ lọc spam tốt hơn nhiều.

Tôi đã ghi lại chi tiết tại đây: http://arubyguy.com/2011/03/03/bayes-classification-update/ Tôi cũng sẽ xuất bản phiên bản đã hoàn thành của mình khi thực hiện xong.

4

Tôi nghĩ rằng chúng đã giúp bạn tìm hiểu các khái niệm cơ bản.

Pr(A | B) = Pr(B | A) x Pr(A)/Pr(B) 

đọc: xác suất của A B cho là giống như xác suất của B cho Một lần xác suất của A chia cho xác suất của B. Nó thường được sử dụng khi bạn có thể đo xác suất của B và bạn đang cố gắng tìm hiểu xem liệu B có dẫn chúng ta tin vào A. Hay nói cách khác, chúng ta thực sự quan tâm đến A, nhưng chúng ta có thể đo B trực tiếp hơn, vì vậy hãy bắt đầu với những gì chúng ta có thể đo lường.

Hãy để tôi cung cấp cho bạn một dẫn xuất giúp việc viết mã dễ dàng hơn. Nó xuất phát từ Judea Pearl. Tôi đã vật lộn với điều này một chút, nhưng sau khi tôi nhận ra cách Trân Châu giúp chúng ta biến lý thuyết thành mã, ánh sáng bật lên cho tôi.

Tỷ lệ Trước:

O(H) = P(H)/1 - P(H) 

Khả năng Ratio:

L(e|H) = P(e|H)/P(e|¬H) 

Posterior Tỷ lệ:

O(H|e) = L(e|H)O(H) 

Trong tiếng Anh, chúng ta đang nói rằng tỷ lệ cược của một cái gì đó bạn quan tâm (H cho giả thuyết) chỉ đơn giản là số lần bạn tìm thấy một cái gì đó là đúng chia cho những lần bạn thấy nó không đúng. Vì vậy, nói rằng một ngôi nhà bị cướp mỗi ngày trong số 10.000. Điều đó có nghĩa là bạn có 1/10.000 cơ hội bị cướp, không có bằng chứng nào khác được xem xét.

Tiếp theo là đo bằng chứng bạn đang xem. Xác suất nhìn thấy bằng chứng bạn thấy khi câu hỏi của bạn là đúng chia cho xác suất nhìn thấy bằng chứng bạn thấy khi câu hỏi của bạn không đúng. Giả sử bạn đang nghe báo trộm của bạn tắt. Tần suất bạn nhận được báo động khi nó được cho là sẽ tắt (ai đó mở một cửa sổ khi chuông báo động bật) so với khi nó không được tắt (gió sẽ tắt báo thức). Nếu bạn có một cơ hội 95% của một tên trộm tắt báo thức và một cơ hội 1% của cái gì khác đặt ra báo động, sau đó bạn có một khả năng 95,0.

Niềm tin tổng thể của bạn chỉ là khả năng * tỷ lệ cược trước. Trong trường hợp này đó là:

((0.95/0.01) * ((10**-4)/(1 - (10**-4)))) 
# => 0.0095009500950095 

Tôi không biết nếu điều này làm cho nó bất kỳ rõ ràng hơn, nhưng nó có xu hướng được dễ dàng hơn để có một số mã mà theo dõi tỷ lệ cược trước, các mã khác để nhìn vào các khả năng, và thêm một đoạn mã để kết hợp thông tin này.

4

Tôi đã triển khai nó bằng Python. Nó rất dễ hiểu bởi vì tất cả các công thức cho định lý Bayes là trong các chức năng riêng biệt:

#Bayes Theorem 

def get_outcomes(sample_space, f_name='', e_name=''): 
    outcomes = 0 
    for e_k, e_v in sample_space.items(): 
     if f_name=='' or f_name==e_k: 
      for se_k, se_v in e_v.items(): 
       if e_name!='' and se_k == e_name: 
        outcomes+=se_v 
       elif e_name=='': 
        outcomes+=se_v 
    return outcomes 

def p(sample_space, f_name): 
    return get_outcomes(sample_space, f_name)/get_outcomes(sample_space, '', '') 

def p_inters(sample_space, f_name, e_name): 
    return get_outcomes(sample_space, f_name, e_name)/get_outcomes(sample_space, '', '') 

def p_conditional(sample_space, f_name, e_name): 
    return p_inters(sample_space, f_name, e_name)/p(sample_space, f_name) 

def bayes(sample_space, f, given_e): 
    sum = 0; 
    for e_k, e_v in sample_space.items(): 
     sum+=p(sample_space, e_k) * p_conditional(sample_space, e_k, given_e) 
    return p(sample_space, f) * p_conditional(sample_space, f, given_e)/sum 

sample_space = {'UK':{'Boy':10, 'Girl':20}, 
       'FR':{'Boy':10, 'Girl':10}, 
       'CA':{'Boy':10, 'Girl':30}} 

print('Probability of being from FR:', p(sample_space, 'FR')) 
print('Probability to be French Boy:', p_inters(sample_space, 'FR', 'Boy')) 
print('Probability of being a Boy given a person is from FR:', p_conditional(sample_space, 'FR', 'Boy')) 
print('Probability to be from France given person is Boy:', bayes(sample_space, 'FR', 'Boy')) 

sample_space = {'Grow' :{'Up':160, 'Down':40}, 
       'Slows':{'Up':30, 'Down':70}} 

print('Probability economy is growing when stock is Up:', bayes(sample_space, 'Grow', 'Up')) 
3

Cá nhân tôi thấy lời giải thích này best

0

Các ống được sử dụng để đại diện cho khả năng có điều kiện. Pr (A | B) = Xác suất của A được cho trước B

Ví dụ: Giả sử bạn không cảm thấy khỏe và lướt web vì các triệu chứng. Và internet nói với bạn rằng nếu bạn có những triệu chứng này thì bạn có bệnh XYZ.

Trong trường hợp này: Pr (A | B) là những gì bạn đang cố gắng tìm hiểu, đó là: Xác suất bạn có XYZ GIVEN R youNG bạn có các triệu chứng nhất định.

Pr (A) là xác suất có bệnh XYZ

Pr (B) là xác suất của việc có những triệu chứng

Pr (B | A) là những gì bạn tìm hiểu từ internet, đó là: Xác suất có các triệu chứng GIVEN R you R youNG bạn có bệnh.