机器学习_推荐系统

news/2024/4/27 18:19:19

文章目录

  • 定义问题
  • 基于内容的推荐系统
  • 协同过滤

定义问题

我们从一个例子开始定义推荐系统的问题。

在这里插入图片描述
下面引入一些标记:
在这里插入图片描述

基于内容的推荐系统

在一个基于内容的推荐系统算法中,我们假设对于我们希望推荐的东西有一些数据,这些数据是有关这些东西的特征。
在我们的例子中,我们可以假设每部电影都有两个特征,如𝑥1代表电影的浪漫程度,𝑥2代表电影的动作程度。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里是相似度实现


import numpy as npclass ContentBasedRecommender:def __init__(self, movies):self.movies = moviesself.movie_features = {}  # 物品特征字典,键为电影 ID,值为特征向量def fit(self):# 为每个电影创建特征向量for movie_id, movie_info in self.movies.items():features = np.zeros(len(self.movies))  # 假设特征维度为电影总数for genre in movie_info['genres']:features[self.movies[genre]['index']] = 1  # 根据电影类型设置特征值self.movie_features[movie_id] = featuresdef recommend(self, movie_id, num_recommendations=5):# 计算给定电影的特征向量movie_features = self.movie_features[movie_id]# 计算与给定电影特征最相似的电影similarities = {}for other_movie_id, other_features in self.movie_features.items():similarity = np.dot(movie_features, other_features) / (np.linalg.norm(movie_features) * np.linalg.norm(other_features))similarities[other_movie_id] = similarity# 根据相似度排序并返回推荐列表sorted_similarities = sorted(similarities.items(), key=lambda x: x[1], reverse=True)recommendations = []for movie_id, similarity in sorted_similarities[:num_recommendations]:recommendations.append((movie_id, self.movies[movie_id]['title']))return recommendations# 示例电影数据
movies = {1: {'title': 'The Shawshank Redemption', 'genres': ['Drama']},2: {'title': 'The Godfather', 'genres': ['Crime', 'Drama']},3: {'title': 'The Dark Knight', 'genres': ['Action', 'Crime', 'Drama']},# 其他电影...
}# 初始化推荐系统并拟合数据
recommender = ContentBasedRecommender(movies)
recommender.fit()# 示例推荐
movie_id = 1  # 假设用户正在查看电影 The Shawshank Redemption
recommendations = recommender.recommend(movie_id)
print("Recommendations for {}: {}".format(movies[movie_id]['title'], recommendations))

代价函数梯度下降法

import numpy as npclass ContentBasedRecommender:def __init__(self, movies, num_features, learning_rate=0.01, num_iterations=1000):self.movies = moviesself.num_movies = len(movies)self.num_features = num_featuresself.learning_rate = learning_rateself.num_iterations = num_iterationsself.movie_features = np.random.randn(self.num_movies, self.num_features)  # 物品特征矩阵self.errors = []def fit(self, ratings):for _ in range(self.num_iterations):# 计算预测评分predicted_ratings = np.dot(self.movie_features, self.movie_features.T)# 计算误差error = np.sum((predicted_ratings - ratings) ** 2)self.errors.append(error)# 计算梯度并更新特征矩阵gradient = 2 * np.dot((predicted_ratings - ratings), self.movie_features)self.movie_features -= self.learning_rate * gradientdef predict(self, user_id):return np.dot(self.movie_features, self.movie_features[user_id])# 示例电影评分数据
ratings = np.array([[5, 4, 0, 0],[0, 0, 3, 4],[5, 0, 0, 0],[0, 0, 4, 5],
])# 示例电影数据
movies = {0: {'title': 'The Shawshank Redemption'},1: {'title': 'The Godfather'},2: {'title': 'The Dark Knight'},3: {'title': 'Inception'},
}# 初始化推荐系统并拟合数据
recommender = ContentBasedRecommender(movies, num_features=2)
recommender.fit(ratings)# 预测用户评分
user_id = 0  # 假设用户 ID 为 0
predictions = recommender.predict(user_id)
print("Predicted ratings for user {}: {}".format(user_id, predictions))

协同过滤

在之前的基于内容的推荐系统中,对于每一部电影,我们都掌握了可用的特征,使用这些特征训练出了每一个用户的参数。相反地,如果我们拥有用户的参数,我们可以学习得出电影的特征。
在这里插入图片描述
但是如果我们既没有用户的参数,也没有电影的特征,这两种方法都不可行了。协同过滤算法可以同时学习这两者。
在这里插入图片描述
z
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/10829.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

QGIS编译(跨平台编译)056:PDAL编译(Windows、Linux、MacOS环境下编译)

点击查看专栏目录 文章目录 1、PDAL介绍2、PDAL下载3、Windows下编译4、linux下编译5、MacOS下编译1、PDAL介绍 PDAL(Point Data Abstraction Library)是一个开源的地理空间数据处理库,它专注于点云数据的获取、处理和分析。PDAL 提供了丰富的工具和库,用于处理激光扫描仪、…

蓝桥杯练习系统(算法训练)ALGO-970 数组移动

资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 初始数组A[N]中为1,2,..,N,N个数字,现要进行M次操作,每次操作给定一个数字i&#xff0c…

【Linux】Linux安装软件---软件包管理器 yum

主页:醋溜马桶圈-CSDN博客 专栏:Linux_醋溜马桶圈的博客-CSDN博客 gitee:mnxcc (mnxcc) - Gitee.com 目录 1.Linux中安装软件 1.1 源代码安装 1.2 rpm包安装 1.3 yum安装 1.3.1 举例 1.3.2 图示yum下载安装 2.Linux系统的生态 如何选…

<爬虫部署,进阶Docker>----第二章 安装Docker

前言: 安装docker---本章是只针对windows的Docker! 如果你需要你就往下看,不需要 就换频道~ 正文: 1.安装Docker前配置 a.开启虚拟化功能(VT) -如果你电脑有这个 (虚拟化已启用) 直接跳过这一步; 如果没有,那你就去对照自己电脑开启虚拟化 ; 相关链接:win10打开虚拟化的…

解决electron打包vue-element-admin项目页面无法跳转的问题

解决electron打包vue-element-admin项目页面无法跳转的问题 说明之前通过这个教程已经打包成功,但是发现进行账号密码登录后页面无法跳转的问题。现在已经解决,所以记录一下。 1、检查路由模式是否为hash模式,如果不是改成hash模式。 new Ro…

汽车控制臂的拓扑优化-abaqus操作过程

前言 本示例详细讲解使用abaqus实现汽车控制臂的拓扑优化的操作过程。 本页讨论 前言一、创建模型1.创建几何部件2.定义材料属性3.创建装配实体4.创建分析步5.创建相互作用6.创建边界条件及载荷7.创建分析作业并提交分析8.可视化后处理 二、设置优化1.创建优化任务2.创建设计…