คำอธิบายอย่างง่ายของการจำแนก Naive Bayes


547

ฉันพบว่ามันยากที่จะเข้าใจกระบวนการของ Naive Bayes และฉันสงสัยว่ามีคนอธิบายได้ด้วยขั้นตอนง่าย ๆ เป็นภาษาอังกฤษ ฉันเข้าใจว่าต้องใช้การเปรียบเทียบตามเวลาที่เกิดขึ้นเป็นความน่าจะเป็น แต่ฉันไม่รู้ว่าข้อมูลการฝึกอบรมนั้นเกี่ยวข้องกับชุดข้อมูลจริงอย่างไร

โปรดอธิบายให้ฉันฟังว่าชุดฝึกอบรมมีบทบาทอย่างไร ฉันให้ตัวอย่างง่ายๆสำหรับผลไม้ที่นี่เช่นกล้วยเป็นต้น

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
มันค่อนข้างง่ายถ้าคุณเข้าใจทฤษฎีบทของเบย์ หากคุณยัง' อ่านบน Bayes' ทฤษฎีบทลองลิงค์นี้yudkowsky.net/rational/bayes
หยิก

1
โปรดอธิบายตัวอย่างของคุณ สำหรับบรรทัดแรกในชุดการฝึกอบรมของคุณ: มีการจำแนกแบบกลมเป็นสีแดงหรือเป็นตัวแปรทั้งแบบกลมและสีแดงที่จัดเป็นอย่างอื่นหรือไม่ หากเป็นรายการหลังการจำแนกประเภทสำหรับแต่ละรายการในชุดการฝึกอบรมของคุณคืออะไร
K Mehta

22
หมายเหตุ: คำตอบที่ยอมรับด้านล่างไม่ใช่ตัวอย่างดั้งเดิมของNaïve Bayes ส่วนใหญ่เป็นการใช้งาน Neighbor Neighbor ที่ใกล้ที่สุด อ่านตาม
chmullig

1
@Jaggerjack: คำตอบของ RamNarasimhan ดีกว่าคำตอบที่ยอมรับ
Unmesha SreeVeni

2
ทีนี้ถ้าใครเห็นกราฟที่มีจุดบางจุดที่ไม่ได้หมายความว่ามันเป็น KNN :) วิธีที่คุณคำนวณความน่าจะเป็นนั้นขึ้นอยู่กับคุณ Naive Bayes คำนวณโดยใช้การคูณก่อนหน้าด้วยความน่าจะเป็นนั่นคือสิ่งที่ Yavar แสดงในคำตอบของเขา วิธีที่จะมาถึงความน่าจะเป็นเหล่านั้นไม่สำคัญเลย คำตอบนั้นถูกต้องอย่างแน่นอนและฉันไม่เห็นปัญหาใด ๆ
avinash shah

คำตอบ:


672

คำถามของคุณในขณะที่ฉันเข้าใจว่ามันถูกแบ่งออกเป็นสองส่วนส่วนที่หนึ่งคุณต้องการความเข้าใจที่ดีขึ้นของตัวจําแนก Naive Bayes & ส่วนที่สองเป็นความสับสนรอบ ๆ ชุดฝึกอบรม

โดยทั่วไปอัลกอริทึมการเรียนรู้ของเครื่องทั้งหมดจะต้องได้รับการฝึกอบรมสำหรับงานการเรียนรู้แบบมีผู้สอนเช่นการจำแนกการทำนายและอื่น ๆ หรือสำหรับการเรียนรู้ที่ไม่มีผู้ดูแลเช่นการจัดกลุ่ม

ในระหว่างขั้นตอนการฝึกอบรมอัลกอริทึมจะถูกสอนด้วยชุดข้อมูลเฉพาะ (ชุดฝึกอบรม) เพื่อให้เราสามารถทดสอบพวกเขาสำหรับอินพุตที่ไม่รู้จัก (ซึ่งพวกเขาไม่เคยเห็นมาก่อน) ซึ่งพวกเขาอาจจำแนกหรือทำนายอื่น ๆ การเรียนรู้) ขึ้นอยู่กับการเรียนรู้ของพวกเขา นี่คือสิ่งที่ส่วนใหญ่ของเทคนิคการเรียนรู้ของเครื่องเช่นโครงข่ายประสาทเทียม, SVM, Bayesian เป็นต้นขึ้นอยู่กับ

