প্রশ্নটি
আমি স্পার্কে প্রশিক্ষিত একটি ALS মডেলটিতে একজন নতুন ব্যবহারকারীর জন্য রেটিংটি কীভাবে পূর্বাভাস করব? (নতুন = প্রশিক্ষণের সময় দেখা যায় না)
সমস্যাটি
আমি এখানে অফিসিয়াল স্পার্ক ALS টিউটোরিয়াল অনুসরণ করছি:
http://ampcamp.berkeley.edu/big-data-mini-course/movie-recommendation-with-mllib.html
আমি একটি শালীন এমএসই দিয়ে একটি ভাল সুপারিশকারী তৈরি করতে সক্ষম তবে আমি কীভাবে মডেলটিতে নতুন ডেটা ইনপুট করবেন তা নিয়ে লড়াই করছি। টিউটোরিয়াল প্রশিক্ষণের আগে প্রথম ব্যবহারকারীর রেটিং পরিবর্তন করে তবে এটি সত্যই হ্যাক। তারা নিম্নলিখিত ইঙ্গিত দেয়:
9.2। মেট্রিক্সের কারণগুলি বাড়িয়ে তোলা:
এই টিউটোরিয়ালে, আমরা প্রশিক্ষণের সেটটিতে আপনার রেটিংগুলি যুক্ত করব। আপনার জন্য সুপারিশ পাওয়ার আরও ভাল উপায় হ'ল প্রথমে একটি ম্যাট্রিক্স ফ্যাক্টেরাইজেশন মডেলকে প্রশিক্ষণ দেওয়া এবং তারপরে আপনার রেটিংগুলি ব্যবহার করে মডেলটিকে বাড়ানো। যদি এটি আপনার কাছে আকর্ষণীয় মনে হয় তবে আপনি ম্যাট্রিক্স ফ্যাক্টরাইজেশন মডেলের বাস্তবায়নটি একবার দেখে নিতে পারেন এবং কীভাবে নতুন ব্যবহারকারী এবং নতুন চলচ্চিত্রের জন্য মডেলটি আপডেট করবেন।
বাস্তবায়ন যদিও আমাকে কিছুটা সাহায্য করে না। আদর্শভাবে, আমি এমন কিছু সন্ধান করছি:
predictions = model.predictAllNew(newinput)
তবে এ জাতীয় পদ্ধতি নেই। আমি গিয়ে মূল আরডিডি সংশোধন করতে পারতাম, তবে আমি মনে করি এটির জন্য আমাকে মডেলটি পুনরায় প্রশিক্ষণ করতে হবে, সুতরাং এটি একটি আদর্শ সমাধানও হবে না। অবশ্যই আরও একটি মার্জিত উপায় আছে?
আমি এখন যেখানে আছি:
আমি মনে করি নতুন ভেক্টরের সুপ্ত প্রতিনিধিত্ব খুঁজে পাওয়া দরকার। মতে মূল কাগজ আমরা তাই মত এই গনা করতে পারেন:
কিন্তু যখন আমি কাগজে মানগুলি ব্যবহার করে গণনা করি, তখন এটি মডেলের মানগুলির সাথে মেলে না। আমি আলফা এবং নিয়মিতকরণের প্যারামিটারটি ঠিক করেছি, তবে আমি মনে করি এমএলএলআইবি ইমপ্লেন্টেশনটির আলাদা বাস্তবায়ন রয়েছে। এটি এখানে সংজ্ঞায়িত হয়েছে (দেখুন 1304 লাইন), তবে স্কালায় পারদর্শী নয়, এটি আমার পক্ষে প্রকৌশলীকে বিপরীত করা খুব কঠিন ...
আমার বর্তমান প্রচেষ্টা:
V = model.productFeatures().map(lambda x: (x[1])).collect() #product latent matrix Y
Cui = alpha * np.abs(newinput)
Cui = (1. + Cui) / (Cui)
Cui[np.where(newinput == 0)] = 0
Cui = np.diag(Cui)
lambdaI = len(np.where(newinput!=0)) * regularization_parameter * np.eye(np.shape(V)[1]) #
term = np.dot(np.dot(Vt,Cui),V)+lambdaI
term = np.dot(np.linalg.inv(term),Vt)
term = np.dot(term,Cui)
term = np.dot(term,newinput)
latentinput = term
তবে এটি মেলে না।