# 注册的视图函数
def register(request):
if request.method == "POST":
ret = {"status": 0, "msg": ""}
form_obj = forms.RegForm(request.POST)
print(request.POST)
# 帮我做校验
if form_obj.is_valid():
# 校验通过,去数据库创建一个新的用户
username = form_obj.cleaned_data.get("username")
is_exist = models.UserInfo.objects.filter(username=username)
# 判断用户名是否已存在,可以放到钩子函数里
if is_exist:
ret['status'] = 1
ret['msg'] = '用户名已存在'
return JsonResponse(ret)
form_obj.cleaned_data.pop("re_password")
avatar_img = request.FILES.get("avatar")
models.UserInfo.objects.create_user(**form_obj.cleaned_data, avatar=avatar_img,phone="123123")
ret["msg"] = "/index/"
return JsonResponse(ret)
else:
print(form_obj.errors)
ret["status"] = 1
ret["msg"] = form_obj.errors
print(ret)
print("=" * 120)
return JsonResponse(ret)
# 生成一个form对象
form_obj = forms.RegForm()
print(form_obj.fields)
return render(request, "register.html", {"form_obj": form_obj})
回答:
在协同过滤算法中,计算相似度和相似性是非常重要的一步。下面是具体的代码实现方法:
相似度可以使用余弦相似度公式进行计算。假设我们要计算用户A和用户B之间的相似度,那么可以使用以下代码:
import numpy as np
def cosine_similarity(ratings, user1, user2):
# 获取用户A和用户B共同评价过的电影列表
common_movies = list(set(ratings[user1].keys()) & set(ratings[user2].keys()))
# 如果没有共同评价过的电影,说明相似度为0
if len(common_movies) == 0:
return 0
# 计算用户A和用户B的评分向量
user1_ratings = np.array([ratings[user1][movie] for movie in common_movies])
user2_ratings = np.array([ratings[user2][movie] for movie in common_movies])
# 计算余弦相似度
similarity = np.dot(user1_ratings, user2_ratings) / (np.linalg.norm(user1_ratings) * np.linalg.norm(user2_ratings))
return similarity
在协同过滤算法中,通常会使用相似性来度量用户之间的关系,可以使用Pearson相关系数来计算相似性。假设我们要计算用户A和用户B之间的相似性,那么可以使用以下代码:
def pearson_similarity(ratings, user1, user2):
# 获取用户A和用户B共同评价过的电影列表
common_movies = list(set(ratings[user1].keys()) & set(ratings[user2].keys()))
# 如果没有共同评价过的电影,说明相似度为0
if len(common_movies) == 0:
return 0
# 计算用户A和用户B的评分平均值
user1_mean = np.mean([ratings[user1][movie] for movie in common_movies])
user2_mean = np.mean([ratings[user2][movie] for movie in common_movies])
# 计算用户A和用户B的评分向量
user1_ratings = np.array([ratings[user1][movie] for movie in common_movies])
user2_ratings = np.array([ratings[user2][movie] for movie in common_movies])
# 计算Pearson相关系数
numerator = np.sum((user1_ratings - user1_mean) * (user2_ratings - user2_mean))
denominator = np.sqrt(np.sum((user1_ratings - user1_mean) ** 2) * np.sum((user2_ratings - user2_mean) ** 2))
# 避免分母为0的情况
if denominator == 0:
return 0
similarity = numerator / denominator
return similarity
以上是协同过滤算法中计算相似度和相似性的代码实现方法。希望能够帮助你实现电影推荐系统。