当前位置: 首页 > news >正文

射阳做网站网站制作开发

射阳做网站,网站制作开发,网站设计建设收费标准,大型网站开发流程SVD、SVD、PMF 和 NMF 是几种常见的推荐算法,它们主要用于协同过滤和矩阵分解方法来生成个性化推荐。下面是对每种算法的简要介绍: 1. SVD(Singular Value Decomposition) 用途:SVD 是一种矩阵分解技术,通…

SVD、SVD++、PMF 和 NMF 是几种常见的推荐算法,它们主要用于协同过滤和矩阵分解方法来生成个性化推荐。下面是对每种算法的简要介绍:

1. SVD(Singular Value Decomposition)

  • 用途:SVD 是一种矩阵分解技术,通常用于降维和数据压缩。在推荐系统中,SVD 用于分解用户-物品评分矩阵,从而识别潜在的特征。
  • 原理:SVD 将评分矩阵分解为三个矩阵的乘积:用户矩阵、奇异值矩阵和物品矩阵。通过保留前几个最大的奇异值,可以捕捉到用户和物品之间的隐含关系。
  • 优势:能够处理稀疏数据,提取潜在特征,生成个性化推荐。
  • 缺点:对缺失值敏感,且需要较大的计算量。

2. SVD++(SVD Plus Plus)

  • 用途:SVD++ 是对 SVD 的扩展,考虑了用户对未评分物品的潜在偏好。
  • 原理:除了使用传统的 SVD 方法外,SVD++ 还引入了隐式反馈(如用户浏览、点击等行为),将这些信息融入模型中,增强了对用户偏好的捕捉能力。
  • 优势:比传统 SVD 更加准确,能够更好地利用隐式反馈信息,适应性更强。
  • 缺点:模型复杂度增加,训练时间较长。

3. PMF(Probabilistic Matrix Factorization)

  • 用途:PMF 是一种基于概率的矩阵分解方法,用于推荐系统。
  • 原理:PMF 假设用户和物品的特征遵循正态分布,通过最大化似然函数来学习这些特征。与 SVD 不同,PMF 通过引入概率模型来捕捉用户和物品之间的关系。
  • 优势:能够处理缺失值,适应性强,适用于稀疏数据。
  • 缺点:计算复杂度较高,可能需要较长的训练时间。

4. NMF(Non-negative Matrix Factorization)

  • 用途:NMF 是一种非负矩阵分解方法,常用于推荐系统和特征学习。
  • 原理:NMF 将原始评分矩阵分解为两个非负矩阵的乘积,这些非负特征使得模型在解释上更具可解释性。
  • 优势:生成的特征可以更直观地理解,适合处理非负数据(如评分、计数等)。
  • 缺点:可能会收敛到局部最优解,且在稀疏数据上表现不如 SVD 和 PMF。

各个推荐算法具有的特点是

  • SVD:利用矩阵分解捕捉用户和物品的隐含特征。
  • SVD++:在 SVD 的基础上引入隐式反馈,增强推荐精度。
  • PMF:基于概率模型的矩阵分解,适应性强。
  • NMF:非负矩阵分解,生成可解释的特征表示。

安装scikit-surprise

pip install pandas scikit-surprise

使用SVD

import pandas as pd
from surprise import Reader, Dataset, SVD
from surprise.model_selection import train_test_split
from surprise import accuracy
import json# 1. 加载Yelp数据集
# 假设数据文件名为 'yelp_academic_dataset_review.json'
file_path = 'yelp_academic_dataset_review.json'# 加载JSON文件到DataFrame
with open(file_path, 'r') as f:data = [json.loads(line) for line in f]# 将数据转换为pandas DataFrame
df = pd.DataFrame(data)# 2. 选择必要的字段:user_id, business_id, rating
df = df[['user_id', 'business_id', 'stars']]  # 假设评分字段是 'stars'# 3. 数据预处理:将DataFrame转换为适合Surprise库的格式
reader = Reader(rating_scale=(1, 5))  # 假设评分是1到5
dataset = Dataset.load_from_df(df[['user_id', 'business_id', 'stars']], reader)# 4. 划分训练集和测试集
trainset, testset = train_test_split(dataset, test_size=0.2)# 5. 使用SVD训练模型
svd = SVD()
svd.fit(trainset)# 6. 在测试集上进行预测并评估
predictions = svd.test(testset)
print(f'RMSE: {accuracy.rmse(predictions)}')# 7. 获取每个用户的Top-N推荐商家
def get_top_n(predictions, n=10):top_n = {}for uid, iid, true_r, est, _ in predictions:if uid not in top_n:top_n[uid] = []top_n[uid].append((iid, est))# 对每个用户推荐列表按照评分进行排序for uid, user_ratings in top_n.items():user_ratings.sort(key=lambda x: x[1], reverse=True)top_n[uid] = user_ratings[:n]return top_n# 获取推荐结果
top_n = get_top_n(predictions, n=10)# 8. 为特定用户推荐商家
user_id = 'fB3jbHi3m0L2KgGOxBv6uw'  # 替换为目标用户ID
recommended_businesses = top_n.get(user_id, [])
print(f"Top 10 recommended businesses for user {user_id}:")
for business_id, rating in recommended_businesses:print(f"Business ID: {business_id}, Predicted Rating: {rating}")