ดังนั้นในโครงการการเรียนรู้ของเครื่องทั่วไปโดยทั่วไปคุณต้องแบ่งชุดข้อมูลเข้าของคุณเป็นชุดพัฒนา (ชุดฝึกอบรม + ชุดทดสอบ Dev-Test) และชุดทดสอบ (หรือชุดประเมิน) โปรดจำไว้ว่าวัตถุประสงค์พื้นฐานของคุณคือระบบของคุณเรียนรู้และจำแนกอินพุตใหม่ที่พวกเขาไม่เคยเห็นมาก่อนในชุด Dev หรือชุดทดสอบ

โดยทั่วไปชุดทดสอบจะมีรูปแบบเดียวกับชุดฝึกอบรม อย่างไรก็ตามมันเป็นสิ่งสำคัญมากที่ชุดทดสอบนั้นแตกต่างจากคลังฝึกอบรม: ถ้าเรานำชุดฝึกกลับมาใช้ซ้ำเป็นชุดทดสอบดังนั้นโมเดลที่จดจำการป้อนข้อมูลโดยไม่ต้องเรียนรู้ที่จะพูดคุยกับตัวอย่างใหม่จะทำให้เข้าใจผิด คะแนนสูง.

โดยทั่วไปตัวอย่างเช่น 70% ของข้อมูลของเราสามารถใช้เป็นกรณีชุดฝึกอบรม ยังจำได้แบ่งพาร์ติชันชุดเดิมในการฝึกอบรมและการทดสอบชุดสุ่ม

ตอนนี้ฉันมาถึงคำถามอื่นของคุณเกี่ยวกับ Naive Bayes

เพื่อแสดงแนวคิดของการจำแนกNaïve Bayes ให้พิจารณาตัวอย่างที่ระบุด้านล่าง:

ป้อนคำอธิบายรูปภาพที่นี่

ตามที่ระบุวัตถุที่สามารถจัดเป็นอย่างใดอย่างหนึ่งหรือGREEN REDงานของเราคือการจำแนกกรณีใหม่เมื่อพวกเขามาถึงคือตัดสินใจว่าจะติดป้ายชื่อของชั้นเรียนใดขึ้นอยู่กับวัตถุที่มีอยู่ในปัจจุบัน

เนื่องจากมีสองเท่าGREENเป็นวัตถุREDมันก็มีเหตุผลที่จะเชื่อว่ากรณีใหม่ (ซึ่งยังไม่ได้รับการปฏิบัติยัง) เป็นสองเท่าแนวโน้มที่จะมีสมาชิกมากกว่าGREEN REDในการวิเคราะห์แบบเบย์ความเชื่อนี้เรียกว่าความน่าจะเป็นก่อนหน้านี้ ความน่าจะเป็นมาก่อนขึ้นอยู่กับประสบการณ์ก่อนหน้านี้ในกรณีนี้เปอร์เซ็นต์GREENและREDวัตถุและมักใช้เพื่อทำนายผลลัพธ์ก่อนที่จะเกิดขึ้นจริง

ดังนั้นเราสามารถเขียน:

ความน่าจะเป็นก่อนGREEN :number of GREEN objects / total number of objects

ความน่าจะเป็นก่อนRED :number of RED objects / total number of objects

เนื่องจากมี60วัตถุ40ทั้งหมดซึ่งมีอยู่GREENและ 20 REDความน่าจะเป็นก่อนหน้านี้สำหรับการเป็นสมาชิกในชั้นเรียนคือ:

ความน่าจะเป็นก่อนหน้าสำหรับGREEN :40 / 60

ความน่าจะเป็นก่อนหน้าสำหรับRED :20 / 60

ด้วยการกำหนดความน่าจะเป็นก่อนหน้าของเราตอนนี้เราพร้อมที่จะจำแนกวัตถุใหม่ ( WHITEวงกลมในแผนภาพด้านล่าง) เนื่องจากวัตถุมีการรวมกลุ่มกันเป็นอย่างดีจึงมีเหตุผลที่จะสมมติว่ามีวัตถุมากขึ้นGREEN(หรือRED) ในบริเวณใกล้เคียงของ X จึงมีโอกาสมากขึ้นที่กรณีใหม่ ๆ ในการวัดความเป็นไปได้นี้เราจะวาดวงกลมรอบ X ซึ่งครอบคลุมจำนวน (เพื่อเลือกนิรนัย) ของคะแนนโดยไม่คำนึงถึงฉลากระดับของพวกเขา จากนั้นเราคำนวณจำนวนคะแนนในวงกลมที่อยู่ในป้ายกำกับของแต่ละชั้นเรียน จากนี้เราจะคำนวณความน่าจะเป็น:

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

