यह उन लोगों के लिए "कैसे" सवाल का हिस्सा है, जो व्यावहारिक रूप से विरल-एसवीडी सिफारिशों को लागू करना चाहते हैं या विवरण के लिए स्रोत कोड का निरीक्षण करना चाहते हैं। आप विरल-एसवीडी को मॉडल करने के लिए एक ऑफ-द-शेल्फ FOSS सॉफ्टवेयर का उपयोग कर सकते हैं। उदाहरण के लिए, vowpal wabbit
, libFM
, या redsvd
।
vowpal wabbit
"एसवीडी-जैसे" एल्गोरिदम के 3 कार्यान्वयन हैं (प्रत्येक 3 कमांड लाइन विकल्पों में से एक का चयन करने योग्य)। स्पष्ट रूप से इन्हें बोलने वाले को शुद्ध "क्लासिक" एसवीडी के बजाय "अनुमानित, पुनरावृत्ति, मैट्रिक्स का कारक" कहा जाना चाहिए, लेकिन वे एसवीडी से निकटता से संबंधित हैं। आप शायद ही कभी एक विरल के बहुत कम्प्यूटेशनल-कुशल अनुमानित एसवीडी-कारक के रूप में सोच सकते हैं। शून्य) मैट्रिक्स।
यहां नेटफ्लिक्स स्टाइल मूवी की सिफारिशों के साथ काम करने के लिए एक पूर्ण, नुस्खा है vowpal wabbit
और इसके "कम रैंक वाले क्वाड्रेटिक" ( --lrq
) विकल्प जो मेरे लिए सबसे अच्छा काम करते हैं:
डेटा सेट प्रारूप फ़ाइल ratings.vw
(उपयोगकर्ता और फिल्म द्वारा एक पंक्ति पर प्रत्येक रेटिंग):
5 |user 1 |movie 37
3 |user 2 |movie 1019
4 |user 1 |movie 25
1 |user 3 |movie 238
...
जहां 1 नंबर रेटिंग (1 से 5 स्टार) है, जिसके बाद रेट करने वाले यूजर की आईडी और मूवी आईडी को रेट किया गया है।
परीक्षण डेटा एक ही प्रारूप में है, लेकिन (वैकल्पिक रूप से) रेटिंग कॉलम को छोड़ सकते हैं:
|user 1 |movie 234
|user 12 |movie 1019
...
वैकल्पिक रूप से क्योंकि भविष्यवाणियों का मूल्यांकन / परीक्षण करने के लिए हमें भविष्यवाणियों की तुलना करने के लिए रेटिंग की आवश्यकता होती है। यदि हम रेटिंग्स को छोड़ देते हैं, तब vowpal wabbit
भी रेटिंग का अनुमान लगा लेंगे , लेकिन भविष्यवाणी की त्रुटि (डेटा में वास्तविक मान बनाम भविष्यवाणी की गई) का अनुमान लगाने में सक्षम नहीं होंगे।
प्रशिक्षित करने के लिए हम उपयोगकर्ताओं और उनकी पसंद (या नापसंद) के बीच अव्यक्त अंतःक्रियात्मक कारकों vowpal wabbit
का एक समूह खोजने के लिए कहते हैं N
। आप इसके बारे में सामान्य विषयों को खोजने के बारे में सोच सकते हैं जहां समान उपयोगकर्ता समान तरीके से फिल्मों का एक सबसेट रेट करते हैं और इन सामान्य विषयों का उपयोग करके यह अनुमान लगाते हैं कि उपयोगकर्ता किसी फिल्म को कैसे रेट करेगा जो उसने अभी तक रेट नहीं किया है।
vw
विकल्प और तर्क जिनका हमें उपयोग करने की आवश्यकता है:
--lrq <x><y><N>
"कम रैंक वाले द्विघात" अव्यक्त-कारकों को ढूँढता है।
<x><y>
: "um" का अर्थ है डेटा सेट में u [sers] और m [ovie] नाम-रिक्त स्थान को पार करना। ध्यान दें कि प्रत्येक नाम-स्थान में केवल 1 अक्षर का उपयोग --lrq
विकल्प के साथ किया जाता है ।
<N>
: N=14
नीचे अव्यक्त कारकों की संख्या है जिसे हम खोजना चाहते हैं
-f model_filename
: फाइनल मॉडल में लिखें model_filename
तो एक सरल पूर्ण प्रशिक्षण कमान होगी:
vw --lrq um14 -d ratings.vw -f ratings.model
एक बार हमारे पास ratings.model
मॉडल फ़ाइल होने के बाद, हम इसका उपयोग नए डेटा-सेट पर अतिरिक्त रेटिंग की भविष्यवाणी करने के लिए कर सकते हैं more_ratings.vw
:
vw -i ratings.model -d more_ratings.vw -p more_ratings.predicted
भविष्यवाणियों को फ़ाइल में लिखा जाएगा more_ratings.predicted
।
स्रोत ट्री demo/movielens
में उपयोग करते हुए vowpalwabbit
, मुझे ml-1m.ratings.train.vw
14 अव्यक्त-कारकों (जिसका अर्थ है कि SVD मध्य मैट्रिक्स एक 14x14 पंक्तियों x कॉलम मैट्रिक्स है) और स्वतंत्र पर परीक्षण के साथ 1 मिलियन उपयोगकर्ता / मूवी रेटिंग पर प्रशिक्षण के बाद ~ 0.693 MAE (मतलब निरपेक्ष त्रुटि) मिलता है। परीक्षण-सेट ml-1m.ratings.test.vw
। 0.69 MAE कितना अच्छा है? संभावित भविष्यवाणियों की पूरी श्रृंखला के लिए, जिसमें अनरेटेड (0) केस [0 से 5] शामिल है, 0.69 त्रुटि पूर्ण रेंज की ~ 13.8% (0.69 / 5.0) है, यानी लगभग 86.2% सटीकता (1 - 0.138)।
आप उदाहरण और एक समान डेटा-सेट (movielens) के लिए एक पूर्ण डेमो जीथब vowpal wabbit
पर स्रोत के पेड़ में प्रलेखन के साथ पा सकते हैं :
टिप्पणियाँ:
movielens
डेमो कई विकल्प मैं छोड़े गए (सादगी के लिए) मेरे उदाहरण से उपयोग करता है: विशेष रूप से --loss_function quantile
, --adaptive
है, और--invariant
--lrq
में कार्यान्वयन vw
बहुत तेजी से है --rank
जब भंडारण और मॉडल लोड हो रहा है, विशेष रूप से।
क्रेडिट:
--rank
vw विकल्प जेक हॉफमैन द्वारा लागू किया गया था
--lrq
vw विकल्प (वैकल्पिक ड्रॉपआउट के साथ) पॉल मिनेरो द्वारा लागू किया गया था
- vowpal wabbit (उर्फ vw) जॉन लैंगफोर्ड का मस्तिष्क बच्चा है