การทำคลัสเตอร์ด้วยแบบจำลองส่วนผสมกระบวนการ Dirichlet ใน Java PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

การทำคลัสเตอร์ด้วยโมเดลส่วนผสมของกระบวนการ Dirichlet ใน Java

ในบทความก่อนหน้านี้ เราได้กล่าวถึงรายละเอียดเกี่ยวกับ แบบจำลองส่วนผสมของกระบวนการ Dirichlet และวิธีการนำไปใช้ในการวิเคราะห์คลัสเตอร์ ในบทความนี้เราจะนำเสนอการใช้งาน Java ของ DPMM สองรุ่นที่แตกต่างกัน: Dirichlet Multivariate Normal Mixture Model ซึ่งสามารถใช้เพื่อจัดกลุ่มข้อมูล Gaussian และ Dirichlet-Multinomial Mixture Model ซึ่งใช้ในการจัดกลุ่มเอกสาร รหัส Java เป็นโอเพ่นซอร์สภายใต้ลิขสิทธิ์ GPL v3 และสามารถดาวน์โหลดได้ฟรีจาก Github.

อัปเดต: ขณะนี้ Datumbox Machine Learning Framework เป็นโอเพ่นซอร์สและฟรีสำหรับ ดาวน์โหลด. ตรวจสอบแพ็คเกจ com.datumbox.framework.machinelearning.clustering เพื่อดูการใช้งาน Dirichlet Process Mixture Models ใน Java

การนำโมเดลส่วนผสมของกระบวนการ Dirichlet ไปใช้ใน Java

โค้ดนี้ใช้โมเดลส่วนผสมของกระบวนการ Dirichlet กับ Gibbs Sampler และใช้ Apache Commons Math 3.3 เป็นไลบรารีเมทริกซ์ มันได้รับอนุญาตภายใต้ GPLv3 ดังนั้นอย่าลังเลที่จะใช้ แก้ไข และแจกจ่ายซ้ำได้อย่างอิสระ และคุณสามารถดาวน์โหลดการใช้งาน Java ได้จาก Github. โปรดทราบว่าคุณสามารถค้นหาส่วนทางทฤษฎีทั้งหมดของวิธีการจัดกลุ่มได้ใน 5 บทความก่อนหน้าและความคิดเห็น Javadoc โดยละเอียดสำหรับการนำไปใช้ในซอร์สโค้ด

ด้านล่างเราแสดงคำอธิบายระดับสูงเกี่ยวกับรหัส:

1. คลาส DPMM

DPMM เป็นคลาสนามธรรมและทำหน้าที่เป็นฐานสำหรับโมเดลต่างๆ กระบวนการร้านอาหารจีน และมี ตัวอย่าง Gibbs ที่ยุบ. มีคลัสเตอร์เมธอดสาธารณะ () ซึ่งรับชุดข้อมูลเป็นรายการจุดและรับผิดชอบในการดำเนินการวิเคราะห์คลัสเตอร์ วิธีที่มีประโยชน์อื่นๆ ของคลาสคือ getPointAssignments() ซึ่งใช้เพื่อเรียกข้อมูลการกำหนดคลัสเตอร์หลังจากการจัดคลัสเตอร์เสร็จสิ้น และ getClusterList() ซึ่งใช้เพื่อรับรายการคลัสเตอร์ที่ระบุ DPMM ประกอบด้วยคลัสเตอร์คลาสนามธรรมที่ซ้อนกันแบบสแตติก ประกอบด้วยวิธีการที่เป็นนามธรรมหลายประการเกี่ยวกับการจัดการประเด็นและการประมาณค่าของ pdf หลังที่ใช้สำหรับการประมาณค่าของงานที่มอบหมายในคลัสเตอร์

2. คลาสเกาส์เซียนDPMM

GaussianDPMM คือการนำ Dirichlet Multivariate Normal Mixture Model ไปใช้และขยายคลาส DPMM ประกอบด้วยวิธีการทั้งหมดที่จำเป็นในการประมาณความน่าจะเป็นภายใต้สมมติฐานแบบเกาส์เซียน นอกจากนี้ยังมีคลัสเตอร์คลาสที่ซ้อนกันแบบสแตติกซึ่งใช้เมธอดนามธรรมทั้งหมดของคลาส DPMM.Cluster

3. คลาส MultinomialDPMM

MultinomialDPMM ใช้แบบจำลองส่วนผสม Dirichlet-Multinomial และขยายคลาส DPMM คล้ายกับคลาส GaussianDPMM มันมีวิธีการทั้งหมดที่จำเป็นในการประมาณความน่าจะเป็นภายใต้สมมติฐาน Multinomial-Dirichlet และมีคลาส Cluster ที่ซ้อนกันแบบสแตติกซึ่งใช้วิธีนามธรรมของ DPMM.Cluster

4. คลาส SRS