จากภาพประกอบข้างต้นก็เป็นที่ชัดเจนว่าโอกาสของการXได้รับGREENมีขนาดเล็กกว่าความน่าจะเป็นของXที่ได้รับREDตั้งแต่วงกลมบนโลกไซเบอร์1 GREENวัตถุและ3 REDคน ดังนั้น:

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

แม้ว่าความน่าจะเป็นก่อนที่บ่งชี้ว่าXอาจเป็นGREEN(รับว่ามีสองเท่าGREENเมื่อเทียบกับRED) ความน่าจะแสดงให้เห็นเป็นอย่างอื่น ที่สมาชิกระดับของXคือRED(ระบุว่ามีREDวัตถุมากขึ้นในบริเวณใกล้เคียงXกว่าGREEN) ในการวิเคราะห์แบบเบย์การจำแนกขั้นสุดท้ายถูกสร้างขึ้นโดยการรวมแหล่งข้อมูลทั้งคู่เช่นก่อนและโอกาสในการสร้างความน่าจะเป็นหลังโดยใช้กฎของเบย์ที่เรียกว่า

ป้อนคำอธิบายรูปภาพที่นี่

ในที่สุดเราก็จำแนก X REDเนื่องจากสมาชิกภาพของกลุ่มบรรลุความน่าจะเป็นหลังมากที่สุด


39
อัลกอริทึมนี้ไม่ได้เป็นเหมือนเพื่อนบ้านที่ใกล้ที่สุด k?
Renaud

251
คำตอบนี้สับสน - มันผสม KNN (เพื่อนบ้านที่ใกล้ที่สุด k) และอ่าวไร้เดียงสา
Michal Illich

7
คำตอบนั้นดำเนินไปอย่างดีจนกระทั่งมีโอกาสเกิดขึ้น ดังนั้น @Yavar จึงใช้ K- เพื่อนบ้านที่ใกล้ที่สุดเพื่อคำนวณความน่าจะเป็น มันถูกต้องแค่ไหน? ถ้าเป็นเช่นนั้นจะมีวิธีอื่นใดในการคำนวณความน่าจะเป็น
wrahool

1
คุณใช้วงกลมเป็นตัวอย่างของความน่าจะเป็น ฉันอ่านเกี่ยวกับ Gaussian Naive bayes ที่มีโอกาสเป็น Gaussian จะอธิบายได้อย่างไร?
umair durrani

1
ที่จริงแล้วคำตอบด้วย knn นั้นถูกต้อง หากคุณไม่รู้จักการแจกแจงและความน่าจะเป็นที่ได้จากการแจกแจงแบบนั้นคุณต้องหามันก่อน สามารถทำได้ผ่าน kNN หรือ Kernels ฉันคิดว่ามีบางสิ่งที่ขาดหายไป คุณสามารถตรวจสอบงานนำเสนอนี้ได้
CS

1053

ฉันรู้ว่านี่เป็นคำถามเก่าที่มีคำตอบที่จัดตั้งขึ้น เหตุผลที่ฉันโพสต์คือคำตอบที่ยอมรับมีหลายองค์ประกอบของ k-NN ( k -neearest เพื่อนบ้าน) ซึ่งเป็นอัลกอริทึมที่แตกต่างกัน

k-NN และ NaiveBayes เป็นอัลกอริธึมการจำแนกประเภท ในเชิงแนวคิด k-NN ใช้แนวคิดของ "nearness" เพื่อจัดประเภทเอนทิตีใหม่ ใน k-NN 'nearness' ถูกจำลองด้วยแนวคิดเช่น Euclidean Distance หรือ Cosine Distance ในทางตรงกันข้ามใน NaiveBayes แนวคิดของ 'ความน่าจะเป็น' ถูกใช้เพื่อจัดประเภทเอนทิตีใหม่

เนื่องจากคำถามเกี่ยวกับ Naive Bayes นี่คือวิธีที่ฉันจะอธิบายความคิดและขั้นตอนสำหรับใครบางคน ฉันจะพยายามทำโดยใช้สมการไม่กี่คำและเป็นภาษาอังกฤษธรรมดาที่สุด

ประการแรกความน่าจะเป็นแบบมีเงื่อนไขและกฎของเบย์

