Как интегрировать модель машинного обучения с веб-сайтом 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)
Вернуться на верх