อัลกอริทึมการจัดกลุ่มกราฟที่มีประสิทธิภาพ


20

ฉันกำลังมองหาอัลกอริทึมที่มีประสิทธิภาพเพื่อค้นหากลุ่มบนกราฟขนาดใหญ่ (มีจุดยอดประมาณ 5,000 และ 10,000 เส้น)

จนถึงตอนนี้ฉันใช้อัลกอริทึม Girvan – Newman ที่นำมาใช้ในไลบรารี Java JUNG แต่มันค่อนข้างช้าเมื่อฉันพยายามลบขอบจำนวนมาก

คุณช่วยแนะนำฉันเป็นทางเลือกที่ดีกว่าสำหรับกราฟขนาดใหญ่ได้หรือไม่?


คุณเคยดูวิธี k หรือไม่?
Oded

คุณช่วยให้การอ้างอิงแก่ฉันเพื่อเรียนรู้เกี่ยวกับวิธีใช้บนกราฟได้ไหม?
mariosangiorgio


ฉันเปลี่ยนมาใช้ JUNG ของ VoltageClusterer และมันก็เร็วอย่างแน่นอน jung.sourceforge.net/doc/api/edu/uci/ics/jung/algorithms/…
mariosangiorgio

1
สิ่งนี้ไม่เหมาะสำหรับ < cs.stackexchange.com > หรือไม่มากกว่าวิทยาศาสตร์คอมพิวเตอร์มากกว่าวิศวกรซอฟต์แวร์
Oeufcoque Penteano

คำตอบ:


13

ผมเองขอแนะนำมาร์คอฟจัดกลุ่ม ฉันเคยใช้มาหลายครั้งแล้วและให้ผลลัพธ์ที่ดี

การเผยแพร่ความสัมพันธ์เป็นอีกทางเลือกหนึ่งที่ทำงานได้ แต่ดูเหมือนว่าจะไม่สอดคล้องกันมากกว่าการทำคลัสเตอร์มาร์คอฟ

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

ฉันพบบทความนี้ในขณะที่มองหาการวัดประสิทธิภาพมันเป็นการสำรวจที่ดีของเรื่อง


ขอบคุณฉันจะดูขั้นตอนวิธีทั้งหมดที่คุณแนะนำ
mariosangiorgio

การแก้ไข: อัลกอริทึมเหล่านี้ต้องการน้ำหนักที่ป้อนซึ่งสะท้อนความคล้ายคลึงกันไม่ใช่ระยะทาง คุณสมบัติเมทริก (ความไม่เท่าเทียมกันของรูปสามเหลี่ยม) ไม่ได้เข้ามา มันจะมีประโยชน์ในการแปลงน้ำหนักเพื่อให้พวกเขาตกอยู่ในช่วงธรรมชาติเช่น (สหสัมพันธ์เพียร์สัน) ตามที่อธิบายไว้ที่นี่ ( micans.org/mcl/man/clmprotocols.html#array ) และค่า E-BLAST ตามที่อธิบายไว้ที่นี่ ( micans.org/mcl/man/clmprotocols.html#blast )
micans

10

การจัดกลุ่มตามลำดับชั้น

เพื่อนคนนี้แนะนำให้ฉัน ตามที่Wikipedia :

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

มาร์คอฟคลัสเตอร์

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


5

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


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