zoukankan      html  css  js  c++  java
  • 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.SVDSVD实现
    matrix_factorization.SVDppSVD++,即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

  • 相关阅读:
    mysql-基础和基本指令
    网络笔试面试
    Windows访问Linux下的共享目录的配置方法
    帧动画 连续播放多张图片动画 以及ui动画 SoundPool
    ScrollView listView gridView 之间的冲突问题
    handler------post传送方式
    handler通信机制
    内部存储 openFileInputStream openFileOutputStream
    popupMenu-----弹出菜单
    为系统菜单添加图标--------暴力反射
  • 原文地址:https://www.cnblogs.com/MaggieForest/p/12457109.html
Copyright © 2011-2022 走看看