这个示例假设评分值在1到5之间(即rating_scale=(1, 5)),如果评分范围不同,请修改为适合你的数据集的范围。

运行结果

RMSE: 1.2863
RMSE: 1.2862955370267326
Top 10 recommended businesses for user fB3jbHi3m0L2KgGOxBv6uw

使用 SVD++

import pandas as pd
from surprise import Reader, Dataset, SVDpp
from surprise.model_selection import train_test_split
from surprise import accuracy
import json# 1. 加载Yelp数据集
# 假设数据文件名为 'yelp_academic_dataset_review.json'
file_path = 'yelp_academic_dataset_review.json'# 加载JSON文件到DataFrame
with open(file_path, 'r') as f:data = [json.loads(line) for line in f]# 将数据转换为pandas DataFrame
df = pd.DataFrame(data)# 2. 选择必要的字段:user_id, business_id, rating
df = df[['user_id', 'business_id', 'stars']]  # 假设评分字段是 'stars'# 3. 数据预处理:将DataFrame转换为适合Surprise库的格式
reader = Reader(rating_scale=(1, 5))  # 假设评分是1到5
dataset = Dataset.load_from_df(df[['user_id', 'business_id', 'stars']], reader)# 4. 划分训练集和测试集
trainset, testset = train_test_split(dataset, test_size=0.2)# 5. 使用SVD++训练模型
svdpp = SVDpp()
svdpp.fit(trainset)# 6. 在测试集上进行预测并评估
predictions = svdpp.test(testset)
print(f'RMSE: {accuracy.rmse(predictions)}')# 7. 获取每个用户的Top-N推荐商家
def get_top_n(predictions, n=10):top_n = {}for uid, iid, true_r, est, _ in predictions:if uid not in top_n:top_n[uid] = []top_n[uid].append((iid, est))# 对每个用户推荐列表按照评分进行排序for uid, user_ratings in top_n.items():user_ratings.sort(key=lambda x: x[1], reverse=True)top_n[uid] = user_ratings[:n]return top_n# 获取推荐结果
top_n = get_top_n(predictions, n=10)# 8. 为特定用户推荐商家
user_id = 'fB3jbHi3m0L2KgGOxBv6uw'  # 替换为目标用户ID
recommended_businesses = top_n.get(user_id, [])
print(f"Top 10 recommended businesses for user {user_id}:")
for business_id, rating in recommended_businesses:print(f"Business ID: {business_id}, Predicted Rating: {rating}")

数据集的规模: SVD++SVD复杂,所以如果数据集非常大,可能会需要更长时间进行训练,尤其是在计算资源有限的情况下。

运行结果

RMSE: 1.2947
RMSE: 1.2947410246403837
Top 10 recommended businesses for user fB3jbHi3m0L2KgGOxBv6uw:

使用PMF

PMF 在 Surprise 中实现为 SVD,因此我们可以直接使用 SVD 作为 PMF, 代码参见SVD

使用NMF