ก่อนที่ใครบางคนสามารถเข้าใจและซาบซึ้งถึงความแตกต่างของ Naive Bayes พวกเขาจำเป็นต้องรู้แนวคิดที่เกี่ยวข้องสองอย่างก่อนคือแนวคิดเกี่ยวกับความน่าจะเป็นตามเงื่อนไขและกฎของเบย์ (หากคุณคุ้นเคยกับแนวคิดเหล่านี้ให้ข้ามไปที่หัวข้อการเดินทางไปยัง Naive Bayes ' )

ความน่าจะเป็นแบบมีเงื่อนไขในภาษาอังกฤษธรรมดา: ความน่าจะเป็นที่สิ่งใดจะเกิดขึ้นเนื่องจากมีสิ่งอื่นเกิดขึ้นแล้ว

สมมติว่ามีผลลัพธ์ O. และหลักฐาน E บางอย่างจากความน่าจะเป็นเหล่านี้: ความน่าจะเป็นที่มีทั้งผลลัพธ์ O และหลักฐาน E คือ: (ความน่าจะเป็นของ O เกิดขึ้น) คูณด้วย (Prob ของ E ที่ โอเกิดขึ้น)

ตัวอย่างหนึ่งที่จะเข้าใจความน่าจะเป็นที่มีเงื่อนไข:

สมมติว่าเรามีชุดของวุฒิสมาชิกสหรัฐ วุฒิสมาชิกอาจเป็นพรรคเดโมแครตหรือรีพับลิกัน พวกเขายังเป็นชายหรือหญิง

ถ้าเราเลือกสมาชิกวุฒิสภาหนึ่งคนโดยการสุ่มความน่าจะเป็นที่บุคคลนี้เป็นผู้หญิงประชาธิปไตย? ความน่าจะเป็นที่มีเงื่อนไขสามารถช่วยเราตอบได้

ความน่าจะเป็นของ (ประชาธิปัตย์และวุฒิสมาชิกหญิง) = Prob (วุฒิสมาชิกคือประชาธิปัตย์) คูณด้วยความน่าจะเป็นเงื่อนไขของการเป็นเพศหญิงเนื่องจากพวกเขาเป็นประชาธิปไตย

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

เราสามารถคำนวณสิ่งเดียวกันแน่นอนทางกลับกัน:

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

ทำความเข้าใจกับกฎของเบย์

แนวคิดนี้เป็นวิธีที่จะไปจาก P (Evidence | Known Outcome) ถึง P (Outcome | Known Evidence) บ่อยครั้งที่เรารู้ว่ามีการตรวจพบหลักฐานบางอย่างบ่อยเพียงใดโดยได้รับผลลัพธ์ที่ทราบ เราต้องใช้ความจริงที่รู้จักกันนี้ในการคำนวณการย้อนกลับเพื่อคำนวณโอกาสของผลลัพธ์ที่เกิดขึ้นตามหลักฐาน

P (ผลลัพธ์ระบุว่าเรารู้หลักฐาน) = P (หลักฐานระบุว่าเรารู้ผลลัพธ์) คูณ Prob (ผลลัพธ์) ปรับสัดส่วนโดย P (หลักฐาน)

ตัวอย่างคลาสสิกที่จะเข้าใจกฎของเบย์:

Probability of Disease D given Test-positive = 

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

ตอนนี้ทั้งหมดนี้เป็นเพียงคำนำเพื่อไปยัง Naive Bayes

การเดินทางไป Naive Bayes '

จนถึงตอนนี้เราได้พูดคุยเกี่ยวกับหลักฐานเพียงชิ้นเดียวเท่านั้น ในความเป็นจริงเราต้องทำนายผลลัพธ์ที่ได้จากหลักฐานหลายอย่าง ในกรณีนี้คณิตศาสตร์มีความซับซ้อนมาก เพื่อหลีกเลี่ยงภาวะแทรกซ้อนนั้นวิธีการหนึ่งก็คือการแยกหลักฐานหลายชิ้นและปฏิบัติต่อหลักฐานแต่ละชิ้นโดยอิสระ วิธีการนี้เป็นสาเหตุที่สิ่งนี้เรียกว่าซื่อๆเบย์

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

หลายคนเลือกที่จะจำสิ่งนี้เป็น:

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

สังเกตบางสิ่งเกี่ยวกับสมการนี้:

  • ถ้า Prob (หลักฐาน | ผลลัพธ์) เป็น 1 ดังนั้นเราจะคูณด้วย 1
  • ถ้า Prob (หลักฐานเฉพาะ | ผล) เป็น 0 ดังนั้นโพรบทั้งหมด กลายเป็น 0 หากคุณเห็นหลักฐานที่ขัดแย้งกันเราสามารถแยกแยะผลลัพธ์นั้นออก
  • เนื่องจากเราแบ่งทุกอย่างด้วย P (หลักฐาน) เราสามารถทำได้โดยไม่ต้องคำนวณ
  • สัญชาตญาณที่อยู่เบื้องหลังการคูณด้วยก่อนหน้าคือเพื่อให้เรามีความน่าจะเป็นสูงต่อผลลัพธ์ทั่วไปและความน่าจะเป็นต่ำต่อผลลัพธ์ที่ไม่น่าจะเกิดขึ้น สิ่งเหล่านี้เรียกว่าbase ratesและพวกเขามีวิธีการที่จะไต่ความน่าจะเป็นที่คาดการณ์ของเรา

วิธีสมัคร NaiveBayes เพื่อทายผล

เพียงใช้สูตรด้านบนเพื่อผลลัพธ์ที่เป็นไปได้แต่ละรายการ เนื่องจากเราพยายามจัดประเภทผลลัพธ์แต่ละรายการจึงเรียกว่า a classและมันมีclass label.ของเราคือการดูหลักฐานเพื่อพิจารณาว่ามีแนวโน้มที่จะเป็นชั้นนี้หรือชั้นเรียนนั้นและกำหนดป้ายกำกับให้กับแต่ละหน่วยงาน อีกครั้งเราใช้วิธีที่ง่ายมาก: คลาสที่มีความน่าจะเป็นสูงสุดจะประกาศว่า "ผู้ชนะ" และฉลากระดับนั้นจะถูกกำหนดให้กับชุดค่าผสมของหลักฐานนั้น

ตัวอย่างผลไม้

ลองทำตัวอย่างเพื่อเพิ่มความเข้าใจของเรา: OP ขอตัวอย่างบัตรประจำตัว 'ผลไม้'

สมมติว่าเรามีข้อมูลเกี่ยวกับผลไม้ 1,000 ชิ้น พวกเขาเกิดขึ้นจะเป็นกล้วย , ส้มหรือผลไม้อื่นเรารู้ 3 ลักษณะเกี่ยวกับผลไม้แต่ละชนิด:

  1. ไม่ว่าจะเป็นแบบยาว
  2. ไม่ว่าจะเป็นขนมหวานและ
  3. ถ้าเป็นสีเหลือง

นี่คือ 'ชุดฝึกอบรม' ของเรา เราจะใช้สิ่งนี้เพื่อทำนายชนิดของผลไม้ใหม่ที่เราพบ

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
             ___________________________________________________________________

เราสามารถคำนวณสิ่งต่างๆมากมายเกี่ยวกับการเก็บผลไม้ของเราล่วงหน้า

ความน่าจะเป็นที่เรียกว่า "ก่อนหน้า" (ถ้าเราไม่รู้คุณสมบัติผลไม้ใด ๆ นี่จะเป็นการคาดเดาของเรา) นี่คือของเราbase rates.

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

ความน่าจะเป็นของ "หลักฐาน"

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

ความน่าจะเป็นของ "โอกาส"

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

ได้รับผลไม้วิธีการจำแนกมันได้อย่างไร

สมมติว่าเราได้รับคุณสมบัติของผลไม้ที่ไม่รู้จักและขอให้แบ่งมัน เราบอกว่าผลไม้นั้นยาวหวานและเหลือง มันเป็นกล้วยเหรอ? มันเป็นสีส้มหรือไม่? หรือมันเป็นผลไม้อื่น ๆ ?

เราสามารถเรียกใช้ตัวเลขสำหรับผลลัพธ์ 3 รายการแต่ละรายการทีละรายการ จากนั้นเราเลือกความน่าจะเป็นสูงสุดและ 'จำแนก' ผลไม้ที่เราไม่รู้จักว่าเป็นของชั้นเรียนที่มีความน่าจะเป็นสูงสุดตามหลักฐานก่อนหน้าของเรา (ชุดฝึกอบรมผลไม้ 1,000 ชุด):

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)