คลาส SRS ใช้เพื่อทำการสุ่มตัวอย่างอย่างง่ายจากตารางความถี่ Gibbs Sampler ใช้เพื่อประเมินการกำหนดคลัสเตอร์ใหม่ในแต่ละขั้นตอนของกระบวนการวนซ้ำ

5. ระดับคะแนน

คลาส Point ทำหน้าที่เป็น tuple ซึ่งเก็บข้อมูลของเร็กคอร์ดพร้อมกับ id

6. Apache Commons คณิตศาสตร์ Lib

Apache Commons Math 3.3 lib ใช้สำหรับคูณเมทริกซ์ และเป็นการพึ่งพาอาศัยกันเพียงอย่างเดียวของการใช้งานของเรา

7. DPMMคลาสตัวอย่าง

คลาสนี้มีตัวอย่างวิธีการใช้ Java ใช้งาน

การใช้ Java การใช้งาน

ผู้ใช้รหัสสามารถกำหนดค่าพารามิเตอร์ทั้งหมดของแบบจำลองผสม รวมถึงประเภทแบบจำลองและไฮเปอร์พารามิเตอร์ ในข้อมูลโค้ดต่อไปนี้ เราสามารถดูว่าอัลกอริทึมเริ่มต้นและดำเนินการอย่างไร:

List<Point> pointList = new ArrayList<>();
//add records in pointList

//Dirichlet Process parameter
Integer dimensionality = 2;
double alpha = 1.0;

//Hyper parameters of Base Function
int kappa0 = 0;
int nu0 = 1;
RealVector mu0 = new ArrayRealVector(new double[]{0.0, 0.0});
RealMatrix psi0 = new BlockRealMatrix(new double[][]{{1.0,0.0},{0.0,1.0}});

//Create a DPMM object
DPMM dpmm = new GaussianDPMM(dimensionality, alpha, kappa0, nu0, mu0, psi0);

int maxIterations = 100;
int performedIterations = dpmm.cluster(pointList, maxIterations);

//get a list with the point ids and their assignments
Map<Integer, Integer> zi = dpmm.getPointAssignments();

ด้านล่างนี้ เราสามารถเห็นผลของการรันอัลกอริทึมบนชุดข้อมูลสังเคราะห์ซึ่งประกอบด้วยจุดข้อมูล 300 จุด คะแนนถูกสร้างขึ้นจากการแจกแจงที่แตกต่างกัน 3 แบบ: N([10,50], I), N([50,10], I) และ N([150,100], I)

พล็อตกระจาย1
รูปที่ 1: Scatter Plot ของชุดข้อมูลสาธิต

อัลกอริธึมหลังจากรัน 10 รอบ มันระบุศูนย์คลัสเตอร์ 3 แห่งต่อไปนี้: [10.17, 50.11], [49.99, 10.13] และ [149.97, 99.81] สุดท้าย เนื่องจากเราปฏิบัติต่อทุกอย่างในลักษณะแบบเบย์ เราจึงไม่เพียงแต่จัดเตรียมการประมาณค่าจุดเดียวของศูนย์คลัสเตอร์ แต่ยังรวมถึงการแจกแจงความน่าจะเป็นโดยใช้ สูตร สมการ.

scatterplot2-แผนที่ความร้อน
รูปที่ 2: แผนภาพความน่าจะเป็นแบบกระจายของจุดศูนย์กลางของกระจุกดาว

ในรูปด้านบน เราพล็อตความน่าจะเป็นเหล่านั้น พื้นที่สีแดงบ่งชี้ความน่าจะเป็นสูงที่จะเป็นศูนย์กลางของกระจุกดาว และพื้นที่สีดำบ่งชี้ความน่าจะเป็นต่ำ

ในการใช้ Java ในการใช้งานจริง คุณต้องเขียนโค้ดภายนอกที่แปลงชุดข้อมูลดั้งเดิมของคุณให้อยู่ในรูปแบบที่ต้องการ นอกจากนี้ อาจจำเป็นต้องมีโค้ดเพิ่มเติมหากคุณต้องการให้เห็นภาพผลลัพธ์ตามที่เราเห็นด้านบน สุดท้ายนี้ โปรดทราบว่าไลบรารี Apache Commons Math จะรวมอยู่ในโปรเจ็กต์ ดังนั้นจึงไม่จำเป็นต้องกำหนดค่าเพิ่มเติมเพื่อรันการสาธิต

หากคุณใช้การดำเนินการในโครงการที่น่าสนใจ แจ้งเรา แล้วเราจะนำเสนอโครงการของคุณในบล็อกของเรา นอกจากนี้ หากคุณชอบบทความนี้ โปรดสละเวลาสักครู่แล้วแชร์บน Twitter หรือ Facebook

ประทับเวลา:

เพิ่มเติมจาก กล่องข้อมูล