ทำความเข้าใจกับ Naive Bayes


47

จากStatSoft, Inc. (2013), ตำราสถิติอิเล็กทรอนิกส์ , "Naive Bayes Classifier" :

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

นี่คือสิ่งที่ความยากลำบากในการทำความเข้าใจคณิตศาสตร์ของฉันเข้ามา

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

p (Cj | x1, x2, x ... , xd) คือความน่าจะเป็นด้านหลังของสมาชิกภาพในชั้นเรียนคือความน่าจะเป็นที่ X เป็นของ Cj แต่ทำไมเขียนแบบนี้

การคำนวณความเป็นไปได้หรือไม่

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

ความน่าจะเป็นหลัง

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

ฉันไม่เคยใช้คณิตศาสตร์ แต่ความเข้าใจของฉันเกี่ยวกับเรื่องไร้เดียงสาเป็นเรื่องปกติฉันคิดว่าเมื่อมันมาถึงวิธีการย่อยสลายเหล่านี้ทำให้ฉันสับสน บางคนสามารถช่วยในการมองเห็นวิธีการเหล่านี้และวิธีการเขียนคณิตศาสตร์ในทางที่เข้าใจ?


12
(+1) ฉันชื่นชมวิธีการที่ชัดเจนและชัดเจนที่คุณตั้งคำถามของคุณไว้
rolando2

2
@ rolando2: ตัวเลขทั้งหมดและข้อความเกือบทั้งหมดของคำถามนี้มาจากstatsoft.com/textbook/naive-bayes-classifier
Franck Dernoncourt

กรุณาอย่าแก้ไขโพสต์นี้กับวัสดุแอตทริบิวต์อย่างเห็นได้ชัดจากที่อื่น ๆ ตามวิธีการวัสดุอ้างอิงที่เขียนโดยคนอื่น
Scortchi - Reinstate Monica

การระบุแหล่งที่มาที่ถูกต้องของใบเสนอราคาโดยตรงนั้นเป็นข้อกำหนดสำหรับเว็บไซต์ Stack Exchange เสมอ อย่างไรก็ตามการละเลยนั้นแก้ไขได้ง่าย ฉันทำไปแล้ว ไม่จำเป็นต้องลบบัญชีของคุณ - โปรดพิจารณาอีกครั้ง
Scortchi - Reinstate Monica

คำตอบ:


50

ฉันจะวิ่งผ่านกระบวนการ Naive Bayes ทั้งหมดตั้งแต่เริ่มต้นเพราะมันไม่ชัดเจนสำหรับฉันโดยที่คุณจะถูกวางสาย