ด้วยอัตรากำไรขั้นต้นที่ครอบงำ (0.252 >> 0.01875 ) เราจัดผลไม้หวาน / ยาว / เหลืองนี้น่าจะเป็นกล้วย

เหตุใดตัวจําแนกเบย์จึงเป็นที่นิยม

ดูสิ่งที่มันลงมาในที่สุด เพียงแค่การนับและการคูณ เราสามารถคำนวณเงื่อนไขเหล่านี้ได้ล่วงหน้าและการจำแนกประเภทจึงกลายเป็นเรื่องง่ายรวดเร็วและมีประสิทธิภาพ

Let z = 1 / P(evidence). ตอนนี้เราคำนวณปริมาณสามอย่างต่อไปนี้อย่างรวดเร็ว

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)  ...

กำหนดป้ายกำกับของชั้นเรียนว่าจำนวนใดสูงสุดและคุณทำเสร็จแล้ว

แม้จะมีชื่อ Naive Bayes ก็ยังยอดเยี่ยมในการใช้งานบางอย่าง การจำแนกข้อความเป็นพื้นที่หนึ่งที่มันส่องแสงจริงๆ

หวังว่าจะช่วยในการทำความเข้าใจแนวคิดที่อยู่เบื้องหลังอัลกอริทึมไร้เดียงสาเบย์


