जावा प्लेटोब्लॉकचैन डेटा इंटेलिजेंस में डिरिचलेट प्रोसेस मिक्सचर मॉडल के साथ क्लस्टरिंग। लंबवत खोज। ऐ.

Java में Dirichlet Process Mixture Model के साथ क्लस्टरिंग

पिछले लेखों में हमने विस्तार से चर्चा की डिरिचलेट प्रक्रिया मिश्रण मॉडल और क्लस्टर विश्लेषण में उनका उपयोग कैसे किया जा सकता है। इस लेख में हम जावा के कार्यान्वयन को प्रस्तुत करेंगे दो अलग-अलग DPMM मॉडल: ड्यूरिच मल्टीवेरेट नॉर्मल मिक्सचर मॉडल जिसे गॉसियन डेटा और डर्किचलेट-मल्टिनोमियल मिक्सचर मॉडल को क्लस्टर करने के लिए इस्तेमाल किया जा सकता है, जिसका इस्तेमाल दस्तावेजों को क्लस्ट करने के लिए किया जाता है। जावा कोड GPL v3 लाइसेंस के तहत खुला है और इसे स्वतंत्र रूप से डाउनलोड किया जा सकता है Github.

अद्यतन: डाटंबॉक्स मशीन लर्निंग फ्रेमवर्क अब खुला-स्रोत और मुफ्त है डाउनलोड। Java में Dirichlet Process Mixture मॉडल के कार्यान्वयन को देखने के लिए पैकेज com.datumbox.framework.machinelearning.clustering देखें।

Java में Dirichlet Process Mixture मॉडल का कार्यान्वयन

कोड गिब्स सैम्पलर के साथ डिरिक्लेट प्रोसेस मिक्सचर मॉडल को लागू करता है और मैट्रिक्स लाइब्रेरी के रूप में अपाचे कॉमन्स मैथ 3.3 का उपयोग करता है। यह GPLv3 के तहत लाइसेंस प्राप्त है इसलिए इसका उपयोग करने के लिए स्वतंत्र महसूस करें, इसे संशोधित करें और इसे स्वतंत्र रूप से वितरित करें और आप जावा कार्यान्वयन को इससे डाउनलोड कर सकते हैं Github। ध्यान दें कि आप पिछले 5 लेखों में क्लस्टरिंग विधि के सभी सैद्धांतिक भागों को पा सकते हैं और स्रोत कोड में कार्यान्वयन के लिए विस्तृत Javadoc टिप्पणी कर सकते हैं।

नीचे हम कोड पर एक उच्च स्तरीय विवरण सूचीबद्ध करते हैं:

1. DPMM वर्ग

DPMM एक अमूर्त वर्ग है और विभिन्न विभिन्न मॉडलों के लिए आधार की तरह कार्य करता है, लागू करता है चीनी रेस्तरां प्रक्रिया और इसमें शामिल है ढह गया गिब्स सैम्पलर। इसमें सार्वजनिक विधि क्लस्टर () है, जो डेटासेट को पॉइंट्स की सूची के रूप में प्राप्त करता है और क्लस्टर विश्लेषण करने के लिए जिम्मेदार है। वर्ग के अन्य उपयोगी तरीके getPointAssignments () हैं जो क्लस्टर पूरा होने के बाद क्लस्टर असाइनमेंट को प्राप्त करने के लिए उपयोग किया जाता है और getClusterList () का उपयोग किया जाता है जो पहचाने गए क्लस्टर की सूची प्राप्त करने के लिए उपयोग किया जाता है। DPMM में स्थिर नेस्टेड एब्स्ट्रैक्ट क्लास क्लस्टर होता है; इसमें बिंदुओं के प्रबंधन और क्लस्टर पीडीएफ के आकलन के लिए उपयोग किए जाने वाले पश्च पीडीएफ के अनुमान से संबंधित कई सार विधियां शामिल हैं।

2. गौसियनडीपीएमएम वर्ग

GaussianDPMM Dirichlet बहुभिन्नरूपी सामान्य मिश्रण मॉडल का कार्यान्वयन है और DPMM वर्ग का विस्तार करता है। इसमें गॉसियन धारणा के तहत संभावनाओं का अनुमान लगाने के लिए सभी विधियां शामिल हैं। इसके अलावा इसमें स्टैटिक नेस्टेड क्लास क्लस्टर है जो DPMM.Cluster क्लास के सभी अमूर्त तरीकों को लागू करता है।

3. बहुराष्ट्रीय डीपीएमएम वर्ग