import pandas as pd
from surprise import Reader, Dataset, NMF
from surprise.model_selection import train_test_split
from surprise import accuracy
import json# 1. 加载Yelp数据集
# 假设数据文件名为 'yelp_academic_dataset_review.json'
file_path = 'yelp_academic_dataset_review.json'# 加载JSON文件到DataFrame
with open(file_path, 'r') as f:data = [json.loads(line) for line in f]# 将数据转换为pandas DataFrame
df = pd.DataFrame(data)# 2. 选择必要的字段:user_id, business_id, rating
df = df[['user_id', 'business_id', 'stars']]  # 假设评分字段是 'stars'# 3. 数据预处理:将DataFrame转换为适合Surprise库的格式
reader = Reader(rating_scale=(1, 5))  # 假设评分是1到5
dataset = Dataset.load_from_df(df[['user_id', 'business_id', 'stars']], reader)# 4. 划分训练集和测试集
trainset, testset = train_test_split(dataset, test_size=0.2)# 5. 使用NMF(Non-negative Matrix Factorization)进行矩阵分解
nmf = NMF()
nmf.fit(trainset)# 6. 在测试集上进行预测并评估
predictions = nmf.test(testset)
print(f'RMSE: {accuracy.rmse(predictions)}')# 7. 获取每个用户的Top-N推荐商家
def get_top_n(predictions, n=10):top_n = {}for uid, iid, true_r, est, _ in predictions:if uid not in top_n:top_n[uid] = []top_n[uid].append((iid, est))# 对每个用户推荐列表按照评分进行排序for uid, user_ratings in top_n.items():user_ratings.sort(key=lambda x: x[1], reverse=True)top_n[uid] = user_ratings[:n]return top_n# 获取推荐结果
top_n = get_top_n(predictions, n=10)# 8. 为特定用户推荐商家
user_id = 'fB3jbHi3m0L2KgGOxBv6uw'  # 替换为目标用户ID
recommended_businesses = top_n.get(user_id, [])
print(f"Top 10 recommended businesses for user {user_id}:")
for business_id, rating in recommended_businesses:print(f"Business ID: {business_id}, Predicted Rating: {rating}")

NMF与SVD的区别:

  • NMF(非负矩阵分解)不同于SVD(奇异值分解),它强制矩阵的分解结果为非负值。适用于当数据有明显非负约束(例如评分数据)的情况。
  • 如果数据中包含负值,NMF可能无法正常工作,这时可以考虑使用SVD
  • 性能问题: 如果数据集非常大,矩阵分解模型可能需要较长时间训练。可以考虑在大规模数据集上进行性能优化(例如使用并行计算或使用分布式计算框架)。

运行结果

RMSE: 1.4577
RMSE: 1.4577314669222752
Top 10 recommended businesses for user fB3jbHi3m0L2KgGOxBv6uw

http://www.khdw.cn/news/60251.html

相关文章:

  • 宝安做网站多少钱昆明装饰企业网络推广
  • wordpress内置函数seo日常工作内容
  • 办公室现代简约装修武汉seo
  • 河南省工程建设信息网官网入口嘉兴seo网络推广
  • 企业自建网站有哪些百度网盘下载电脑版官方下载
  • 网站百度不到推广网站公司
  • 东莞教育平台网站建设看广告赚钱一天50元
  • 北海市住房和城乡建设局网站软文街怎么样
  • 移动端app开发需要哪些技术海淀seo搜索优化多少钱
  • 网页微信登录入口南昌seo建站
  • 杭州做网站公司有哪些seo独立站
  • 多米诺网站建设域名停靠浏览器
  • 广州网站建设 乐云seo公司网站与推广
  • 郑州快速网站优化公司首选it培训机构怎么样
  • 钓鱼网站到底怎么做营销到底是干嘛的
  • 昆明企业网站建设公司怎么在百度推广自己的公司
  • 给别人做网站挣钱么百度seo怎么查排名
  • 东莞做网站企业铭店铺推广渠道有哪些方式
  • 腾讯云快速建站宁波seo超级外链工具
  • 广州网站建设+致茂专门做排行榜的软件
  • 东软网站建设方案友情链接赚钱
  • 开放平台直播阿里巴巴seo排名优化
  • 招聘信息如何发布抖音优化排名
  • 行业门户网站系统西安分类信息seo公司
  • 做电脑系统网站游戏代理怎么找渠道
  • clojurescript网站开发泰安网络推广培训
  • 临沂做网站wyjzgzs谷歌网页版
  • 做游戏网站需要多少钱千峰培训
  • 云服务器可以做两个网站吗华为手机网络营销策划方案
  • 怎么建立自己的网站?网络推广营销方案免费