ฉันพยายามทำความเข้าใจเกี่ยวกับอัลกอริธึมการจัดกลุ่ม k-mean ต่าง ๆ ซึ่งส่วนใหญ่นำไปใช้ในstats
แพ็คเกจR
ภาษา
ฉันเข้าใจอัลกอริทึมของ Lloyd และอัลกอริทึมออนไลน์ของ MacQueen วิธีที่ฉันเข้าใจพวกเขามีดังนี้:
อัลกอริทึมของ Lloyd:
การสำรวจแบบสุ่ม 'k' ในขั้นต้นจะถูกเลือกซึ่งจะทำหน้าที่เป็น centroids ของกลุ่ม 'k' จากนั้นขั้นตอนต่อไปนี้เกิดขึ้นในการทำซ้ำจนกว่าเซนทรอยด์จะบรรจบกัน
- ระยะทางแบบยุคลิดระหว่างการสังเกตแต่ละครั้งและเซนทรอยด์ที่เลือกจะถูกคำนวณ
- การสังเกตที่ใกล้เคียงกับเซนทรอยด์แต่ละตัวจะถูกติดแท็กไว้ภายในที่เก็บข้อมูล 'k'
- ค่าเฉลี่ยของการสังเกตทั้งหมดในถังแต่ละใบทำหน้าที่เป็นเซนทรอยด์ใหม่
- เซนทรอยด์ใหม่จะแทนที่เซนทรอยด์เก่าและการทำซ้ำจะกลับไปที่ขั้นตอนที่ 1 หากเซนทรอยด์เก่าและใหม่ไม่ได้แปรสภาพ
เงื่อนไขที่จะมาบรรจบกันมีดังต่อไปนี้: เซนทรอยด์เก่าและใหม่นั้นเหมือนกันทุกประการความแตกต่างระหว่างเซนทรอยด์นั้นเล็ก (จากลำดับที่ 10 ^ -3) หรือถึงจำนวนสูงสุดของการทำซ้ำ (10 หรือ 100)
อัลกอริทึมของ MacQueen:
นี่เป็นเวอร์ชั่นออนไลน์ที่อินสแตนซ์ 'k' ตัวแรกถูกเลือกเป็น centroids
จากนั้นแต่ละอินสแตนซ์จะถูกวางในถังขึ้นอยู่กับเซนทรอยด์ที่ใกล้เคียงกับอินสแตนซ์นั้น เซนทรอยด์ที่เกี่ยวข้องจะถูกคำนวณใหม่
ทำซ้ำขั้นตอนนี้จนกระทั่งแต่ละอินสแตนซ์ถูกวางในที่ฝากข้อมูลที่เหมาะสม
อัลกอริทึมนี้มีการวนซ้ำเพียงครั้งเดียวและการวนซ้ำดำเนินต่อไปสำหรับอินสแตนซ์ 'x'
อัลกอริทึม Hartigan-Wong:
- กำหนดคะแนน / อินสแตนซ์ทั้งหมดให้กับถังสุ่มและคำนวณเซนทรอยด์ที่เกี่ยวข้อง
- เริ่มต้นจากอินสแตนซ์แรกค้นหาเซนทรอยด์ที่ใกล้ที่สุดและตรวจสอบที่ฝากข้อมูล หากที่ฝากข้อมูลเปลี่ยนไปให้คำนวณ centroid ใหม่เช่น centroid ของที่ฝากข้อมูลใหม่ที่ได้รับมอบหมายและ centroid ของที่ฝากข้อมูลเก่าที่ได้รับมอบหมายเนื่องจากมีสอง centroids ที่ได้รับผลกระทบจากการเปลี่ยนแปลง
- วนผ่านทุกจุดและรับ centroids ใหม่
- ทำซ้ำจุดที่สองของ 2 และ 3 ซึ่งดำเนินการเรียงลำดับของการดำเนินการทำความสะอาดและกำหนดจุดหลงทางเพื่อถังที่ถูกต้อง
ดังนั้นอัลกอริธึมนี้ทำซ้ำ 2 ครั้งก่อนที่เราจะเห็นผลการลู่เข้า
ตอนนี้ฉันไม่แน่ใจว่าสิ่งที่ฉันคิดในจุดที่ 4 ในอัลกอริทึม Hartigan-Wong เป็นวิธีที่ถูกต้องของอัลกอริทึม คำถามของฉันคือถ้าวิธีต่อไปนี้สำหรับ Hartigan-Wong เป็นวิธีที่ถูกต้องในการนำ k-mean มาใช้หรือไม่ มีวิธีการซ้ำสองวิธีเท่านั้นหรือไม่ ถ้าไม่เงื่อนไขสำหรับการบรรจบกัน (เมื่อหยุด) คืออะไร?
คำอธิบายการนำไปปฏิบัติที่เป็นไปได้อีกประการหนึ่งที่ฉันเข้าใจคือ
- กำหนดคะแนน / อินสแตนซ์ทั้งหมดให้กับถังสุ่มและคำนวณเซนทรอยด์ที่เกี่ยวข้อง
- เริ่มต้นจากอินสแตนซ์แรกค้นหาเซนทรอยด์ที่ใกล้ที่สุดและกำหนดที่ฝากข้อมูล หากที่ฝากข้อมูลเปลี่ยนไปให้คำนวณ centroid ใหม่เช่น centroid ของที่ฝากข้อมูลใหม่ที่ได้รับมอบหมายและ centroid ของที่ฝากข้อมูลเก่าที่ได้รับมอบหมายเนื่องจากมีสอง centroids ที่ได้รับผลกระทบจากการเปลี่ยนแปลง
- เมื่อมีการเปลี่ยนแปลงในที่ฝากข้อมูลสำหรับจุดใด ๆ ให้กลับไปที่อินสแตนซ์แรกและทำซ้ำขั้นตอนอีกครั้ง
- การวนซ้ำจะสิ้นสุดลงเมื่อมีการทำซ้ำอินสแตนซ์ทั้งหมดและไม่มีจุดเปลี่ยนถัง
วิธีนี้มีการวนซ้ำจำนวนมากที่เริ่มต้นจากจุดเริ่มต้นของชุดข้อมูลซ้ำแล้วซ้ำอีกทุกครั้งเมื่ออินสแตนซ์เปลี่ยนที่เก็บข้อมูล
คำอธิบายใด ๆ ที่จะเป็นประโยชน์และโปรดแจ้งให้เราทราบหากฉันเข้าใจวิธีการใด ๆ เหล่านี้ผิด