2008-09-29 20 views
10

पर आधारित उपयोगकर्ताओं के लिए 'पड़ोसियों' उत्पन्न करना मैं उन साइट पर उपयोगकर्ताओं के लिए 'पड़ोसी' (समान स्वाद वाले लोगों) उत्पन्न करने की तकनीक ढूंढ रहा हूं; आखिरी.एफएम काम करता है।रेटिंग

वर्तमान में, मेरे पास उपयोगकर्ताओं के लिए एक संगत कार्य है जो खेल में आ सकता है। यह उपयोगकर्ताओं को 1) रेटेड समान वस्तुओं पर रैंक करता है 2) इसी तरह आइटम को रेट किया गया। समारोह 2 बिंदुओं का वजन करता है और यह सबसे महत्वपूर्ण होगा अगर मुझे 'पड़ोसियों' पैदा करते समय इन कारकों में से केवल एक का उपयोग करना पड़े।

एक विचार है कि मैं केवल उपयोगकर्ताओं के हर संयोजन की संगतता की गणना करना चाहता हूं और उच्चतम रेटेड उपयोगकर्ताओं को उपयोगकर्ता के लिए पड़ोसियों का चयन करना चाहता हूं। इसका नकारात्मक पक्ष यह है कि चूंकि उपयोगकर्ता की संख्या बढ़ जाती है तो इस प्रक्रिया को बहुत लंबे समय तक लेते हैं। केवल 1000 उपयोगकर्ताओं के लिए, इसे संगतता फ़ंक्शन पर 1000C2 (0.5 * 1000 * 999 = = 49 9 500) कॉल की आवश्यकता होती है जो सर्वर पर भी बहुत भारी हो सकती है।

तो मैं इस तरह की प्रणाली को सर्वोत्तम तरीके से प्राप्त करने के तरीके पर किसी भी सलाह, लेखों के लिंक इत्यादि की तलाश में हूं।

+0

सिर्फ पड़ोसी (या अमेरिका के लिए पड़ोसी) टैग पर एक टाइपो तय किया गया है ... – VonC

+0

यदि आप कुछ शानदार के साथ आते हैं, तो आप नेटफ्लिक्स पुरस्कार - http://netflixprize.com/ जीत सकते हैं। –

उत्तर

6

पुस्तक प्रोग्रामिंग में सामूहिक खुफिया
http://oreilly.com/catalog/9780596529321

अध्याय 2 "अनुशंसाएँ बनाना" लोगों के लिए आइटम की सिफारिश करने के तरीकों की रूपरेखा का एक बहुत अच्छा काम करता है आधारित:

अन्वेषण की जांच शुरू करने के लिए इस उपयोगकर्ताओं के बीच समानता पर। आप 'पड़ोसियों' को ढूंढने के लिए समानता एल्गोरिदम का उपयोग कर सकते हैं। अध्याय यहां Google पुस्तक खोज पर उपलब्ध है:
http://books.google.com/books?id=fEsZ3Ey-Hq4C&printsec=frontcover

+0

मैं इस पुस्तक की अत्यधिक अनुशंसा कर सकता हूं। आपको वहां जो चाहिए वह आपको मिलेगा। –

+0

इसके अलावा, गणना प्रक्रिया की अवधि के लिए, उपयोगकर्ताओं की बड़ी मात्रा के लिए चलाने में काफी समय लगेगा। आप इसे बैच करना चाहते हैं और साइट को हालिया रन के परिणाम प्रदर्शित करना है। –

0

क्या आपने kohonen networks के बारे में सुना है?

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

ऐसे डेटा संरचना के साथ पड़ोसियों को समान स्वाद के साथ ढूंढने और संग्रहीत करने के साथ ही समान उपयोगकर्ताओं को समान स्थानों में स्टोर किया जाना चाहिए (लगभग रिवर्स हैश कोड की तरह)।

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