14
ขอบคุณสำหรับคำอธิบายที่ชัดเจนมาก! ง่ายๆหนึ่งในสิ่งที่ดีกว่าที่ลอยอยู่รอบ ๆ เว็บ คำถาม: เนื่องจากแต่ละ P (ผลลัพธ์ / หลักฐาน) ถูกคูณด้วย 1 / z = p (หลักฐาน) (ซึ่งในกรณีผลไม้หมายถึงความน่าจะเป็นแต่ละอันนั้นขึ้นอยู่กับหลักฐานก่อนหน้านี้เท่านั้น) มันจะถูกต้องหรือไม่ที่จะบอกว่า z ไม่ ไม่เป็นไรสำหรับNaïve Bayes? ซึ่งหมายความว่าถ้าพูดว่ามีใครวิ่งเข้าไปในผลไม้ยาว / หวาน / เหลืองที่ไม่ใช่กล้วยมันจะถูกจำแนกอย่างไม่ถูกต้อง
ความแปรปรวนร่วม

7
@ E.Chow ใช่คุณถูกต้องในการคำนวณว่า z ไม่สำคัญสำหรับ Naive Bayes (เป็นวิธีที่จะขยายความน่าจะเป็นระหว่าง 0 และ 1) โปรดทราบว่า z คือผลผลิตของความน่าจะเป็นของหลักฐานทั้งหมดที่อยู่ในมือ (แตกต่างจากนักบวชซึ่งเป็นอัตราฐานของคลาส) คุณถูกต้อง: หากคุณพบผลไม้ผลยาว / หวาน / เหลืองที่ไม่ใช่กล้วย NB จะจัดประเภทไม่ถูกต้องเหมือนกล้วย ชุดฝึกอบรม อัลกอริทึมคือ 'การคาดคะเนความน่าจะเป็นที่ดีที่สุดตามหลักฐาน' และดังนั้นมันจะจำแนกผิดพลาดในบางโอกาส
Ram Narasimhan

1
@ แจสเปอร์ในตารางมีทั้งหมด 200 "ผลไม้อื่น ๆ " และ 50 ชิ้นเป็นสีเหลือง ดังนั้นเมื่อผลไม้เป็น "ผลไม้อื่น ๆ " จักรวาลคือ 200 50 ของพวกเขาเป็นสีเหลือง ดังนั้น 50/200 โปรดทราบว่า 800 คือจำนวนผลไม้สีเหลืองทั้งหมด ดังนั้นถ้าเราต้องการ P (ผลไม้อื่น / สีเหลือง) เราจะทำตามที่คุณแนะนำ: 50/800
Ram Narasimhan

3
คำอธิบายที่ดีอย่างแน่นอน ฉันไม่เข้าใจ algoritm นี้จากเอกสารทางวิชาการและหนังสือ เพราะคำอธิบายที่ลึกลับมักเป็นที่ยอมรับกันทั่วไปว่าเป็นสไตล์การเขียน นั่นคือทั้งหมดและง่ายมาก ขอบคุณ
Suat Atan ปริญญาเอก

3
ทำไมความน่าจะไม่รวมถึง 1 หลักฐานคือ 0.26 ในตัวอย่าง (500/100 * 650/1000 * 800/1000) และดังนั้นสุดท้าย P (กล้วย | ... ) = 0.252 / 0.26 = 0.969 และ P (อื่น ๆ | ... ) = 0.01875 / 0.26 = 0.072 พวกเขาช่วยกันเพิ่มมากถึง 1.04!
Mauricio

