วิธีการตรวจหาชุมชนในเครือข่ายโซเชียล / กราฟถ่วงน้ำหนัก


42

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

ในอดีตฉันทำตามคำแนะนำที่ฉันได้รับที่นี่ใน stats.stackexchange.com และใช้การดำเนินการตามกฎเกณฑ์ของการจัดกลุ่มแบบแยกส่วนของนิวแมนและพอใจกับผลการทดลอง

มีอัลกอริทึมเฉพาะที่ฉันควรจะดูหรือไม่?

คำตอบ:


20

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


ขอบคุณมากที่ชี้สิ่งนี้มาให้ฉันฉันพลาดการอ้างอิงถึงตุ้มน้ำหนักในเอกสารอย่างสมบูรณ์
laramichaels

9

ฉันรู้ว่าGephiสามารถประมวลผลกราฟถ่วงน้ำหนักไม่มีทิศทาง แต่ฉันดูเหมือนจะจำได้ว่ามันจะต้องมีการเก็บไว้ในGDFซึ่งเป็นสวยใกล้เคียงกับ CSV หรือ Ucinet DL โปรดระวังว่ามันยังเป็นรุ่นอัลฟ่า ตอนนี้เกี่ยวกับการจัดกลุ่มกราฟของคุณดูเหมือนว่า Gephi จะไม่มีท่อส่งกลุ่มยกเว้นสำหรับอัลกอริทึม MCL ที่มีให้ในเวอร์ชันล่าสุด มีโครงการรหัสของ Googleในปี 2009 สถิติเครือข่าย Gephi (ที่มีเช่นตัวชี้วัดความเป็นโมดูลของนิวแมน) แต่ฉันไม่รู้ว่ามีบางอย่างได้รับการเผยแพร่ในทิศทางนี้หรือไม่ อย่างไรก็ตามดูเหมือนว่าจะอนุญาตให้มีการคำนวณแบบแยกส่วน / การจัดกลุ่มบางส่วน แต่ดูการวิเคราะห์เครือข่ายสังคมโดยใช้ R และ Gephiและการเตรียมข้อมูลสำหรับการวิเคราะห์เครือข่ายสังคมโดยใช้ R และ Gephi (ขอบคุณมากที่ @Tal)

หากคุณคุ้นเคยกับ Python คุณควรลองใช้NetworkX (นี่คือตัวอย่างของกราฟถ่วงน้ำหนักที่มีรหัสที่เกี่ยวข้อง) จากนั้นคุณมีหลายวิธีในการวิเคราะห์

นอกจากนี้คุณยังควรมีลักษณะที่INSNA - ซอฟต์แวร์การวิเคราะห์เครือข่ายทางสังคมหรือหน้าเว็บทิมอีแวนส์เกี่ยวกับเครือข่ายที่ซับซ้อนและความซับซ้อน


สวัสดีที่นั่นเพียงแจ้งให้คุณทราบว่า Gephi ไม่สามารถจัดการกับกราฟที่ไม่ได้ระบุทิศทางเพื่อระบุชุมชนผ่านโมดูลาร์ ขอบคุณ -Gautam

@Gautam ดีใจที่รู้ขอบคุณ ฉันไม่คุ้นเคยกับ Gephi มากนัก แต่ฉันคิดว่ามันเป็นการพัฒนาที่กระตือรือร้น
chl


4

อัลกอริทึมแบบโมดูลาร์ Louvain มีให้บริการใน C ++: https://sites.google.com/site/findcommunities/

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


อัลกอริทึมแบบโมดูลาร์ Louvain นั้นรวดเร็วและมั่นคงฉันสงสัยว่ามีแผนที่ลดเวอร์ชั่นหรือไม่
หน้า

3

หากคุณใช้ python และสร้างกราฟถ่วงน้ำหนักโดยใช้NetworkXคุณสามารถใช้python-louvainสำหรับการทำคลัสเตอร์ โดยที่ G คือกราฟถ่วงน้ำหนัก:

import community 
partition = community.best_partition(G, weight='weight')

1

ฉันเพิ่งเจอแพ็คเกจ tnet สำหรับ R ผู้สร้างดูเหมือนว่าจะทำการวิจัยเกี่ยวกับการค้นพบชุมชนในกราฟแบบถ่วงน้ำหนักและสองฝ่าย (สองโหมด)

http://opsahl.co.uk/tnet/content/view/15/27/

ฉันยังไม่ได้ใช้


1

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

https://sites.google.com/site/communitydetectionslpa/

ดูความคิดเห็นดี arxiv.org/abs/1110.5813 สำหรับข้อมูลเพิ่มเติม


1

ฉันใช้งานจาวาสำหรับเครือข่ายที่ไม่ทับซ้อนน้ำหนัก / ไม่ถ่วงซึ่งอาจรองรับโหนดได้ถึง 3 ล้านโหนด (ฉันได้ทดสอบกับชุดข้อมูลหนึ่งล้านโหนด) อย่างไรก็ตามมันทำงานเหมือน k-mean และต้องการจำนวนพาร์ติชันที่จะตรวจพบเป็นอินพุต (k ใน kmeans) คุณสามารถค้นหาข้อมูลเพิ่มเติมได้ที่นี่และที่นี่คือรหัส , ใน GitHub

ไชโย

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