از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
ایجاد یک سیستم توصیه کننده ساده در پایتون با استفاده از پانداها
سرفصلهای مطلب
معرفی
آیا تا به حال فکر کرده اید که نتفلیکس چگونه فیلم هایی را به شما پیشنهاد می کند؟ روی فیلم هایی که قبلا تماشا کرده اید؟ یا چگونه یک وبسایت تجارت الکترونیک گزینههایی مانند «تکرار خرید با هم» را نمایش میدهد؟ آنها ممکن است گزینه های نسبتا ساده ای به نظر برسند اما در پشت صحنه، یک الگوریتم آماری پیچیده به منظور پیش بینی این توصیه ها اجرا می شود. چنین سیستم هایی را سیستم های توصیه کننده، سیستم های توصیه یا موتورهای توصیه می نامند. آ سیستم توصیه کننده یکی از معروف ترین کاربردهای علم داده و یادگیری ماشین است.
یک سیستم توصیهکننده از یک الگوریتم آماری استفاده میکند که به دنبال پیشبینی رتبهبندی کاربران برای یک موجودیت خاص است. روی شباهت بین موجودیت ها یا شباهت بین کاربرانی که قبلا آن موجودیت ها را رتبه بندی کرده اند. شهود این است که انواع مشابه کاربران احتمالاً رتبهبندیهای مشابهی برای مجموعهای از موجودیتها دارند.
در حال حاضر، بسیاری از شرکتهای بزرگ فناوری از یک سیستم توصیهکننده استفاده میکنند. میتوانید آنها را در هرجایی از آمازون (توصیههای محصول) گرفته تا YouTube (توصیههای ویدیویی) تا فیسبوک (توصیههای دوستان) پیدا کنید. توانایی توصیه محصولات یا خدمات مرتبط به کاربران میتواند یک تقویت بزرگ برای یک شرکت باشد، به همین دلیل است که یافتن این تکنیک در بسیاری از سایتها بسیار رایج است.
در این مقاله خواهیم دید که چگونه می توانیم یک سیستم توصیه گر ساده در پایتون بسازیم.
انواع سیستم های توصیه کننده
دو رویکرد اصلی برای ایجاد سیستم های توصیه گر وجود دارد: فیلتر مبتنی بر محتوا و فیلتر مشارکتی:
فیلترینگ مبتنی بر محتوا
در فیلترینگ مبتنی بر محتوا، شباهت بین محصولات مختلف محاسبه می شود روی اساس ویژگی های محصولات به عنوان مثال، در یک سیستم توصیهکننده فیلم مبتنی بر محتوا، شباهت بین فیلمها محاسبه میشود روی اساس ژانرها، بازیگران فیلم، کارگردان فیلم و غیره.
فیلتر مشارکتی
فیلتر مشارکتی از قدرت جمعیت استفاده می کند. شهود پشت فیلتر مشارکتی این است که اگر یک کاربر A محصولات X و Y را دوست داشته باشد، و اگر کاربر دیگری B محصول X را دوست داشته باشد، احتمال کمی وجود دارد که محصول Y را نیز دوست داشته باشد.
یک سیستم توصیهکننده فیلم را مثال بزنید. فرض کنید تعداد زیادی از کاربران رتبه های یکسانی را به فیلم های X و Y اختصاص داده اند. کاربر جدیدی می آید که همان رتبه را به فیلم X داده است اما هنوز فیلم Y را تماشا نکرده است. سیستم فیلتر مشارکتی فیلم Y را به او توصیه می کند.
پیاده سازی سیستم توصیه کننده فیلم در پایتون
در این بخش، یک سیستم توصیهکننده فیلم بسیار ساده در پایتون ایجاد میکنیم که از همبستگی بین رتبهبندیهای اختصاص داده شده به فیلمهای مختلف استفاده میکند تا شباهت بین فیلمها را بیابد.
مجموعه داده ای که قرار است برای این مشکل استفاده کنیم MovieLens Dataset است. برای دانلود مجموعه داده، به ادامه مطلب بروید خانه page مجموعه داده و دانلود کنید ml-latest-small.zip
فایل که شامل زیرمجموعه ای از مجموعه داده واقعی فیلم است و شامل 100000 رتبه بندی برای 9000 فیلم توسط 700 کاربر است.
هنگامی که فایل دانلود شده را از حالت فشرده خارج کردید، خواهید دید links.csv
، movies.csv
، ratings.csv
و tags.csv
فایل ها، همراه با سند “README”. در این مقاله قصد داریم از movies.csv
و فایل های “ratings.csv”.
برای اسکریپت های این مقاله، پوشه زیپ نشده “ml-latest-small” در داخل پوشه “Datasets” در درایو “E” قرار داده شده است.
تجسم داده ها و پیش پردازش
اولین گام در هر مشکل علم داده، تجسم و پیش پردازش داده ها است. ما هم همین کار را خواهیم کرد، پس اول بیایید import فایل “ratings.csv” را ببینید و ببینید چه چیزی در آن وجود دارد. اسکریپت زیر را اجرا کنید:
import numpy as np
import pandas as pd
ratings_data = pd.read_csv("E:\Datasets\ml-latest-small\\ratings.csv")
ratings_data.head()
در اسکریپت بالا ما از read_csv()
روش کتابخانه Pandas برای خواندن فایل “ratings.csv”. بعد، ما را صدا می زنیم head()
متد از شی dataframe که توسط the read_csv()
تابع، که پنج ردیف اول مجموعه داده را نمایش می دهد.
خروجی به شکل زیر است:
شناسه کاربر | شناسه فیلم | رتبه بندی | مهر زمانی | |
---|---|---|---|---|
0 | 1 | 31 | 2.5 | 1260759144 |
1 | 1 | 1029 | 3.0 | 1260759179 |
2 | 1 | 1061 | 3.0 | 1260759182 |
3 | 1 | 1129 | 2.0 | 1260759185 |
4 | 1 | 1172 | 4.0 | 1260759205 |
شما می توانید از خروجی ببینید که فایل “ratings.csv” حاوی ویژگی های userId، movieId، رتبه بندی ها، و timestamp است. هر ردیف در مجموعه داده با یک رتبه بندی مطابقت دارد. ستون userId شامل شناسه کاربری است که رتبه را ترک کرده است. ستون movieId شامل شناسه فیلم است، ستون رتبه بندی شامل امتیازی است که کاربر به جا گذاشته است. رتبهبندیها میتوانند مقادیری بین ۱ تا ۵ داشته باشند. و در نهایت، مهر زمانی به زمانی اشاره دارد که کاربر رتبهبندی را ترک کرده است.
یک مشکل با این مجموعه داده وجود دارد. این شامل شناسه فیلم ها است اما نه عنوان آنها. برای فیلم هایی که توصیه می کنیم به نام فیلم نیاز داریم. نام فیلم در ذخیره می شود movies.csv
فایل. اجازه دهید import فایل و داده های موجود در آن را ببینید. اسکریپت زیر را اجرا کنید:
movie_names = pd.read_csv("E:\Datasets\ml-latest-small\\movies.csv")
movie_names.head()
خروجی به شکل زیر است:
شناسه فیلم | عنوان | ژانرها | |
---|---|---|---|
0 | 1 | داستان اسباب بازی (1995) | ماجراجویی|انیمیشن|کودک|کمدی|فانتزی |
1 | 2 | جومانجی (1995) | ماجراجویی|کودکان|فانتزی |
2 | 3 | پیرمردهای بدخلق (1995) | کمدی|عاشقانه |
3 | 4 | انتظار برای بازدم (1995) | کمدی | درام | عاشقانه |
4 | 5 | پدر عروس قسمت دوم (1995) | کمدی |
همانطور که می بینید، این مجموعه داده شامل movieId، عنوان فیلم و ژانر آن است. ما به مجموعه داده ای نیاز داریم که شامل شناسه کاربری، عنوان فیلم و رتبه بندی آن باشد. ما این اطلاعات را در دو شیء دیتافریم مختلف داریم: “ratings_data” و “movie_names”. برای به دست آوردن اطلاعات مورد نظر خود در یک دیتافریم، می توانیم دو شیء دیتافریم را ادغام کنیم روی ستون movieId چون بین دو فریم داده مشترک است.
ما می توانیم این کار را با استفاده از merge()
عملکردی از کتابخانه Pandas، همانطور که در زیر نشان داده شده است:
movie_data = pd.merge(ratings_data, movie_names, روی='movieId')
حال بیایید دیتافریم جدید خود را مشاهده کنیم:
movie_data.head()
خروجی به شکل زیر است:
شناسه کاربر | شناسه فیلم | رتبه بندی | مهر زمانی | عنوان | ژانرها | |
---|---|---|---|---|---|---|
0 | 1 | 31 | 2.5 | 1260759144 | ذهن های خطرناک (1995) | نمایش |
1 | 7 | 31 | 3.0 | 851868750 | ذهن های خطرناک (1995) | نمایش |
2 | 31 | 31 | 4.0 | 12703541953 | ذهن های خطرناک (1995) | نمایش |
3 | 32 | 31 | 4.0 | 834828440 | ذهن های خطرناک (1995) | نمایش |
4 | 36 | 31 | 3.0 | 847057202 | ذهن های خطرناک (1995) | نمایش |
می توانید مشاهده کنید که چارچوب تازه ایجاد شده ما شامل شناسه کاربری، عنوان و رتبه بندی فیلم در صورت لزوم است.
حال بیایید نگاهی به میانگین امتیاز هر فیلم بیندازیم. برای انجام این کار، می توانیم مجموعه داده را بر اساس عنوان فیلم گروه بندی کنیم و سپس میانگین امتیاز هر فیلم را محاسبه کنیم. سپس پنج فیلم اول را همراه با میانگین امتیاز آنها با استفاده از نشان می دهیم head()
روش. به اسکریپت زیر نگاه کنید:
movie_data.groupby('title')('rating').mean().head()
خروجی به شکل زیر است:
title
"Great Performances" Cats (1998) 1.750000
$9.99 (2008) 3.833333
'Hellboy': The Seeds of Creation (2004) 2.000000
'Neath the Arizona Skies (1934) 0.500000
'Round Midnight (1986) 2.250000
Name: rating, dtype: float64
می بینید که میانگین رتبه ها مرتب نشده اند. بیایید رتبهبندیها را به ترتیب نزولی میانگین رتبهبندیها مرتب کنیم:
movie_data.groupby('title')('rating').mean().sort_values(ascending=False).head()
اگر اسکریپت بالا را اجرا کنید، خروجی به شکل زیر خواهد بود:
title
Burn Up! (1991) 5.0
Absolute Giganten (1999) 5.0
Gentlemen of Fortune (Dzhentlmeny udachi) (1972) 5.0
Erik the Viking (1989) 5.0
Reality (2014) 5.0
Name: rating, dtype: float64
اکنون فیلم ها بر اساس ترتیب صعودی رتبه بندی آنها مرتب شده اند. با این حال، یک مشکل وجود دارد. یک فیلم می تواند به بالای لیست بالا برسد حتی اگر تنها یک کاربر به آن پنج ستاره داده باشد. بنابراین، آمار فوق می تواند گمراه کننده باشد. به طور معمول، فیلمی که واقعاً فیلم خوبی است، توسط تعداد زیادی از کاربران امتیاز بالاتری دریافت می کند.
اکنون بیایید تعداد کل امتیازات یک فیلم را ترسیم کنیم:
movie_data.groupby('title')('rating').count().sort_values(ascending=False).head()
با اجرای اسکریپت فوق خروجی زیر را برمی گرداند:
title
Forrest Gump (1994) 341
Pulp Fiction (1994) 324
Shawshank Redemption, The (1994) 311
Silence of the Lambs, The (1991) 304
Star Wars: Episode IV - A New Hope (1977) 291
Name: rating, dtype: int64
اکنون می توانید چند فیلم واقعاً خوب را در بالا ببینید. لیست بالا این نکته را تایید می کند که فیلم های خوب معمولاً رتبه های بالاتری دریافت می کنند. اکنون می دانیم که هم میانگین امتیاز هر فیلم و هم تعداد امتیازات هر فیلم از ویژگی های مهم هستند. بیایید یک دیتافریم جدید ایجاد کنیم که حاوی هر دوی این ویژگی ها باشد.
برای ایجاد اسکریپت زیر را اجرا کنید ratings_mean_count
dataframe و ابتدا میانگین امتیاز هر فیلم را به این دیتافریم اضافه کنید:
ratings_mean_count = pd.DataFrame(movie_data.groupby('title')('rating').mean())
در مرحله بعد، باید تعداد امتیازهای یک فیلم را به آن اضافه کنیم ratings_mean_count
چارچوب داده برای این کار اسکریپت زیر را اجرا کنید:
ratings_mean_count('rating_counts') = pd.DataFrame(movie_data.groupby('title')('rating').count())
حالا بیایید نگاهی به دیتافریم تازه ایجاد شده خود بیاندازیم.
ratings_mean_count.head()
خروجی به شکل زیر است:
عنوان | رتبه بندی | رتبه_شمارش |
---|---|---|
گربه های “اجرای بزرگ” (1998) | 1.750000 | 2 |
9.99 دلار (2008) | 3.833333 | 3 |
‘پسر جهنمی’: دانه های آفرینش (2004) | 2.000000 | 1 |
در نزدیکی آسمان آریزونا (1934) | 0.500000 | 1 |
“Round Midnight (1986) | 2.250000 | 2 |
می توانید عنوان فیلم را به همراه میانگین امتیاز و تعداد امتیازات فیلم مشاهده کنید.
بیایید یک هیستوگرام برای تعداد رتبهبندیهای نشاندادهشده توسط ستون «rating_counts» در قاب داده بالا ترسیم کنیم. اسکریپت زیر را اجرا کنید:
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('dark')
%matplotlib inline
plt.figure(figsize=(8,6))
plt.rcParams('patch.force_edgecolor') = True
ratings_mean_count('rating_counts').hist(bins=50)
این هم خروجی اسکریپت بالا:
از خروجی می بینید که اکثر فیلم ها کمتر از 50 امتیاز دریافت کرده اند. در حالی که تعداد فیلم هایی که بیش از 100 امتیاز دارند بسیار کم است.
اکنون ما یک هیستوگرام برای میانگین رتبهبندی ترسیم میکنیم. این کد برای انجام این کار است:
plt.figure(figsize=(8,6))
plt.rcParams('patch.force_edgecolor') = True
ratings_mean_count('rating').hist(bins=50)
خروجی به شکل زیر است:
میتوانید ببینید که مقادیر صحیح نوارهای بلندتری نسبت به مقادیر شناور دارند، زیرا اکثر کاربران رتبهبندی را بهعنوان مقدار صحیح یعنی 1، 2، 3، 4 یا 5 تعیین میکنند. علاوه بر این، بدیهی است که دادهها دارای توزیع نرمال ضعیف با میانگین حدود 3.5 در داده ها چند عدد پرت وجود دارد.
قبلاً گفتیم که فیلمهایی که رتبهبندی بالاتری دارند معمولاً میانگین امتیاز بالایی نیز دارند، زیرا یک فیلم خوب معمولاً شناخته شده است و یک فیلم شناخته شده توسط تعداد زیادی از مردم تماشا میشود و بنابراین معمولاً رتبه بالاتری نیز دارد. رتبه بندی بیایید ببینیم که آیا این مورد در مورد فیلم های موجود در مجموعه داده ما نیز صادق است یا خیر. میانگین رتبهبندیها را با تعداد رتبهبندیها ترسیم میکنیم:
plt.figure(figsize=(8,6))
plt.rcParams('patch.force_edgecolor') = True
sns.jointplot(x='rating', y='rating_counts', data=ratings_mean_count, alpha=0.4)
خروجی به شکل زیر است:
این نمودار نشان می دهد که به طور کلی، فیلم هایی با میانگین امتیاز بالاتر در مقایسه با فیلم هایی که میانگین رتبه بندی پایین تری دارند، در واقع تعداد امتیاز بیشتری دارند.
یافتن شباهت بین فیلم ها
ما زمان زیادی را صرف کردیم روی تجسم و پیش پردازش داده های ما اکنون زمان یافتن شباهت بین فیلم ها است.
ما از همبستگی بین رتبه بندی یک فیلم به عنوان معیار تشابه استفاده خواهیم کرد. برای یافتن همبستگی بین رتبهبندیهای فیلم، باید یک ماتریس ایجاد کنیم که در آن هر ستون یک نام فیلم باشد و هر ردیف شامل رتبهای باشد که یک کاربر خاص به آن فیلم اختصاص داده است. به خاطر داشته باشید که این ماتریس مقادیر تهی زیادی دارد زیرا هر فیلم توسط هر کاربر رتبه بندی نمی شود.
برای ایجاد ماتریس عناوین فیلم و رتبه بندی کاربران مربوطه، اسکریپت زیر را اجرا کنید:
user_movie_rating = movie_data.pivot_table(index='userId', columns='title', values='rating')
user_movie_rating.head()
عنوان | گربه های “اجرای بزرگ” (1998) | 9.99 دلار (1998) | ‘پسر جهنمی’: دانه های آفرینش (2008) | در نزدیکی آسمان آریزونا (1934) | “Round Midnight (1986) | ‘Salem’s Lot (2004) | تا زمانی که تو بودی (1997) | باربز، The (1989) | شب مادر (1986) | (500) روزهای تابستان (2009) | … | زولو (1964) | زولو (2013) |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
شناسه کاربر | |||||||||||||
1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | … | NaN | NaN |
2 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | … | NaN | NaN |
3 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | … | NaN | NaN |
4 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | … | NaN | NaN |
5 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | … | NaN | NaN |
می دانیم که هر ستون شامل تمام رتبه بندی های کاربران برای یک فیلم خاص است. بیایید تمام امتیازات کاربران برای فیلم “فارست گامپ (1994)” را پیدا کنیم و فیلم های مشابه آن را پیدا کنیم. ما این فیلم را انتخاب کردیم زیرا بیشترین تعداد امتیاز را دارد و میخواهیم همبستگی بین فیلمهایی را پیدا کنیم که تعداد رتبهبندی بالاتری دارند.
برای پیدا کردن رتبهبندی کاربران برای “Forrest Gump (1994)”، اسکریپت زیر را اجرا کنید:
forrest_gump_ratings = user_movie_rating('Forrest Gump (1994)')
اسکریپت فوق یک سری پانداها را باز خواهد گرداند. بیایید ببینیم چگونه به نظر می رسد.
forrest_gump_ratings.head()
userId
1 NaN
2 3.0
3 5.0
4 5.0
5 4.0
Name: Forrest Gump (1994), dtype: float64
حالا بیایید تمام فیلم هایی که شبیه «فارست گامپ (1994)» هستند را بازیابی کنیم. ما می توانیم همبستگی بین رتبه بندی کاربران برای “فارست گامپ (1994)” و همه فیلم های دیگر را با استفاده از corrwith()
مطابق شکل زیر عمل کنید:
movies_like_forest_gump = user_movie_rating.corrwith(forrest_gump_ratings)
corr_forrest_gump = pd.DataFrame(movies_like_forest_gump, columns=('Correlation'))
corr_forrest_gump.dropna(inplace=True)
corr_forrest_gump.head()
در فیلمنامه فوق، ابتدا لیست تمامی فیلم های مرتبط با “فارست گامپ (1994)” را به همراه مقدار همبستگی آنها با استفاده از corrwith()
تابع. بعد، ما یک دیتافریم ایجاد کردیم که شامل عنوان فیلم و ستونهای همبستگی است. سپس تمام مقادیر NA را از دیتافریم حذف کردیم و 5 سطر اول آن را با استفاده از عبارت نمایش دادیم head
تابع.
خروجی به شکل زیر است:
عنوان | همبستگی |
---|---|
9.99 دلار (2008) | 1.000000 |
باربز، The (1989) | 0.044946 |
(500) روزهای تابستان (2009) | 0.624458 |
*باتری ها شامل نمی شوند (1987) | 0.603023 |
… و عدالت برای همه (1979) | 0.173422 |
بیایید فیلمها را به ترتیب همبستگی نزولی مرتب کنیم تا فیلمهای بسیار همبسته را در بالا ببینیم. اسکریپت زیر را اجرا کنید:
corr_forrest_gump.sort_values('Correlation', ascending=False).head(10)
این هم خروجی اسکریپت بالا:
عنوان | همبستگی |
---|---|
9.99 دلار (2008) | 1.0 |
بگو اینطور نیست (2001) | 1.0 |
متروپلیس (2001) | 1.0 |
نه شیطان را ببین، نه شر را بشنو (1989) | 1.0 |
وسط مردان (2009) | 1.0 |
آب برای فیل ها (2011) | 1.0 |
تماشا، The (2012) | 1.0 |
فیلم بعدی چیچ و چونگ (1980) | 1.0 |
فارست گامپ (1994) | 1.0 |
جنگجو (2011) | 1.0 |
از خروجی مشاهده می کنید که فیلم هایی که همبستگی بالایی با “فارست گامپ (1994)” دارند چندان شناخته شده نیستند. این نشان میدهد که همبستگی به تنهایی معیار خوبی برای شباهت نیست، زیرا ممکن است کاربری وجود داشته باشد که «فارست گامپ (1994)» و تنها یک فیلم دیگر را تماشا کرده و به هر دوی آنها 5 امتیاز داده است.
راه حل این مشکل این است که فقط آن دسته از فیلم های مرتبط را که حداقل بیش از 50 رتبه بندی دارند، بازیابی کنید. برای انجام این کار، را اضافه کنید rating_counts
ستون از rating_mean_count
چارچوب داده به ما corr_forrest_gump
چارچوب داده برای این کار اسکریپت زیر را اجرا کنید:
corr_forrest_gump = corr_forrest_gump.join(ratings_mean_count('rating_counts'))
corr_forrest_gump.head()
خروجی به شکل زیر است:
عنوان | همبستگی | رتبه_شمارش |
---|---|---|
9.99 دلار (2008) | 1.000000 | 3 |
باربز، The (1989) | 0.044946 | 19 |
(500) روزهای تابستان (2009) | 0.624458 | 45 |
*باتری ها شامل نمی شوند (1987) | 0.603023 | 7 |
… و عدالت برای همه (1979) | 0.173422 | 13 |
می بینید که فیلم «9.99 دلار» که بیشترین همبستگی را دارد تنها سه امتیاز دارد. این بدان معناست که تنها سه کاربر به «فارست گامپ (1994)»، «9.99 دلار» رتبههای مشابهی دادهاند. با این حال، میتوان نتیجه گرفت که نمیتوان یک فیلم را مشابه فیلم دیگری اعلام کرد روی فقط 3 رتبه به همین دلیل است که ستون “rating_counts” را اضافه کردیم. بیایید اکنون فیلم های مرتبط با “فارست گامپ (1994)” را که بیش از 50 رتبه بندی دارند، فیلتر کنیم. کد زیر این کار را انجام می دهد:
corr_forrest_gump(corr_forrest_gump ('rating_counts')>50).sort_values('Correlation', ascending=False).head()
خروجی اسکریپت به شکل زیر است:
عنوان | همبستگی | رتبه_شمارش |
---|---|---|
فارست گامپ (1994) | 1.000000 | 341 |
عروسی یونانی چاق من (2002) | 0.626240 | 51 |
ذهن زیبا، A (2001) | 0.575922 | 114 |
چند مرد خوب، A (1992) | 0.555206 | 76 |
عزیزم میلیون دلاری (2004) | 0.545638 | 65 |
اکنون می توانید از خروجی فیلم هایی را ببینید که همبستگی بالایی با “فارست گامپ (1994)” دارند. فیلمهای موجود در لیست از معروفترین فیلمهای هالیوود هستند و از آنجایی که «فارست گامپ (۱۹۹۴)» نیز یک فیلم بسیار مشهور است، احتمال همبستگی این فیلمها زیاد است.
نتیجه
در این مقاله مطالعه کردیم که سیستم توصیهکننده چیست و چگونه میتوانیم آن را در پایتون تنها با استفاده از کتابخانه Pandas ایجاد کنیم. ذکر این نکته ضروری است که سیستم توصیه کننده ای که ما ایجاد کردیم بسیار ساده است. سیستمهای توصیهگر واقعی از الگوریتمهای بسیار پیچیده استفاده میکنند و در مقاله بعدی مورد بحث قرار خواهند گرفت.
اگر می خواهید در مورد سیستم های توصیه گر بیشتر بدانید، پیشنهاد می کنم کتاب ها را بررسی کنید سیستم های توصیه کننده عملی و سیستم های توصیه کننده: کتاب درسی. آنها بسیار عمیق تر به این موضوع می پردازند و روش های پیچیده و دقیق تری را نسبت به ما در این مقاله پوشش می دهند.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-27 05:54:05