Как интегрировать модель машинного обучения с веб-сайтом Django
Я новичок в Django и моделях машинного обучения. Я пытаюсь создать простую систему рекомендаций, используя коллаборативную фильтрацию на основе элементов. Где будет строка поиска, где вы ищете имя пользователя, он будет запрашивать базу данных для этого пользователя и отображать рекомендации для этого пользователя. Я создал модель с использованием KNN в jupyter notebook. Однако я не знаю, как интегрировать эту модель с моим сайтом. Более того, я не знаю, как подключить мой поисковый ввод к модели и получить рекомендации для искомого пользователя. Вот что я сделал на данный момент. Любая помощь будет принята с огромной благодарностью.
Мой views.py
def search_user(request):
if request.method == "POST":
searched = request.POST['searched']
search_result = Ratings.objects.filter(Q(UserID__name__icontains=searched))
return render(request, 'admin_panel.html',
{'searched': searched},
{'search_result': search_result})
else:
return render(request, 'admin_panel.html',
{})
def get_recommendation(request):
num_ratings = Ratings.objects.count()
all_user_names = list(map(lambda x: x.UserID, Ratings.objects.only("UserID")))
all_product_ids = set(map(lambda x: x.Product_ID, Ratings.objects.only("Product_ID")))
num_users = len(list(all_user_names))
# create sparse matrix
productRatings_m = sp.sparse.dok_matrix((num_users, max(all_product_ids) + 1), dtype=np.float32)
for i in range(num_users): # each user corresponds to a row
user_ratings = Ratings.objects.filter(UserID=all_user_names[i])
for user_rating in user_ratings:
productRatings_m[i, user_rating.Product_ID] = user_rating.rating
productRatings = productRatings_m.transpose()
# create pivot table
coo = productRatings.tocoo(copy=False)
df = pd.DataFrame({'Product_ID': coo.row, 'UserID': coo.col, 'rating': coo.data})
[['Product_ID', 'UserID', 'rating']].sort_values(['Product_ID', 'UserID']).reset_index(drop=True)
mo = df.pivot_table(index=['Product_ID'], columns=['UserID'], values='rating')
mo.replace({np.nan: 0}, regex=True, inplace=True)
model_knn = NearestNeighbors(algorithm='brute', metric='cosine', n_neighbors=7)
model_knn.fit(mo.values)
distances, indices = model_knn.kneighbors(mo.iloc[100, :].reshape(1, -1), return_distance=True)
# create a variable to display the data by mapping it
context = list(
map(lambda x: Ratings.objects.get(UserID=indices.flatten()[x]), range(0, len(distances.flatten()))))
return render(request, 'admin_panel.html', {'context': context})
Мой models.py
class ProductData(models.Model):
Product_ID = models.CharField(primary_key=True, max_length=200)
Plan_Type = models.CharField(max_length=20, choices=ContractType, null=True)
Plan_Name = models.CharField(max_length=200, null=True)
def __str__(self):
return str(self.Product_ID)
class UserData(models.Model):
User_ID = models.CharField(primary_key=True, max_length=200)
Gender = models.CharField(max_length=20, null=True, blank=True)
State = models.CharField(max_length=200, null=True, blank=True)
def __str__(self):
return str(self.User_ID)
class Ratings(models.Model):
UserID = models.ForeignKey(UserData, to_field='User_ID', default='CUS-000-000', on_delete=models.CASCADE)
Product_ID = models.ForeignKey(ProductData, to_field='Product_ID', default='P-ID', on_delete=models.CASCADE)
Purchase_History = models.BooleanField(default=False)
Purchased_App_Onz = models.BooleanField(default=False)
Purchased_Video_Onz = models.BooleanField(default=False)
Purchased_Game_Onz = models.BooleanField(default=False)
Purchased_Music_Onz = models.BooleanField(default=False)
Purchased_Add_Onz = models.BooleanField(default=False)
rating = models.IntegerField(default=0, validators=[MaxValueValidator(5), MinValueValidator(0)])
def __str__(self):
return str(self.Product_ID)