เราต้องการหาความน่าจะเป็นที่ตัวอย่างใหม่เป็นของแต่ละคลาส: ) จากนั้นเราคำนวณความน่าจะเป็นสำหรับแต่ละชั้นเรียนและเลือกชั้นที่มีโอกาสมากที่สุด ปัญหาคือว่าเรามักจะไม่มีความน่าจะเป็นเหล่านั้น อย่างไรก็ตามทฤษฎีบทของเบย์ช่วยให้เราสามารถเขียนสมการนั้นในรูปแบบที่ง่ายกว่าP(class|feature1,feature2,...,featuren

Bayes 'นั้นคือหรือในแง่ของปัญหาของเรา:

P(A|B)=P(B|A)P(A)P(B)
P(class|features)=P(features|class)P(class)P(features)

เราสามารถลดความซับซ้อนนี้โดยการเอา(คุณสมบัติ) เราสามารถทำเช่นนี้เพราะเรากำลังจะไปที่ระดับสำหรับค่าของแต่ละ ; จะเหมือนกันทุกครั้ง - มันไม่ได้ขึ้นอยู่กับระดับสิ่งนี้ทำให้เรามี P(features)P(class|features)classP(features)class

P(class|features)P(features|class)P(class)

ความน่าจะเป็นก่อนหน้านี้สามารถคำนวณได้ตามที่คุณอธิบายไว้ในคำถามของคุณP(class)

ที่ใบclass) เราต้องการที่จะกำจัดขนาดใหญ่และอาจจะเบาบางมากน่าจะเป็นร่วมclass) หากคุณลักษณะแต่ละอย่างเป็นอิสระดังนั้นแม้ว่าพวกเขาจะไม่ได้เป็นอิสระจริง ๆ เราสามารถสันนิษฐานได้ว่าพวกเขาเป็น (นั่นคือ " ส่วนที่ไร้เดียงสาของ Bayes) ฉันคิดว่าเป็นการง่ายกว่าที่จะคิดเรื่องนี้สำหรับตัวแปรแยก (เช่นหมวดหมู่) ดังนั้นลองใช้ตัวอย่างรุ่นที่แตกต่างออกไปเล็กน้อย ที่นี่ฉันได้แบ่งมิติคุณลักษณะแต่ละอย่างออกเป็นสองตัวแปรหมวดหมู่P(features|class)P(feature1,feature2,...,featuren|class)

P(feature1,feature2,...,featuren|class)=iP(featurei|class)

ข้อมูลตัวอย่างที่ไม่ต่อเนื่อง.

ตัวอย่าง: การฝึกอบรม classifer

ในการฝึกอบรม classifer เราจะนับคะแนนย่อย ๆ และใช้พวกเขาเพื่อคำนวณความน่าจะเป็นก่อนและมีเงื่อนไข

นักบวชผู้น่าสนใจ: มีทั้งหมดหกสิบคะแนนสี่สิบเป็นสีเขียวในขณะที่ยี่สิบเป็นสีแดง ดังนั้น

P(class=green)=4060=2/3 and P(class=red)=2060=1/3

ต่อไปเราต้องคำนวณความน่าจะเป็นตามเงื่อนไขของแต่ละคุณสมบัติ - ค่าที่กำหนดให้กับคลาส ที่นี่มีคุณสมบัติสองประการ:และซึ่งแต่ละค่าใช้หนึ่งในสองค่า (A หรือ B สำหรับหนึ่ง, X หรือ Y สำหรับอีกอันหนึ่ง) เราจำเป็นต้องรู้สิ่งต่อไปนี้:feature1feature2

  • P(feature1=A|class=red)
  • P(feature1=B|class=red)
  • P(feature1=A|class=green)
  • P(feature1=B|class=green)
  • P(feature2=X|class=red)
  • P(feature2=Y|class=red)
  • P(feature2=X|class=green)
  • P(feature2=Y|class=green)
  • (ในกรณีที่ไม่ชัดเจนนี่เป็นคู่ของคุณลักษณะและค่าคลาสที่เป็นไปได้ทั้งหมด)

สิ่งเหล่านี้ง่ายต่อการคำนวณโดยการนับและการหารด้วย ตัวอย่างเช่นสำหรับเรามองเฉพาะที่จุดสีแดงและนับจำนวนของพวกเขาอยู่ในภูมิภาค 'A' สำหรับfeature_1มียี่สิบจุดสีแดงทุกคนที่อยู่ในภูมิภาค 'A' ดังนั้น 1ไม่มีจุดสีแดงอยู่ในภูมิภาค B ดังนั้น 0 ต่อไปเราทำเช่นเดียวกัน แต่พิจารณาเฉพาะจุดสีเขียว นี้จะช่วยให้เราและ7/8 เราทำซ้ำกระบวนการนั้นสำหรับเพื่อปัดเศษตารางความน่าจะเป็น สมมติว่าฉันนับอย่างถูกต้องเราจะได้รับP(feature1=A|class=red)feature1P(feature1=A|class=red)=20/20=1P(feature1|class=red)=0/20=0P(feature1=A|class=green)=5/40=1/8P(feature1=B|class=green)=35/40=7/8feature2

  • P(feature1=A|class=red)=1
  • P(feature1=B|class=red)=0
  • P(feature1=A|class=green)=1/8
  • P(feature1=B|class=green)=7/8
  • P(feature2=X|class=red)=3/10
  • P(feature2=Y|class=red)=7/10
  • P(feature2=X|class=green)=8/10
  • P(feature2=Y|class=green)=2/10

ความน่าจะเป็นสิบสองอันนั้น (นักบวชสองคนบวกแปดเงื่อนไข) เป็นแบบจำลองของเรา

การจำแนกตัวอย่างใหม่

ลองจำแนกจุดสีขาวจากตัวอย่างของคุณ มันอยู่ใน "A" ภูมิภาคและ "Y" ภูมิภาคfeature_2เราต้องการหาความน่าจะเป็นที่อยู่ในแต่ละชั้นเรียน เริ่มจากสีแดงกันก่อน เมื่อใช้สูตรด้านบนเรารู้ว่า: Subbing ในความน่าจะเป็นที่ได้จากตารางเราจะได้feature1feature2

P(class=red|example)P(class=red)P(feature1=A|class=red)P(feature2=Y|class=red)

P(class=red|example)131710=730
เราทำเช่นเดียวกันกับสีเขียว:
P(class=green|example)P(class=green)P(feature1=A|class=green)P(feature2=Y|class=green)

การซับไพล์ในค่าเหล่านั้นทำให้เราเป็น 0 ( ) ในที่สุดเราก็มาดูกันว่าคลาสไหนที่ให้โอกาสสูงสุดแก่เรา ในกรณีนี้เป็นคลาสสีแดงอย่างชัดเจนดังนั้นเราจึงกำหนดจุดนั้น2/302/10

หมายเหตุ

ในตัวอย่างดั้งเดิมของคุณฟีเจอร์นั้นต่อเนื่อง ในกรณีนั้นคุณต้องหาวิธีกำหนด P (feature = value | class) สำหรับแต่ละคลาส คุณอาจพิจารณาปรับให้เหมาะสมกับการแจกแจงความน่าจะเป็นที่รู้จัก (เช่น Gaussian) ในระหว่างการฝึกอบรมคุณจะพบความหมายและความแปรปรวนของแต่ละชั้นเรียนตามแต่ละมิติของคุณลักษณะ ในการจำแนกจุดคุณจะพบโดยการเสียบค่าเฉลี่ยและความแปรปรวนที่เหมาะสมสำหรับแต่ละคลาส การกระจายอื่น ๆ อาจเหมาะสมกว่าขึ้นอยู่กับข้อมูลของคุณ แต่ Gaussian จะเป็นจุดเริ่มต้นที่ดีP(feature=value|class)

ฉันไม่คุ้นเคยกับชุดข้อมูล DARPA แต่คุณต้องทำสิ่งเดียวกัน คุณอาจจะต้องคำนวณคอมพิวเตอร์บางอย่างเช่น P (โจมตี = TRUE | บริการ = นิ้ว), P (โจมตี = false | บริการ = นิ้ว), P (โจมตี = TRUE | บริการ = ftp) ฯลฯ จากนั้นรวมเข้าด้วยกันใน เช่นเดียวกับตัวอย่าง ในฐานะที่เป็นบันทึกย่อส่วนหนึ่งของเคล็ดลับที่นี่คือการมาพร้อมกับคุณสมบัติที่ดี ตัวอย่างเช่น IP ต้นทางอาจจะเบาบางอย่างสิ้นหวัง - คุณอาจมีเพียงหนึ่งหรือสองตัวอย่างสำหรับ IP ที่กำหนด คุณอาจทำได้ดีกว่าถ้าคุณระบุตำแหน่งทางภูมิศาสตร์และใช้ "Source_in_same_building_as_dest (จริง / เท็จ)" หรือบางสิ่งบางอย่างเป็นคุณลักษณะแทน

ฉันหวังว่าจะช่วยได้มากขึ้น หากมีสิ่งใดที่ต้องการคำชี้แจงฉันยินดีที่จะลองอีกครั้ง!


3
แน่ใจ ถ้ามันไม่เป็นไรกับคุณฉันจะแก้ไขคำตอบของฉันเพื่อให้มีพื้นที่มากขึ้น (และฉันสามารถทำสิ่งที่ LaTex)
Matt Krause

1
ฉันขยายส่วนการฝึกอบรมและทดสอบและทำให้เป็นส่วนของตนเอง ย่อหน้าคู่แรกจะเหมือนกัน ...
แมตต์กรอส

2
แมตต์นี่ชัดเจนกว่าหนังสือนิยามของ Naive Bayes ที่ฉันเจอ นี่อาจเป็นคำตอบที่ดีที่สุดสำหรับคำถามใด ๆ ที่ฉันเคยเห็นในเว็บไซต์นี้
Zhubarb

@Berkan ขอบคุณ; คุณเป็นคนที่ใจดีมาก ๆ (แม้ว่าจะมีคำตอบที่ยอดเยี่ยมอื่น ๆ อีกมากมายเช่นกัน!) หากคุณมีข้อเสนอแนะใด ๆ ฉันยินดีที่จะตอบคำถามเหล่านี้!
Matt Krause

+ 1 และstackoverflow.com/questions/10059594/…ซึ่งมีคำอธิบายที่คล้ายกัน
Drey

6

ลดความซับซ้อนของสัญกรณ์ด้วยแสดงถึงข้อมูลเราต้องการค้นหาว่าใดที่ใหญ่ที่สุด ตอนนี้สูตรของ Bayes ให้ ที่ตัวส่วนบน ที่เหมาะสมเป็นเหมือนกันทุกเจถ้าเราต้องการค้นหา ,นั้นใหญ่ที่สุดแน่นอนเราสามารถคำนวณและเปรียบเทียบค่า แต่โปรดทราบว่าการเปรียบเทียบจะไม่ได้รับผลกระทบจากมูลค่าของซึ่งเหมือนกันในทุกกรณี เราสามารถคำนวณDP(CjD)

P(CjD)=P(DCj)P(Cj)P(D), j=1,2,
jP(C1D)P(C2D),P(CjD)P(D)P(DCj)P(Cj) และเปรียบเทียบ (นั่นคือโดยไม่ต้องแยกแต่ละ โดยก่อนการเปรียบเทียบ) และเดียวกันจะถูกเลือกว่ามีความน่าจะเป็นหลังที่ใหญ่ที่สุด อีกวิธีหนึ่งความน่าจะเป็นหลังเป็น สัดส่วนกับความน่าจะเป็นกับความน่าจะเป็นก่อนหน้า ในที่สุดเมื่อข้อมูลเป็นชุดของการสังเกตแบบอิสระ (แบบมีเงื่อนไข)ให้กับ เรามีสิ่งนั้น P(DCj)P(Cj)P(D)CjP(CjD)P(DCj) P(Cj)
P(CjD)P(DCj)P(Cj).
DC j ) P ( D C j )(x1,x2,,xd)Cj)
P(DCj)=P(x1,x2,,xdCj)=P(x1Cj)P(x2Cj)P(xdCj)=1=1dP(xiCj)