18

Ram Narasimhan อธิบายแนวคิดอย่างมากที่นี่ด้านล่างเป็นคำอธิบายทางเลือกผ่านตัวอย่างโค้ดของ Naive Bayes ในการดำเนินการ
ใช้ปัญหาตัวอย่างจากหนังสือเล่มนี้ในหน้า 351
นี่คือชุดข้อมูลที่เราจะใช้ ในชุดข้อมูลด้านบนถ้าเราให้ สมมุติฐาน = ความน่าจะเป็นที่จะซื้อหรือไม่ซื้อคอมพิวเตอร์คืออะไร รหัสด้านล่างตอบคำถามนั้นอย่างแน่นอน เพียงสร้างไฟล์ชื่อ named และวางเนื้อหาต่อไปนี้
ป้อนคำอธิบายรูปภาพที่นี่
{"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

นี่คือรหัสความคิดเห็นอธิบายทุกอย่างที่เราทำที่นี่! [หลาม]

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()

เอาท์พุท:

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

หวังว่ามันจะช่วยให้เข้าใจปัญหาได้ดีขึ้น

สันติภาพ


18

ไร้เดียงสาเบย์: Naive Bayes มาภายใต้การดูแลการเรียนรู้ของเครื่องซึ่งใช้ในการจำแนกประเภทของชุดข้อมูล มันถูกใช้ในการทำนายสิ่งต่าง ๆ ตามความรู้เดิมและสมมติฐานที่เป็นอิสระ

พวกเขาเรียกมันว่าไร้เดียงสาเพราะเป็นข้อสันนิษฐาน (ซึ่งถือว่าคุณสมบัติทั้งหมดในชุดข้อมูลนั้นมีความสำคัญเท่าเทียมกันและเป็นอิสระ) นั้นมองโลกในแง่ดีจริงๆ

มันเป็นอัลกอริทึมการจำแนกซึ่งทำให้การตัดสินใจสำหรับชุดข้อมูลที่ไม่รู้จัก มันขึ้นอยู่กับทฤษฎีบทของเบย์ซึ่งอธิบายถึงความน่าจะเป็นของเหตุการณ์ตามความรู้เดิม

แผนภาพด้านล่างแสดงวิธีการทำงานของ Bayes ที่ไร้เดียงสา

ป้อนคำอธิบายรูปภาพที่นี่

สูตรในการทำนาย NB:

ป้อนคำอธิบายรูปภาพที่นี่

วิธีใช้ Naive Bayes Algorithm

ลองมาดูตัวอย่างว่า NB ตื่นอย่างไร

ขั้นตอนที่ 1: อันดับแรกเราจะหาโอกาสของตารางที่แสดงความน่าจะเป็นของใช่หรือไม่ใช่ในแผนภาพด้านล่าง ขั้นตอนที่ 2: ค้นหาความน่าจะเป็นหลังของแต่ละชั้นเรียน

ป้อนคำอธิบายรูปภาพที่นี่

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.

สำหรับการอ้างอิงเพิ่มเติมอ้างอิงบล็อกเหล่านี้

อ้างอิง GitHub Repository ไร้เดียงสา - เบย์ - ตัวอย่าง


14

ฉันพยายามอธิบายกฎของเบย์ด้วยตัวอย่าง

โอกาสที่คนสุ่มเลือกจากสังคมเป็นนักสูบบุหรี่คืออะไร?

คุณอาจตอบกลับ 10%

ตอนนี้จะเกิดอะไรขึ้นถ้าบุคคลนั้นเป็นผู้ชายและ อายุ 15ปี?

ไม่สามารถเป็น 60% ในขณะที่เรารู้ว่าเปอร์เซ็นต์ของผู้สูบบุหรี่ต่ำมาก มันต้องไม่น้อยกว่า 10% 15 หรือ 20% เป็นการเดาที่ดีกว่า

ในความเป็นจริงเราพยายามอัปเดตการคาดเดาเริ่มต้นด้วยหลักฐานชิ้นใหม่ ( P(smoker) vs. P(smoker | evidence)) กฎของ Bayes เป็นวิธีการเชื่อมต่อความน่าจะเป็นทั้งสองนี้

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

หลักฐานแต่ละอย่างอาจเพิ่มหรือลดโอกาสนี้ ตัวอย่างเช่นความจริงที่ว่าเขาเป็นผู้ชายคนนี้อาจเพิ่มโอกาสโดยที่ร้อยละนี้ (เป็นผู้ชาย) ในหมู่ผู้ไม่สูบบุหรี่จะต่ำกว่า กล่าวอีกนัยหนึ่งการเป็นผู้ชายจะต้องเป็นตัวบ่งชี้ที่ดีของการเป็นนักสูบบุหรี่มากกว่าผู้ที่ไม่สูบบุหรี่

เราสามารถแสดงผลงานนี้ในอีกทางหนึ่งด้วย สำหรับแต่ละสถานที่คุณสามารถเปรียบเทียบความน่าจะเป็น (ความน่าจะเป็น) ของสถานที่นั้นได้ภายใต้เงื่อนไขที่กำหนดกับความเป็นอยู่ทั่วไป ( P(f | x) vs. P(f)).

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

ตัวอย่างเช่นถ้าเรารู้ว่า 90% ของผู้สูบบุหรี่เป็นผู้ชายก็ยังไม่เพียงพอที่จะบอกได้ว่าการเป็นผู้ชายเป็นตัวบ่งชี้ว่าสูบบุหรี่หรือไม่ ตัวอย่างเช่นถ้าความน่าจะเป็นของการเป็นคนที่อยู่ในสังคมยังเป็น 90% ((90% / 90%) = 1แล้วรู้ว่าคนที่เป็นคนที่ไม่ได้ช่วยให้เรา แต่ถ้าผู้ชายมีส่วนร่วม 40% ของสังคม แต่ 90% ของผู้สูบบุหรี่รู้ว่าใครบางคนเป็นผู้ชายเพิ่มโอกาสที่จะเป็นนักสูบบุหรี่(90% / 40%) = 2.25ดังนั้นมันจะเพิ่มการเดาเริ่มต้น (10%) 2.25 ส่งผล 22.5%

อย่างไรก็ตามหากความน่าจะเป็นที่จะเป็นผู้ชายเป็น 95% ในสังคมดังนั้นไม่ว่าข้อเท็จจริงที่ว่าสัดส่วนของผู้ชายในกลุ่มผู้สูบบุหรี่นั้นสูงมาก (90%)! หลักฐานที่แสดงว่าบางคนเป็นผู้ชายลดโอกาสที่เขาจะเป็นนักสูบบุหรี่! (90% / 95%) = 0.95).

ดังนั้นเราจึงมี:

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))