अच्छे विभाजन चर खोजने के लिए सबसे अच्छा एल्गोरिदम decision tree है। जड़ के नजदीक नोड्स 'निकटता' स्थापित करने के लिए सबसे महत्वपूर्ण चर होंगे।

+0

मुझे व्यक्तिगत रूप से कोहोनन नेटवर्क (स्वयं-संगठित मानचित्र-एसओएम) को सहजता से समझने में बहुत मुश्किल होती है। क्या आपके पास शामिल गणित की व्याख्या करने वाले कार्यान्वयन और स्पष्टीकरण के बारे में अच्छी सिफारिशें हैं? –

0

ऐसा लगता है कि आपको clustering algorithms पढ़ने की आवश्यकता है। सामान्य विचार यह है कि हर बार जब आप उन्हें समान बिंदुओं के समूहों में विभाजित करते हैं तो प्रत्येक बिंदु को हर दूसरे बिंदु से तुलना करने की बजाय। फिर पड़ोस एक ही क्लस्टर में सभी बिंदु हो सकता है। क्लस्टर की संख्या/आकार आमतौर पर क्लस्टरिंग एल्गोरिदम का पैरामीटर होता है।

यो Google की श्रृंखला में cluster computing and mapreduce पर video about clustering पा सकता है।

0

यदि आप इसे रीयलटाइम क्वेरी के बजाय बिल्ड/बैच समस्या के रूप में देखते हैं तो प्रदर्शन पर चिंताएं बहुत कम हो सकती हैं।

ग्राफ़ को सांख्यिकीय रूप से गणना की जा सकती है, फिर हाल ही में अपडेट किया गया उदा। प्रति घंटा, दैनिक इत्यादि के लिए रनटाइम क्वेरी के लिए अनुकूलित किनारों और भंडारण को उत्पन्न करने के लिए। प्रत्येक उपयोगकर्ता के लिए शीर्ष 10 समान उपयोगकर्ता।

प्रोग्रामिंग सामूहिक खुफिया के लिए भी +1 - यह बहुत ही जानकारीपूर्ण है - इच्छा है कि यह पाइथन उन्मुख के रूप में नहीं था (या मैं था!), लेकिन अभी भी अच्छा है।

1

Collaborative Filtering पर ध्यान देना सुनिश्चित करें। कई सिफारिश प्रणाली उपयोगकर्ताओं को वस्तुओं का सुझाव देने के लिए सहयोगी फ़िल्टरिंग का उपयोग करती हैं। वे इसे 'पड़ोसियों' ढूंढकर करते हैं और फिर अपने पड़ोसियों को अत्यधिक मूल्यांकन करने वाले आइटम सुझाते हैं लेकिन आपने मूल्यांकन नहीं किया है। आप जहां तक ​​पड़ोसियों को ढूंढ सकते हैं, और कौन जानता है, शायद आप भविष्य में सिफारिशें चाहेंगे।

GroupLens मिनेसोटा विश्वविद्यालय में एक शोध प्रयोगशाला है जो सहयोगी फ़िल्टरिंग तकनीकों का अध्ययन करती है। उनके पास प्रकाशित शोध के साथ-साथ कुछ नमूना डेटासेट भी हैं।

Netflix Prize यह निर्धारित करने के लिए एक प्रतिस्पर्धा है कि इस तरह की समस्या का सबसे प्रभावी ढंग से कौन समाधान कर सकता है। उनके LeaderBoard से लिंक का पालन करें। कुछ प्रतियोगियों अपने समाधान साझा करते हैं।