1

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

นี่คือสิ่งที่ช่วยให้โมเดลไร้เดียงสาเบย์พูดคุยทั่วไปได้ดีในทางปฏิบัติ พิจารณาขั้นตอนการฝึกอบรม: หากเราไม่ได้ตั้งสมมติฐานนี้การเรียนรู้จะเกี่ยวข้องกับการประเมินการแจกแจงที่ซับซ้อนและมีมิติสูง: p (x1, x2, ... , xn, c) ซึ่งคุณสมบัติทั้งหมดนี้มีการแจกจ่ายร่วมกัน เราสามารถฝึกอบรมโดยการประมาณ p (x1, c), p (x2, c), ... , p (xn, c) เนื่องจากการรู้ค่า c ทำให้ค่าของคุณสมบัติอื่น ๆ ทั้งหมดไม่เกี่ยวข้อง (พวกเขาให้ ไม่มีข้อมูลเพิ่มเติมเกี่ยวกับ x_i)

ฉันไม่รู้วิธีที่ดีที่จะเห็นภาพนี้ (นอกเหนือจากสัญลักษณ์แบบกราฟิกมาตรฐาน) แต่เพื่อให้เป็นรูปธรรมมากขึ้นคุณสามารถเขียนโค้ดเพื่อเรียนรู้รูปแบบ Naive Bayes ( คุณสามารถดึงข้อมูลตัวอย่างบางส่วนได้ที่นี่ ) ฝึกอบรมและทดสอบ ตอนนี้ปล่อยสมมติฐานความเป็นอิสระตามเงื่อนไขและแก้ไขโค้ด ฝึกทดสอบและเปรียบเทียบกับรุ่นก่อนหน้า

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