ساخت یک توصیه کننده فیلم با استفاده از ماتریس factorizaton  در ML.NET (قسمت6)

گردش کار یادگیری ماشینشما برای انجام وظیفه و سایر کارهای ML.NET از مراحل زیر استفاده خواهید کرد:1- بارگذاری داده Load your data2- ساخت و تمرین مدل Build and train your model3- ارزیابی مدل Evaluate your model4- استفاده از مدل Use your modelانتخاب وظیفه مناسب یادگیری ماشینروش های مختلفی برای رسیدگی به مسئله توصیه(recommendation) وجود دارد ، از جمله توصیه لیست فیلم ها یا توصیه لیستی از محصولات مرتبط ، اما در این حالت پیش بینی می کنیم که چه رتبه ای (1-5) کاربر به یک فیلم خاص می دهد و آن فیلم را توصیه می کند. اگر بالاتر از یک آستانه مشخص باشد (هرچه امتیاز بالاتر باشد ، احتمال اینکه کاربر فیلم خاصی را دوست دارد بیشتر است).ساخت یک پروژه console application1- یک پروژه App (.NET Core) ایجاد و نام آن را MovieRecommender بگذارید. 2- پکیج های Microsoft.ML و Microsoft.ML.Recommender از nuget نصب کنید.3- فضای نام های زیر را به فایل Program.cs اضافه کنید.using System; using System.IO; using Microsoft.ML; using Microsoft.ML.Trainers;دانلود دادها1- یک پوشه بنام Data بسازید و فایل های زیر را درون آن قرار دهید:روی recommendation-ratings-train.csv کلیک راست کرده و "Save Link (or Target) As..." انتخاب کنیدروی recommendation-ratings-test.csv کلیک راست کرده و "Save Link (or Target) As..." انتخاب کنیدمطمئن شوید که پرونده های * .csv را در پوشه Data ذخیره کرده اید ، یا بعد از ذخیره سازی آن در جای دیگر ، پرونده های * .csv را به پوشه Data منتقل کنید.اگر هنگام ذخیره فایل ها پسوند آنها txt. بود آن را پاک کنید.(مثلا recommendation-ratings-train.csv.txt تبدیل شود به recommendation-ratings-train.csv)2- روی فایل ها راست کلیک کرده و در قسمت Properties مقدار Copy to Output Directory را به Copy if newer تغییر دهید.بارگذاری داد / لود کردن دادهاولین قدم در فرآیند ML.NET تهیه و بارگذاری مدل آموزش و داده تستی ست.داده های رتبه بندی توصیه به مجموعه داده های Train و Test تقسیم می شود. داده Train برای fit کردن (آموزش دادن) مدل می باشد. از داده های Test برای پیش بینی با مدل آموزش دیده و ارزیابی عملکرد مدل استفاده می شود.معمول است که یک داده 80/20 با داده های Train و Test تقسیم شود(80 train و 20 test).در زیر پیش نمایش داده فایل های *. csv شما آمده است:در فایل های * .csv چهار ستون وجود دارد:userIdmovieIdratingtimestampدر یادگیری ماشین به ستونهایی که برای تهیه پیش بینی استفاده می شود ،Features گفته می شود و ستون با پیش بینی بازگردانده شده ، Label نام دارد.شما می خواهید رتبه بندی فیلم را پیش بینی کنید ، بنابراین ستون رتبه بندی ، Label است.سه ستون دیگر ، userId ، movieId و timestamp همه Feature هایی (ویژگی هایی) هستند که برای پیش بینی Label(برچسب) استفاده می شوند.این وظیفه شماست که تصمیم بگیرید کدام Featureها برای پیش بینی Label استفاده شوند.همچنین می توانید برای انتخاب بهترین Feature ها از روشهایی مانند Feature Permutation Importance برای کمک به انتخاب بهترین Feature ها استفاده کنید.در این حالت ، شما باید ستون timestamp را به عنوان یک Feature درنظر نگیرید زیرا timestamp(نشانگر زمانی) واقعاً بر نحوه رتبه بندی یک کاربر از یک فیلم معین تأثیر نمی گذارد و بنابراین نمی تواند در پیش بینی دقیق تر کمک کند:در مرحله بعد باید ساختار داده خود را برای کلاس ورودی تعریف کنید.یک کلاس جدید با نام MovieRatingData.cs ایجاد کنید.در بالای کلاس ایجاد شده using زیرا قرار بدهید:using Microsoft.ML.Data;با حذف تعریف کلاس موجود و اضافه کردن کد زیر در MovieRatingData.cs ، یک کلاس بنام MovieRating ایجاد کنید:public class MovieRating { [LoadColumn(0)] public float userId; [LoadColumn(1)] public float movieId; [LoadColumn(2)] public float Label; }کلاس MovieRating یک کلاس داده ورودی را مشخص می کند.صفت LoadColumn مشخص می کند که کدام ستون (بر اساس index ستون) در مجموعه داده باید بارگیری شود(ترتیب لود کردن داده مشخص می کند).ستون های userId و movieId (ویژگی) Feature های شما هستند (ورودی هایی که برای پیش بینی Label به مدل می دهید) ، و ستون rating (برچسب) Label است که شما پیش بینی می کنید (خروجی مدل).با افزودن کد زیر بعد از کلاس MovieRating در MovieRatingData.cs ، کلاس دیگری با نام MovieRatingPrediction ایجاد کنید تا نتایج پیش بینی شده را نشان دهید:public class MovieRatingPrediction { public float Label; public float Score; }در Program.cs در متد Main() بجای Console.WriteLine("Hello World!") کد زیر را قرار دهید:MLContext mlContext = new MLContext();کلاس MLContext یک نقطه شروع برای همه عملیات ML.NET است و با شروع mlContext یک محیط ML.NET جدید ایجاد می شود که می تواند در بین اشیاء گردش کار ایجاد مدل به اشتراک گذاشته شود. از نظر مفهومی مشابه DBContext در Entity Framework است.پس از Main() ، متدی به نام LoadData() ایجاد کنید:public static (IDataView training, IDataView test) LoadData(MLContext mlContext) { }متغیرهای مسیر داده خود را مقداردهی کنید ، داده ها را از فایل های * .csv بارگیری کنید و داده های Train و Test را به عنوان اشیاء IDataView با اضافه کردن موارد زیر به عنوان خط بعدی کد در LoadData() برگردانید:var trainingDataPath = Path.Combine(Environment.CurrentDirectory, "Data", "recommendation-ratings-train.csv"); var testDataPath = Path.Combine(Environment.CurrentDirectory, "Data", "recommendation-ratings-test.csv"); IDataView trainingDataView = mlContext.Data.LoadFromTextFile<MovieRating>(trainingDataPath, hasHeader: true, separatorChar: ','); IDataView testDataView = mlContext.Data.LoadFromTextFile<MovieRating>(testDataPath, hasHeader: true, separatorChar: ','); return (trainingDataView, testDataView);توجه: خروجی این متد از نوع tuple می باشید.داده ها در ML.NET به عنوان یک کلاس IDataView نمایش داده می شود.IDataView روشی انعطاف پذیر و کارآمد برای توصیف داده های جدولی (عددی و متن) است.داده ها را می توان از یک فایل متنی یا در زمان واقعی (به عنوان مثال ، پایگاه داده SQL یا فایل های log) به یک شی IDataView بارگیری کرد(لود کرد).متد LoadFromTextFile() شکل و شمای داده را تعریف کرده و از فایل خوانده می شود.متغیرهای مسیر داده را می گیرد و IDataView را برمی گرداند.در این حالت ، مسیر فایل های Test و Train را فراهم می کنید و هم header فایل متنی را نشان می دهید (بنابراین می تواند از نام ستونها به درستی استفاده کند) و هم کاراکتر جدا کننده داده ها که کاما است (جداکننده پیش فرض یک tab است).برای صدازدن (فراخوانی) متد LoadData() خود و بازگشت داده های Train و Test ، موارد زیر را به عنوان دو خط کد بعدی در متد Main() اضافه کنید:IDataView trainingDataView = LoadData(mlContext).training; IDataView testDataView = LoadData(mlContext).test;توجه:خروجی متد LoadData یک tuple است.ساخت و آموزش مدلسه مفهوم اصلی در ML.NET وجود دارد: داده ها ، ترانسفرمرها و برآوردگرها./Data, Transformers, و Estimators.الگوریتم های آموزش یادگیری ماشین به داده هایی در قالب مشخص نیاز دارند. Transformerها برای تبدیل داده های جدولی(tabular) به یک قالب سازگار استفاده می شوند.Transformerشما با ایجاد Estimatorها ، Transformerها را در ML.NET ایجاد می کنید. Estimatorها داده را میگیرند و Transformerها را بر میگردانند.Estimatorالگوریتم آموزش recommendation که برای آموزش مدل خود استفاده خواهید کرد نمونه ای از یک Estimator است.با مراحل زیر یک Estimator بسازید:درست بعد از متد LoadData() با استفاده از کد زیر ، متد BuildAndTrainModel() ایجاد کنید:public static ITransformer BuildAndTrainModel(MLContext mlContext, IDataView trainingDataView) { }توجه: این متد در مراحل زیر تا زمانی که مقدار برگشتی اضافه نکنید ، خطایی به شما می دهد.تبدیل داده (data transformations) را با اضافه کردن کد زیر به BuildAndTrainModel() تعریف کنید:IEstimator<ITransformer> estimator = mlContext.Transforms.Conversion.MapValueToKey(outputColumnName: "userIdEncoded", inputColumnName: "userId") .Append(mlContext.Transforms.Conversion.MapValueToKey(outputColumnName: "movieIdEncoded", inputColumnName: "movieId"));از آنجا که userId و movieId نمایانگر کاربران و عناوین فیلم است ، نه مقادیر واقعی ، شما از متد MapValueToKey() برای تبدیل هر userId و هر movieId به یک نوع کلید عددی (numeric key type) ستون Feature (یک فرمت پذیرفته شده توسط الگوریتم های recommendation) استفاده می کنید و آنها را به عنوان ستون جدید مجموعه داده اضافه می کنید:الگوریتم یادگیری ماشین را انتخاب کرده و با اضافه کردن موارد زیر به عنوان خط بعدی کد در BuildAndTrainModel() آن را به تعریف تبدیل داده(data transformation) اضافه کنید:var options = new MatrixFactorizationTrainer.Options { MatrixColumnIndexColumnName = "userIdEncoded", MatrixRowIndexColumnName = "movieIdEncoded", LabelColumnName = "Label", NumberOfIterations = 20, ApproximationRank = 100 }; var trainerEstimator = estimator.Append(mlContext.Recommendation().Trainers.MatrixFactorization(options));الگوریتم آموزش recommendation شما MatrixFactorizationTrainer است. Matrix Factorization یک روش معمول برای recommendation(توصیه) هنگامی است که شما داده ای در مورد چگونگی رتبه بندی محصولات توسط کاربران در گذشته داشته باشید ، که این مورد در مجموعه داده در این آموزش موجود است.الگوریتم های recommendation دیگری برای زمانی که داده های مختلفی را در دسترس دارید وجود دارد (برای کسب اطلاعات بیشتر به بخشOther recommendation algorithms در زیر مراجعه کنید).در این حالت ، الگوریتم Matrix Factorization از روشی بنام "collaborative filtering" ("فیلتر مشترک") استفاده می کند ، که فرض می کند اگر کاربر 1 نظر مشابه کاربر 2 را در مورد مسئله خاصی داشته باشد ، پس کاربر 1 به احتمال زیاد احساس مشابه احساس کاربر 2 در مورد مسئله متفاوت را دارد.به عنوان مثال ، اگر کاربر 1 و کاربر 2 یک فیلم را به طور مشابه امتیاز دهی کنند ، از این رو کاربر 2 از فیلمی که کاربر 1 تماشا کرده و امتیاز بالا یی به آن داده است ، لذت می برد:تمرین دهنده Factorization Matrix گزینه های/Options مختلفی دارد که می توانید در بخش Algorithm hyperparameters بیشتر بخوانید.مدل را در داده های Train قرار دهید (fit کنید) و با اضافه کردن کد زیر به عنوان خط بعدی کد در متد BuildAndTrainModel() مدل آموزش داده شده را برگردانید:Console.WriteLine("=============== Training the model ==============="); ITransformer model = trainerEstimator.Fit(trainingDataView); return model;متد Fit() مدل شما را با مجموعه داده آموزشی ارائه شده آموزش می دهد.از لحاظ فنی ، تعریف های Estimator را با تبدیل داده ها و اعمال آموزش ، اجرا می کند و مدل آموزش دیده را که یک Transformer است ، برمی گرداند.موارد زیر را به عنوان خط کد بعدی در متد Main() اضافه کنید تا از متد BuildAndTrainModel() استفاده کنید و مدل آموزش دیده را برگردانید:ITransformer model = BuildAndTrainModel(mlContext, trainingDataView);ارزیابی مدلپس از آموزش مدل ، از داده های تستی خود برای ارزیابی نحوه عملکرد مدل خود استفاده کنید.درست بعد از متد BuildAndTrainModel() با استفاده از کد زیر ، متد EvaluateModel() را ایجاد کنید:public static void EvaluateModel(MLContext mlContext, IDataView testDataView, ITransformer model) { }داده های Test را با اضافه کردن کد زیر به EvaluateModel() تبدیل کنید:Console.WriteLine("=============== Evaluating the model ==============="); var prediction = model.Transform(testDataView);متد Transform() برای چندین ردیف ورودی ارائه شده از مجموعه داده های تستی پیش بینی می کند.با افزودن موارد زیر به عنوان خط بعدی کد در متد EvaluateModel() مدل را ارزیابی کنید:var metrics = mlContext.Regression.Evaluate(prediction, labelColumnName: "Label", scoreColumnName: "Score");پس از تنظیم پیش بینی ، متد Evaluate() مدل را ارزیابی می کند ، که مقادیر پیش بینی شده را با Labels(برچسب های) واقعی در مجموعه داده های تستی مقایسه می کند و metrics(معیارهای) مربوط به نحوه عملکرد مدل را برمی گرداند.معیارهای ارزشیابی خود را بر روی کنسول با اضافه کردن موارد زیر به عنوان خط بعدی کد در متد EvaluateModel() چاپ کنید:Console.WriteLine("Root Mean Squared Error : " + metrics.RootMeanSquaredError.ToString()); Console.WriteLine("RSquared: " + metrics.RSquared.ToString());کد زیر را به عنوان خط کد بعدی در متد Main() اضافه کنید تا متد EvaluateModel() صدابزنید:EvaluateModel(mlContext, testDataView, model);خروجی باید شبیه به متن زیر باشد:=============== Training the model ===============iter tr_rmse obj 0 1.5403 3.1262e+05 1 0.9221 1.6030e+05 2 0.8687 1.5046e+05 3 0.8416 1.4584e+05 4 0.8142 1.4209e+05 5 0.7849 1.3907e+05 6 0.7544 1.3594e+05 7 0.7266 1.3361e+05 8 0.6987 1.3110e+05 9 0.6751 1.2948e+05 10 0.6530 1.2766e+05 11 0.6350 1.2644e+05 12 0.6197 1.2541e+05 13 0.6067 1.2470e+05 14 0.5953 1.2382e+05 15 0.5871 1.2342e+05 16 0.5781 1.2279e+05 17 0.5713 1.2240e+05 18 0.5660 1.2230e+05 19 0.5592 1.2179e+05=============== Evaluating the model ===============Rms: 0.994051469730769RSquared: 0.412556298844873در این خروجی ، 20 تکرار وجود دارد. در هر تکرار ، اندازه گیری خطا کاهش می یابد و به 0 نزدیکتر و نزدیکتر می شود.ریشه میانگین squared error (خطای مربع) (RMS یا RMSE) برای اندازه گیری تفاوت بین مقادیر پیش بینی شده مدل و مقادیر مشاهده داده مجموعه تستی استفاده می شود.از نظر فنی این ریشه مربع میانگین مربعات خطاها است. هرچه پایین تر باشد ، مدل بهتر است.این R Squared نشان می دهد که چگونه داده ها به خوبی متناسب(fit) با یک مدل هستند.دامنه از 0 تا 1 دارد.مقدار 0 بدین معنی است که داده تصادفی هست یا در غیر این صورت نمی تواند متناسب با مدل باشند.مقدار 1 بدین معنی است که مدل دقیقاً با داده مطابقت دارد.شما می خواهید نمره R Squared تا حد ممکن نزدیک به 1 باشد.ساختن مدلهای موفق یک فرایند تکرار شونده است.این مدل از کیفیت اولیه کمتری برخوردار است زیرا این آموزش از مجموعه داده های کوچک برای ارائه سریع آموزش مدل استفاده می کند.اگر از کیفیت مدل راضی نیستید ، می توانید با تهیه مجموعه داده های آموزشی بزرگتر یا با انتخاب الگوریتم های مختلف آموزش با hyper-parameters پارامترهای مختلف برای هر الگوریتم ، آن را بهبود بخشید.برای اطلاعات بیشتر ، بخش Improve your model مشاهده کنید.استفاده از مدلاکنون می توانید از مدل آموزش دیده خود برای پیش بینی اطلاعات جدید استفاده کنید.درست با استفاده از کد زیر ،متد UseModelForSinglePrediction() در زیر متد EvaluateModel() را ایجاد کنید :public static void UseModelForSinglePrediction(MLContext mlContext, ITransformer model) { }با اضافه کردن کد زیر به UseModelForSinglePrediction() از PredictionEngine برای پیش بینی امتیاز استفاده کنید:Console.WriteLine("=============== Making a prediction ==============="); var predictionEngine = mlContext.Model.CreatePredictionEngine<MovieRating, MovieRatingPrediction>(model);کلاس PredictionEngine یک API راحتی است که به شما امکان می دهد یک نمونه داده را منتقل کنید و سپس پیش بینی ای را در مورد این نمونه انجام دهید.با اضافه کردن موارد زیر به عنوان خط های بعدی کد در متد UseModelForSinglePrediction() نمونه ای از MovieRating بنام testInput ایجاد کنید و آنرا به موتور پیش بینی منتقل کنید:var testInput = new MovieRating { userId = 6, movieId = 10 }; var movieRatingPrediction = predictionEngine.Predict(testInput);تابع Predict() پیش بینی را تنها در یک ستون از داده انجام می دهد.سپس می توانید از Score(امتیاز) یا rating(رتبه بندی) پیش بینی شده استفاده کنید تا تعیین کنید که آیا می خواهید فیلم با movieId 10 را به کاربر 6 توصیه کنید. هرچه Score(امتیاز) بالاتر باشد ، احتمال اینکه کاربر آن فیلم خاص را دوست دارد ، بیشتر است. در این حالت ، بیایید بگوییم که فیلم هایی با رتبه پیش بینی شده> 3.5 (امتیاز بزرگ تر از 3.5) را توصیه می کنید.برای چاپ نتایج ، موارد زیر را به عنوان خطوط بعدی کد در متد UseModelForSinglePrediction() اضافه کنید:if (Math.Round(movieRatingPrediction.Score, 1) > 3.5) { Console.WriteLine("Movie " + testInput.movieId + " is recommended for user " + testInput.userId); } else { Console.WriteLine("Movie " + testInput.movieId + " is not recommended for user " + testInput.userId); }کد زیر را به عنوان خط کد بعدی در متد Main() اضافه کنید تا از متد UseModelForSinglePrediction() استفاده کنید:UseModelForSinglePrediction(mlContext, model);خروجی این متد باید مشابه متن زیر باشد:=============== Making a prediction ===============Movie 10 is recommended for user 6ذخیره مدلبرای استفاده از مدل برای پیش بینی در برنامه های کاربردی end-user ، ابتدا باید مدل را ذخیره کنید.درست پس از متد UseModelForSinglePrediction() ، با استفاده از کد زیر ، متد SaveModel() را ایجاد کنید:public static void SaveModel(MLContext mlContext, DataViewSchema trainingDataViewSchema, ITransformer model) { }با اضافه کردن کد زیر در متد SaveModel() مدل آموزش دیده خود را ذخیره کنید:var modelPath = Path.Combine(Environment.CurrentDirectory, "Data", "MovieRecommenderModel.zip"); Console.WriteLine("=============== Saving the model to a file ==============="); mlContext.Model.Save(model, trainingDataViewSchema, modelPath);این متد مدل آموزش دیده شما را در یک فایل .zip (در پوشه "Data") ذخیره می کند ، که می تواند در سایر برنامه های .NET برای پیش بینی استفاده شود.موارد زیر را به عنوان خط بعدی کد در متد Main() برای صدازدن متد SaveModel() خود اضافه کنید:SaveModel(mlContext, trainingDataView.Schema, model);استفاده از مدل ذخیره شدهپس از اینکه مدل آموزش دیده خود را ذخیره کردید ، می توانید مدل را در محیط های مختلف استفاده کنید (برای یادگیری نحوه بهره برداری از یک مدل یادگیری ماشین آموزش دیده در برنامه ها ، به &quot;How-to guide&quot; مراجعه کنید).نتایجپس از طی کردن مراحل بالا ، برنامه کنسول خود را اجرا کنید (Ctrl + F5). نتایج شما از پیش بینی منفرد بالا باید مشابه موارد زیر باشد. ممکن است هشدارها یا پردازش پیام ها را مشاهده کنید ، اما این پیام ها برای وضوح بیشتر از نتایج زیر حذف شده اند.=============== Training the model ===============iter tr_rmse obj 0 1.5382 3.1213e+05 1 0.9223 1.6051e+05 2 0.8691 1.5050e+05 3 0.8413 1.4576e+05 4 0.8145 1.4208e+05 5 0.7848 1.3895e+05 6 0.7552 1.3613e+05 7 0.7259 1.3357e+05 8 0.6987 1.3121e+05 9 0.6747 1.2949e+05 10 0.6533 1.2766e+05 11 0.6353 1.2636e+05 12 0.6209 1.2561e+05 13 0.6072 1.2462e+05 14 0.5965 1.2394e+05 15 0.5868 1.2352e+05 16 0.5782 1.2279e+05 17 0.5713 1.2227e+05 18 0.5637 1.2190e+05 19 0.5604 1.2178e+05=============== Evaluating the model ===============Rms: 0.977175077487166RSquared: 0.43233349213192=============== Making a prediction ===============Movie 10 is recommended for user 6=============== Saving the model to a file ===============تبریک می گویم! اکنون یک مدل یادگیری ماشینی را برای توصیه فیلم ها با موفقیت ساخته اید. می توانید کد منبع این آموزش را در مخزن dotnet/samples پیدا کنید.بهبود مدلروش های مختلفی وجود دارد که می توانید عملکرد مدل خود را بهبود ببخشید تا بتوانید پیش بینی های دقیق تری داشته باشید.داده Dataافزودن داده های آموزشی بیشتر که نمونه های کافی برای هر کاربر و شناسه فیلم دارد می تواند به بهبود کیفیت مدل recommendation کمک کند.اعتبار سنجی متقابل (Cross validation) یک تکنیک برای ارزیابی مدل هایی است که به طور تصادفی داده ها را به زیر مجموعه ها تقسیم می کند (به جای استخراج داده های تستی از مجموعه داده مانند آنچه در این آموزش انجام داده اید) و برخی از گروه ها را به عنوان داده های آموزشی و برخی از گروه ها به عنوان داده های تستی می گیرد.این روش نسبت به ایجاد تقسیم train-test از نظر کیفیت مدل بهتر است.امکانات/ویژگی ها Featuresدر این آموزش فقط از سه ویژگی (شناسه کاربر ، شناسه فیلم و رتبه بندی) استفاده می شود که توسط مجموعه داده ارائه شده است.اگرچه این یک شروع خوب است ، در حقیقت ممکن است بخواهید خصوصیات یا ویژگیهای دیگر را (مثلاً سن ، جنسیت ، موقعیت جغرافیایی و غیره) اضافه کنید ،اگر آنها در مجموعه داده گنجانده شده باشند.افزودن ویژگی های مرتبط تر می تواند به بهبود عملکرد مدل recommendation شما کمک کند.اگر مطمئن نیستید که کدام یک از ویژگی ها ممکن است برای کار یادگیری ماشین شما مهمترین باشد ،همچنین می توانید از (Feature Contribution Calculation) محاسبه سهم ویژه (FCC) و اهمیت مجاز بودن ویژگی (Feature Permutation Importance) استفاده کنید ، که ML.NET برای کشف تأثیرگذارترین ویژگی ها ارائه می دهد.ابرپارامترهای الگوریتم Algorithm hyperparametersدر حالی که ML.NET الگوریتم های آموزش پیش فرض خوب را ارائه می دهد ، می توانید با تغییر ویژگی هایپرپارامترhyperparameters الگوریتم ، عملکرد دقیق تری داشته باشید.برایMatrix Factorization ، می توانید با هایپرپارامترهایی مانند NumberOfIterations و ApproximationRank آزمایش کنید تا ببینید آیا اینها نتایج بهتری می دهد یا خیر.به عنوان مثال ، در این آموزش گزینه های الگوریتم عبارتند از:var options = new MatrixFactorizationTrainer.Options { MatrixColumnIndexColumnName = "userIdEncoded", MatrixRowIndexColumnName = "movieIdEncoded", LabelColumnName = "Label", NumberOfIterations = 20, ApproximationRank = 100 };سایر الگوریتم های Recommendationالگوریتم فاکتورسازی ماتریس با فیلترهای مشترک تنها یک روش برای اجرای توصیه های فیلم است.در بسیاری از موارد ، شما ممکن است داده های رتبه بندی را در دسترس نباشید و فقط سابقهhistory فیلم از کاربران در دسترس است.در موارد دیگر ، ممکن است چیزی بیش از اطلاعات رتبه بندی کاربر داشته باشید.الگوریتم One Class Matrix Factorization :هنگامی که فقط userId و movieId دارید ، از این استفاده کنید.این سبک از توصیه ها مبتنی بر سناریوی خرید است ، یا محصولاتی که اغلب با هم خریداری می شوند ، به این معنی که مجموعه ای از محصولات را بر اساس تاریخچه سفارش خرید خود به مشتریان توصیه می کند. نمونه کدالگوریتم Field Aware Factorization Machines :هنگامی که از ویژگی های بیشتری در userId ، productId و رتبه بندی (مانند توضیحات محصول یا قیمت محصول) برخوردار هستید ، از این برای توصیه‌ها استفاده کنید.این روش همچنین از یک روش فیلترشکن مشترک استفاده می کند. نمونه کدسناریوی کاربر جدیدیکی از مشکلات رایج در فیلتر مشارکتی ، مشکل شروع سرد است ، یعنی زمانی که شما یک کاربر جدید دارید و داده های قبلی برای استنباط از آن ندارید.این مشکل اغلب با درخواست کاربران جدید برای ایجاد یک پروفایل و به عنوان مثال ، امتیازبندی فیلم هایی که در گذشته دیده اند ، حل می شود.در حالی که این روش بار زیادی را برای کاربر تحمیل می کند ،برخی از داده های شروع را برای کاربران جدید بدون سابقه رتبه بندی فراهم می کند.منبع