machine learning टैग के आधार पर उपयोगकर्ताओं को क्लस्टर कैसे करें




machine-learning neo4j (2)

आपको neo4j उपयोग करने पर विचार करना चाहिए आप निम्न नोड लेबल और संबंध प्रकारों का उपयोग करके अपने डेटा को मॉडल कर सकते हैं।

यदि आप neo4j के साइफर भाषा नोटेशन से परिचित नहीं हैं, तो (:Foo) लेबल Foo साथ एक नोड का प्रतिनिधित्व करता है, और [:BAR] टाइप BAR साथ एक संबंध का प्रतिनिधित्व करता है। एक संबंध के चारों ओर तीर अपनी दिशात्मकता दर्शाती है। neo4j कुशलतापूर्वक दोनों दिशाओं में संबंधों को पार करती है

(:Cluster) -[:INCLUDES_TAG]-> (:Tag) <-[:HAS_TAG]- (:Program) <-[:WATCHED]- (:User)

आपके पास k Cluster नोड्स, 20K Tag नोड्स और कई लाख WATCHED रिश्तों होंगे।

इस मॉडल के साथ, किसी भी दिए गए Cluster नोड से शुरू करते हुए, आप अपने सभी संबंधित टैग, कार्यक्रमों और उपयोगकर्ताओं को कुशलतापूर्वक खोज सकते हैं।

मैं श्रेणियों या उनके द्वारा देखे जाने वाले शो के टैग के आधार पर उपयोगकर्ताओं को क्लस्टर करना चाहता हूं। ऐसा करने के लिए सबसे आसान / सर्वश्रेष्ठ एल्गोरिथम क्या है?

मान लें कि मेरे पास लगभग 20,000 टैग हैं और कई लाख घड़ी की घटनाएं जो मैं सिग्नल के रूप में उपयोग कर सकता हूं, क्या कोई एल्गोरिथ्म है जो मैं सुअर / हूओप / मोर्टार या शायद neo4j पर प्रयोग कर लागू कर सकता हूं?

डेटा के संदर्भ में मेरे पास प्रयोक्ता हैं, उन्होंने जो प्रोग्राम देखे हैं, और एक प्रोग्राम (आमतौर पर प्रति प्रोग्राम लगभग 10 टैग) टैग हैं

मैं कलर्स के आखिरी कश्मीर संख्या (शायद एक दर्जन?) या व्यापक बाल्टी से अपेक्षा करना चाहूंगा जो कि मैं अपने उपयोगकर्ताओं को वर्गीकृत करने और अपने उपयोगकर्ताओं को बाल्टियों में बांटने के लिए उपयोग कर सकता हूं और इस बारे में कुछ अंतर्दृष्टि भी हासिल कर सकता है कि वे किस प्रकार विभाजित होंगे - टैग्स के एक सेट के साथ प्रत्येक क्लस्टर का प्रतिनिधित्व

मैंने कुछ पदों को एक पदानुक्रमित एल्गोरिथ्म का सुझाव दिया है, लेकिन यह सुनिश्चित नहीं किया है कि किस तरह उस मामले में "दूरी" की गणना होगी। क्या यह दो उपयोगकर्ताओं के बीच की दूरी या उपयोगकर्ता के बीच और टैग्स आदि के बीच की दूरी होगी।


आप मूल रूप से अपने टैग के अनुसार उपयोगकर्ताओं को क्लस्टर करना चाहते हैं।

इसे सरल रखने के लिए, मान लें कि आपके पास केवल 10 टैग हैं (20,000 लोगों के बजाय) मान लें कि एक यूज़र, यूज़र_34 कहें, तो दूसरा और 7 वें टैग है। इस क्लस्टरिंग कार्य के लिए, user_34 को 10-आयामी अंतरिक्ष में एक बिंदु के रूप में प्रस्तुत किया जा सकता है , और उसके संबंधित निर्देशांक हैं: [0,1,0,0,0,0,1,0,0,0,0]

आपके मामले में, प्रत्येक उपयोगकर्ता को 20,000-आयामी अंतरिक्ष में एक बिंदु के रूप में इसी तरह से प्रदर्शित किया जा सकता है। आप अपाचे महूत का उपयोग कर सकते हैं जिसमें कई प्रभावी क्लस्टरिंग एल्गोरिदम शामिल हैं, जैसे के-अर्थ

चूंकि हर चीज को गणितीय समन्वय प्रणाली में अच्छी तरह से परिभाषित किया गया है, किसी भी दो उपयोगकर्ताओं के बीच की दूरी की गणना करना आसान है! यह किसी भी दूरी समारोह का उपयोग करके गणना की जा सकती है, लेकिन यूक्लिडियन दूरी डी-फ़ैक्टो मानक है।

नोट: महुउट और कई अन्य डेटा-खनन कार्यक्रम SPARSE विशेषताओं के लिए उपयुक्त कई प्रारूपों का समर्थन करते हैं, यानी आपको फ़ाइल में ..., 0,0,0,0,0 ... डालने की आवश्यकता नहीं है, लेकिन केवल यह निर्दिष्ट करने की आवश्यकता है कि टैग चयनित हैं ( Mahout में RandomAccessSparseVector देखें )

नोट: मैंने मान लिया है कि आप केवल अपने उपयोगकर्ताओं को क्लस्टर करना चाहते हैं। क्लस्टर से प्रतिनिधि की जानकारी निकालने में कुछ मुश्किल है। उदाहरण के लिए, प्रत्येक क्लस्टर के लिए आप क्लस्टर के उपयोगकर्ताओं के बीच अधिक सामान्य टैग्स का चयन कर सकते हैं। वैकल्पिक रूप से, आप सूचना सिद्धांत से अवधारणाओं का उपयोग कर सकते हैं, जैसे सूचना प्राप्त करने के लिए कि कौन से टैग में क्लस्टर के बारे में अधिक जानकारी है