โปรดทราบว่าในสูตรนี้เราคิดว่าการเป็นผู้ชายและอายุต่ำกว่า 20 ปีเป็นคุณลักษณะที่เป็นอิสระดังนั้นเราจึงเพิ่มจำนวนพวกเขานั่นหมายความว่าการรู้ว่าใครบางคนอายุต่ำกว่า 20 ปีไม่มีผลต่อการเดาว่าเขาเป็นผู้ชายหรือผู้หญิง แต่มันอาจไม่เป็นความจริงตัวอย่างเช่นวัยรุ่นส่วนใหญ่ในสังคมอาจเป็นผู้ชาย ...

หากต้องการใช้สูตรนี้ในตัวจําแนก

ลักษณนามมีคุณสมบัติบางอย่าง (เป็นผู้ชายและอายุต่ำกว่า 20 ปี) และต้องตัดสินใจว่าเขาเป็นนักสูบบุหรี่หรือไม่ (นี่เป็นสองคลาส) มันใช้สูตรข้างต้นในการคำนวณความน่าจะเป็นของแต่ละชั้นเรียนภายใต้หลักฐาน (คุณสมบัติ) และจะกำหนดชั้นที่มีความน่าจะเป็นสูงสุดให้กับอินพุต เพื่อให้ความน่าจะเป็นที่ต้องการ (90%, 10%, 80% ... ) จะใช้ชุดฝึกอบรม ตัวอย่างเช่นนับคนในชุดการฝึกอบรมที่เป็นผู้สูบบุหรี่และพบว่าพวกเขามีส่วนร่วม 10% ของกลุ่มตัวอย่าง จากนั้นสำหรับผู้สูบบุหรี่ตรวจสอบจำนวนของพวกเขาเป็นชายหรือหญิง .... จำนวนที่สูงกว่า 20 หรือต่ำกว่า 20 .... ในคำอื่น ๆ ก็พยายามที่จะสร้างการกระจายความน่าจะเป็นของคุณสมบัติสำหรับแต่ละชั้นเรียนตามการฝึกอบรม ข้อมูล.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.