surprise工具简介--矩阵分解
Surprise(Simple Python Recommendation System Engine)是一款推荐系统库,是scikit系列中的一个。简单易用,同时支持多种推荐算法(基础算法、协同过滤、矩阵分解等)。
设计surprise时考虑到以下目的:
让用户完美控制他们的实验。为此,特别强调 文档,试图通过指出算法的每个细节尽可能清晰和准确。
减轻数据集处理的痛苦。用户可以使用内置数据集(Movielens, Jester)和他们自己的自定义 数据集。
提供各种即用型预测算法, 例如基线算法, 邻域方法,基于矩阵因子分解( SVD, PMF, SVD ++,NMF)等等。此外, 内置了各种相似性度量(余弦,MSD,皮尔逊......)。
可以轻松实现新的算法思路。
提供评估, 分析 和 比较 算法性能的工具。使用强大的CV迭代器(受scikit-learn优秀工具启发)以及 对一组参数的详尽搜索,可以非常轻松地运行交叉验证程序 。
基本算法
算法类名 | 说明 |
---|---|
random_pred.NormalPredictor | 根据训练集的分布特征随机给出一个预测值 |
baseline_only.BaselineOnly | 给定用户和Item,给出基于baseline的估计值 |
knns.KNNBasic | 最基础的协同过滤 |
knns.KNNWithMeans | 将每个用户评分的均值考虑在内的协同过滤实现 |
knns.KNNBaseline | 考虑基线评级的协同过滤 |
matrix_factorization.SVD | SVD实现 |
matrix_factorization.SVDpp | SVD++,即LFM+SVD |
matrix_factorization.NMF | 基于矩阵分解的协同过滤 |
slope_one.SlopeOne | 一个简单但精确的协同过滤算法 |
co_clustering.CoClustering | 基于协同聚类的协同过滤算法 |
其中基于近邻的方法(协同过滤)可以设定不同的度量准则
相似度度量标准 | 度量标准说明 |
---|---|
cosine | 计算所有用户(或物品)对之间的余弦相似度。 |
msd | 计算所有用户(或物品)对之间的均方差异相似度。 |
pearson | 计算所有用户(或物品)对之间的Pearson相关系数。 |
pearson_baseline | 计算所有用户(或物品)对之间的(缩小的)Pearson相关系数,使用基线进行居中而不是平均值。 |
支持不同的评估准则
评估准则 | 准则说明 |
---|---|
rmse | 计算RMSE(均方根误差)。 |
mae | 计算MAE(平均绝对误差)。 |
fcp | 计算FCP(协调对的分数)。 |
biasSVD算法
使用Surprise
工具中的SVD
参数:
n_factors
: k值,默认为100
n_epochs
:迭代次数,默认为20
biased
:是否使用biasSVD,默认为True
verbose
:输出当前epoch,默认为False
reg_all
:所有正则化项的统一参数,默认为0.02
reg_bu
:bu的正则化参数,reg_bi
:bi的正则化参数
reg_pu
:pu的正则化参数,reg_qi
:qi的正则化参数
funkSVD算法
使用Surprise
工具中的SVD
参数:
n_factors
: k值,默认为100
n_epochs
:迭代次数,默认为20
biased
:是否使用biasSVD,设置为False
verbose
:输出当前epoch,默认为False
reg_all
:所有正则化项的统一参数,默认为0.02
reg_bu
:bu的正则化参数,reg_bi
:bi的正则化参数
reg_pu
:pu的正则化参数,reg_qi
:qi的正则化参数
SVD++算法
使用Surprise
工具中的SVDpp
参数:
n_factors
: k值,默认为20
n_epochs
:迭代次数,默认为20
verbose
:输出当前epoch,默认为False
reg_all
:所有正则化项的统一参数,默认为0.02
reg_bu
:bu的正则化参数,reg_bi
:bi的正则化参数
reg_pu
:pu的正则化参数,reg_qi
:qi的正则化参数
reg_yj
:yj的正则化参数
利用surprise工具预测movielens简单数据集(SVD,biasSVD,SVD++)
from surprise import Dataset
from surprise import Reader
from surprise import BaselineOnly, KNNBasic, NormalPredictor
from surprise import accuracy
from surprise.model_selection import KFold, split
from surprise import SVD,SVDpp
#import pandas as pd
# 数据读取
reader = Reader(line_format='user item rating timestamp', sep=',', skip_lines=1)
data = Dataset.load_from_file('./ratings.csv', reader=reader)
#rain_set = data.build_full_trainset()
train_s,test_s = split.train_test_split(data, train_size=0.8)
algo1 = SVD()
algo2 = SVD(biased = False)
algo3 = SVDpp()
print('SVDbias结果')
algo1.fit(train_s)
pre = algo1.test(test_s)
accuracy.rmse(pre,verbose=True)
print('SVD结果')
algo2.fit(train_s)
pre = algo2.test(test_s)
accuracy.rmse(pre,verbose=True)
print('SVD++结果')
algo3.fit(train_s)
pre = algo3.test(test_s)
accuracy.rmse(pre,verbose=True)
示例代码:
链接:https://pan.baidu.com/s/1JY7d6xiFc8jgTQZpEQJ_Ng
提取码:q6x5
原文地址:https://www.cnblogs.com/MaggieForest/p/12457109.html
- 推荐一款超强大的基于Angularjs的自动完成(Autocomplete)标签及标签组插件–ngTagsInput
- Android新组件RecyclerView介绍,其效率更好
- android wheelview实现三级城市选择
- 算法之冒泡排序
- 数据结构之链表
- Spring Cloud实战小贴士:Zuul统一异常处理(三)【Dalston版】
- 算法之红黑树
- MIDlet工作原理
- 第五章 正则表达式的拆分【修订】
- 仿今天头条加载环境文字闪动效果
- Myexclipse创建Junit测试
- 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
- 第五章 正则表达式的拆分
- android 防止反编译的若干方法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- LeetCode-7.整数反转 取模反转法与字符串法
- Spring Bean依赖
- Spring事务是如何应用到你的业务场景中的?
- MySQL8.0大表秒加字段,是真的吗?
- 大数据简介,技术体系分类整理
- 图像处理笔记(5)---- OpenCV 用滑动条做调色板
- 牛X | 一款比传统数据库快100-1000倍的数据库,认识一下
- SpringBoot统一参数校验
- SpringBoot多邮件源发送邮件
- 一个基础的SpringBoot项目该包含哪些
- leetcode树之平衡二叉树
- 3分钟短文:说说Laravel页面会话之间的数据保存Session用法
- Skywalking Php注册不上问题排查
- 第4章代码-图形几何变换
- 第5章代码-三维观察