जहाँ तक एक computationally सस्ती समाधान के रूप में, तो आप इस कोशिश कर सकते:

  • अपने आइटम के लिए श्रेणियों बनाएँ। अगर हम संगीत के बारे में बात कर रहे हैं, तो वे शास्त्रीय, चट्टान, जाज, हिप-हॉप हो सकते हैं ... या आगे जाएं: Grindcore, Math Rock, Riot Grrrl ...
  • अब, जब भी कोई उपयोगकर्ता किसी आइटम को रेट करता है, तो अपनी रेटिंग बढ़ाएं श्रेणी स्तर। तो आप जानते हैं कि 'उपयोगकर्ता ए' को होन्की टोंक और एसिड हाउस पसंद है क्योंकि वे उन वस्तुओं को अक्सर उच्च रेटिंग देते हैं। आपकी श्रेणी के कुल स्कोर के लिए आवृत्ति और ताकत शायद महत्वपूर्ण है।
  • जब सभी रेटिंग के माध्यम से यात्रा करने के बजाय पड़ोसियों को ढूंढने का समय होता है, तो श्रेणियों में समान स्कोर देखें।

यह विधि सटीक नहीं होगी लेकिन यह तेज़ है।

चीयर्स।

1

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

spectral clustering का उपयोग करने की एक अच्छी संभावना है, जो आपके पास सटीक रूप से आवश्यक है: एक समानता मैट्रिक्स। नकारात्मकता यह है कि आपको अभी भी प्रत्येक जोड़ी के लिए अपने संगतता फ़ंक्शन की गणना करने की आवश्यकता है, i। ई। एल्गोरिदम ओ (एन^2) है।

यदि आपको बिल्कुल ओ (एन^2) से अधिक एल्गोरिदम की आवश्यकता है, तो आप dissimilarity spaces नामक एक दृष्टिकोण को आजमा सकते हैं। विचार बहुत सरल है। आप अपनी संगतता फ़ंक्शन (ई। जी। अपने पारस्परिक रूप से ले कर) को असमानता या दूरी के माप में बदलने के लिए उलटा करते हैं। फिर आप प्रोटोटाइप वस्तुओं के एक सेट में प्रत्येक आइटम (उपयोगकर्ता, अपने मामले में) की तुलना करते हैं, और परिणामी दूरी को अंतरिक्ष में निर्देशांक के रूप में देखते हैं। उदाहरण के लिए, यदि आपके पास 100 प्रोटोटाइप हैं, तो प्रत्येक उपयोगकर्ता को 100 तत्वों के वेक्टर द्वारा दर्शाया जाएगा, i। ई। 100-आयामी अंतरिक्ष में एक बिंदु से।फिर आप K-means जैसे किसी मानक क्लस्टरिंग एल्गोरिदम का उपयोग कर सकते हैं।

सवाल यह है कि आप प्रोटोटाइप कैसे चुनते हैं, और आपको कितने की आवश्यकता है। विभिन्न ह्युरिस्टिक्स की कोशिश की गई है, हालांकि, यहां एक dissertation है जो तर्क देता है कि प्रोटोटाइप को यादृच्छिक रूप से चुनना पर्याप्त हो सकता है। यह उन प्रयोगों को दिखाता है जिनमें 100 या 200 यादृच्छिक रूप से चयनित प्रोटोटाइप का उपयोग अच्छे परिणाम उत्पन्न करते हैं। आपके मामले में यदि आपके पास 1000 उपयोगकर्ता हैं, और आप उनमें से 200 को प्रोटोटाइप के रूप में चुनते हैं, तो आपको 200,000 बार अपने संगतता फ़ंक्शन का मूल्यांकन करना होगा, जो कि प्रत्येक जोड़ी की तुलना में 2.5 के कारक में सुधार है। असली लाभ, हालांकि, यह है कि 1,000,000 उपयोगकर्ताओं के लिए 200 प्रोटोटाइप अभी भी पर्याप्त होंगे, और आपको 500,000,000,000 के बजाय 2500 के कारक में सुधार के बजाय 200,000,000 तुलना करने की आवश्यकता होगी। आपको क्या मिलता है ओ (एन) एल्गोरिदम, जो है संभावित रूप से बड़े स्थिर कारक के बावजूद ओ (एन^2) से बेहतर।

संबंधित मुद्दे