ฉันจะวิ่งผ่านกระบวนการ 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)classP(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 ในความน่าจะเป็นที่ได้จากตารางเราจะได้feature1feature2P(class=red|example)∝P(class=red)⋅P(feature1=A|class=red)⋅P(feature2=Y|class=red)
P(class=red|example)∝13⋅1⋅710=730
เราทำเช่นเดียวกันกับสีเขียว:
P(class=green|example)∝P(class=green)⋅P(feature1=A|class=green)⋅P(feature2=Y|class=green)
การซับไพล์ในค่าเหล่านั้นทำให้เราเป็น 0 ( ) ในที่สุดเราก็มาดูกันว่าคลาสไหนที่ให้โอกาสสูงสุดแก่เรา ในกรณีนี้เป็นคลาสสีแดงอย่างชัดเจนดังนั้นเราจึงกำหนดจุดนั้น2/3⋅0⋅2/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 (จริง / เท็จ)" หรือบางสิ่งบางอย่างเป็นคุณลักษณะแทน
ฉันหวังว่าจะช่วยได้มากขึ้น หากมีสิ่งใดที่ต้องการคำชี้แจงฉันยินดีที่จะลองอีกครั้ง!