MultinomialDPMM Dirichlet-Multinomial मिश्रण मॉडल को लागू करता है और DPMM वर्ग का विस्तार करता है। गॉसियनडीपीएमएम वर्ग के समान, इसमें वे सभी विधियाँ समाहित हैं जो बहुराष्ट्रीय-डिरिचलेट धारणा के तहत संभावनाओं का अनुमान लगाने के लिए आवश्यक हैं और इसमें स्थिर नेस्टेड वर्ग क्लस्टर शामिल है जो DPMM.Cluster के अमूर्त तरीकों को लागू करता है।

4. एसआरएस वर्ग

SRS वर्ग का उपयोग फ़्रीक्वेंसी टेबल से सिंपल रैंडम सैंपलिंग करने के लिए किया जाता है। यह गिब्स सैम्पलर द्वारा पुनरावृत्त प्रक्रिया के प्रत्येक चरण में नए क्लस्टर असाइनमेंट का अनुमान लगाने के लिए उपयोग किया जाता है।

5. बिंदु वर्ग

प्वाइंट क्लास एक टपल के रूप में कार्य करता है जो रिकॉर्ड के डेटा को उसकी आईडी के साथ संग्रहीत करता है।

6. अपाचे कॉमन्स मैथ लिब

Apache Commons Math 3.3 lib मैट्रिक्स गुणन के लिए उपयोग किया जाता है और यह हमारे कार्यान्वयन की एकमात्र निर्भरता है।

7. DPMMExample वर्ग

इस वर्ग में जावा कार्यान्वयन का उपयोग करने के तरीके शामिल हैं।

जावा कार्यान्वयन का उपयोग करना

कोड का उपयोगकर्ता मॉडल प्रकार और हाइपरपरमेटर्स सहित मिश्रण मॉडल के सभी मापदंडों को कॉन्फ़िगर करने में सक्षम है। निम्नलिखित कोड स्निपेट में हम देख सकते हैं कि एल्गोरिथ्म को कैसे आरंभ और निष्पादित किया जाता है:

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 अलग-अलग वितरणों द्वारा अंक उत्पन्न किए गए थे: एन ([10,50], आई), एन ([50,10], आई) और एन ([150,100], आई)।

स्कैल्प्लोट १
चित्र 1: डेमो डेटासेट का स्कैटर प्लॉट

एल्गोरिदम 10 पुनरावृत्तियों के लिए चलने के बाद, इसने 3 क्लस्टर केंद्रों की पहचान की: [10.17, 50.11], [49.99, 10.13] और [149.97, 99.81]। अंत में जब से हम एक बायेसियन तरीके से सब कुछ व्यवहार करते हैं, हम न केवल क्लस्टर केंद्रों के एकल बिंदु अनुमान प्रदान करने में सक्षम हैं, बल्कि उपयोग करके उनकी संभावना वितरण भी सूत्र समीकरण.

scatterplot2-हीटमैप
चित्रा 2: समूहों के केंद्रों की संभावनाओं का स्कैटर प्लॉट

ऊपर की आकृति में हम उन संभावनाओं की साजिश करते हैं; लाल क्षेत्र क्लस्टर के केंद्र होने की उच्च संभावना दर्शाते हैं और काले क्षेत्र कम संभावना दर्शाते हैं।

वास्तविक दुनिया के अनुप्रयोगों में जावा कार्यान्वयन का उपयोग करने के लिए आपको बाहरी कोड लिखना होगा जो आपके मूल डेटासेट को आवश्यक प्रारूप में परिवर्तित करता है। इसके अलावा अतिरिक्त कोड आवश्यक हो सकता है यदि आप आउटपुट की कल्पना करना चाहते हैं जैसा कि हम ऊपर देखते हैं। अंत में ध्यान दें कि अपाचे कॉमन्स मठ पुस्तकालय परियोजना में शामिल है और इस प्रकार डेमो को चलाने के लिए कोई अतिरिक्त कॉन्फ़िगरेशन की आवश्यकता नहीं है।

यदि आप एक दिलचस्प परियोजना में कार्यान्वयन का उपयोग करते हैं तो हमें एक पंक्ति में छोड़ दें और हम आपके प्रोजेक्ट को हमारे ब्लॉग पर दिखाएंगे। अगर आपको यह लेख पसंद आया है, तो कृपया एक क्षण लें और इसे ट्विटर या फेसबुक पर साझा करें।

समय टिकट:

से अधिक दातुनॉक्स