精华内容
下载资源
问答
  • 什么是推荐系统维基百科这样解释道:推荐系统属于资讯过滤的一种应用。推荐系统能够将可能受喜好的资讯或实物(例如:电影、电视节目、音乐、书籍、新闻、图片、网页)推荐给使用者。本质上是根据用户的一些行为数据...

    什么是推荐系统

    维基百科这样解释道:推荐系统属于资讯过滤的一种应用。推荐系统能够将可能受喜好的资讯或实物(例如:电影、电视节目、音乐、书籍、新闻、图片、网页)推荐给使用者。

    本质上是根据用户的一些行为数据有针对性的推荐用户更可能感兴趣的内容。比如在网易云音乐听歌,听得越多,它就会推荐越多符合你喜好的音乐。

    推荐系统是如何工作的呢?有一种思路如下:

    用户 A 听了 收藏了 a,b,c 三首歌。用户 B 收藏了 a, b 两首歌,这时候推荐系统就把 c 推荐给用户 B。因为算法判断用户 A,B 对音乐的品味有极大可能一致。

    推荐算法分类

    最常见的推荐算法分为基于内容推荐以及协同过滤。协同过滤又可以分为基于用户的协同过滤和基于物品的协同过滤

    基于内容推荐是直接判断所推荐内容本身的相关性,比如文章推荐,算法判断某篇文章和用户历史阅读文章的相关性进行推荐。

    基于用户的协同过滤就是文章开头举的例子。

    基于物品的协同过滤:

    假设用户 A,B,C 都收藏了音乐 a,b。然后用户 D 收藏了音乐 a,那么这时候就推荐音乐 b 给他。

    动手打造自己的推荐系统

    这一次我们要做的是一个简单的电影推荐,虽然离工业应用还差十万八千里,但是非常适合新手一窥推荐系统的内部原理。数据集包含两个文件:ratings.csv 和 movies.csv。

    # 载入数据

    import pandas as pd

    import numpy as np

    df = pd.read_csv('data/ratings.csv')

    df.head()

    ratings.csv 包含四个维度的数据:

    userId:打分用户的 ID

    movieId: 被打分电影的 ID

    rating: 用户给电影的打分,处于[1,5]

    timestamp: 电影被打分的时间

    要推荐电影还需要有电影的名字,电影名字保存在 movies.csv 中:

    movies = pd.read_csv('data/movies.csv')

    movies.head()

    将 ratings.csv 和 movies.csv 的数据根据 movieId 合并。

    df = pd.merge(df, movie_title, on='movieId')

    df.head()

    我们这次要做的推荐系统的核心思路是:

    根据所有用户评分判断所有电影与用户 a 已观看的某部电影 A 的相似度

    给用户 a 推荐相似度高且评分高的电影

    所以我们要先有所有用户对所有电影的评分的列联表:

    movie_matrix = df.pivot_table(index = 'userId', columns = 'title' ,values = 'rating')

    movie_matrix.head()

    假设用户 A 观看的电影是 air_force_one (1997),则计算列联表中所有电影与 air_force_one (1997) 的相关性。

    AFO_user_rating = movie_matrix['Air Force One (1997)']

    simliar_to_air_force_one = movie_matrix.corrwith(AFO_user_rating)

    这样我们就得到了所有电影与 air_force_one (1997)的相关性。

    但是,直接对这个相关性进行排序并推荐最相关的电影有一个及其严重的问题:

    ratings = pd.DataFrame(df.groupby('title')['rating'].mean())#计算电影平均得分

    ratings['number_of_ratings'] = df.groupby('title')['rating'].count()

    import matplotlib.pyplot as plt

    %matplotlib inline

    ratings['number_of_ratings'].hist(bins = 60);

    2019510105422588.jpg?2019410105429

    上图是电影被评分次数的直方图,可以看到大量的电影评分次数不足10次。评分次数太少的电影很容易就被判断为高相关性。所以我们要将这部分的评分删掉。

    corr_AFO = pd.DataFrame(similar_to_air_force_one, columns = ['Correlation'])

    corr_AFO.dropna(inplace = True)

    corr_contact = corr_contact.join(ratings['number_of_ratings'],how = 'left',lsuffix='_left', rsuffix='_right')

    corr_AFO[corr_AFO['number_of_ratings']>100].sort_values(by = 'Correlation',ascending = False).head()

    这样我们就得到了一个与 air_force_one (1997) 高相关的电影列表。但是高相关有可能评分低(概率低),再从列表里挑几部平均得分高的电影推荐就好了。

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

    展开全文
  • 主要介绍了Python用户推荐系统曼哈顿算法实现完整代码,简单介绍了曼哈顿距离的定义,然后分享了其Python实现代码,具有一定借鉴价值,需要的朋友可以了解下。
  • 文章介绍了利用Python语言实现的一个基于物品的协同过滤算法推荐系统,给出了系统的基本架构、系统的具体实现过程及相应代码。关键词: 大数据; 推荐系统; 协同过滤; Python中图分类号:TP391.1 文献标志码:A 文章...

    张玉叶

    qkimagesjsjsjsjs201906jsjs20190617-1-l.jpg

    qkimagesjsjsjsjs201906jsjs20190617-2-l.jpg

    qkimagesjsjsjsjs201906jsjs20190617-3-l.jpg

    摘  要: 大数据时代的推荐系统可以帮助用户从海量信息中高效地获取自己的潜在需求,是大数据在互联网领域的典型应用。文章介绍了利用Python语言实现的一个基于物品的协同过滤算法推荐系统,给出了系统的基本架构、系统的具体实现过程及相应代码。

    关键词: 大数据; 推荐系统; 协同过滤; Python

    中图分类号:TP391.1          文献标志码:A    文章编号:1006-8228(2019)06-59-04

    Abstract: The recommendation system in the big data era can help users to obtain their potential needs efficiently from the huge amount of information, which is a typical application of big data in the Internet field. A recommendation system based on object-based collaborative filtering algorithm and implemented with Python language is introduced in this paper, and the basic architecture of the system, the specific implementation process of the system, and the corresponding code are given.

    Key words: big data; recommendation system; collaborative filtering; Python

    0 引言

    随着网络技术的飞速发展,网络信息量也快速增长,为了更好地满足用户的个性化需求,各种推荐系统应运而生,它通过研究用户的兴趣偏好,自动建立起用户和信息之间的联系,从而帮助用户从海量信息中去发掘自己潜在的需求。推荐系统的关键是推荐算法,常用的推荐算法主要有专家推荐、基于统计的推荐、基于内容的推荐和协同过滤推荐等。Python语言是一开源、免费、跨平台的解释型高级动态编程语言,其强大的功能及使用的简洁方便使其成为互联网应用系统开发的首选语言。本文利用Python语言实现了一个基于物品的协同过滤算法的推荐系统。

    1 推荐系统

    推荐系统是建立在海量数据挖掘基础上的,通过分析用户的历史数据来了解用户的需求和兴趣,从而将用户感兴趣的信息、物品等主动推荐给用户,其本质是建立用户与物品之间的联系。一个完整的推荐系统通常包含三个模块:用户建模模块、推荐对象建模模块和推荐算法模块。推荐系统首先对用户建模,根据用户的行为数据和属性数据来分析用户的兴趣和需求,同时也对推荐对象进行建模。接着,基于用户特征和物品对象特征,采用推荐算法计算得到用户可能感兴趣的物品,然后根据推荐场景对推荐结果进行一定的推荐和调整,最终将推荐结果展示给用户,其基本架构如图1所示[1]。

    2 协同过滤算法

    协同过滤算法分为基于用户的协同过滤算法和基于物品的协同过滤算法[1]。

    基于用户的协同过滤算法(简称UserCF),通过不同用户对物品的评分来评测用户之间的相似性,基于用户之间的相似性做出推荐。简单来讲就是:给用户推荐和他兴趣相似的其他用户喜欢的物品。

    基于物品的协同过滤算法(简称ItemCF),通过用户对不同物品的评分来评测物品之间的相似性,基于物品之间的相似性做出推荐。简单来讲就是:给用户推荐和他之前喜欢的物品相似的物品。

    UserCF算法和ItemCF算法思想类似,其实现过程也基本类似,唯一不同的是一个是计算用户相似度,一个是计算物品相似度。

    UserCF算法和ItemCF最主要的区别在于:UserCF推荐的是那些和目標用户有共同兴趣爱好的其他用户所喜欢的物品,ItemCF算法则推荐那些和目标用户之前喜欢的物品类似的其他物品。因此,UserCF算法的推荐更偏向社会化,适合应用于新闻推荐、微博话题推荐等应用场景;而ItemCF算法的推荐则更偏向于个性化,适合应用于电子商务、电影、图书等应用场景。

    3 推荐系统的设计与实现

    3.1 推荐算法

    本推荐系统以一电影推荐系统为例,因此采用基于物品的协同过滤算法(简称ItemCF)。基于物品的协同过滤算法是给目标用户推荐那些和他们之前喜欢的物品相似的物品。此算法并不利用物品的内容属性计算物品之间的相似度,而主要通过分析用户的行为记录来计算物品之间的相似度。该算法基于的假设是:物品I1和物品I2具有很大的相似度,是因为喜欢物品I1的用户大多也喜欢物品I2。ItemCF算法主要包括两步。

    step1:计算物品之间的相似度

    计算相似度的算法有很多,如泊松相关系数、余弦相似度等,在此可直接利用同现矩阵[2,3]进行计算。

    设有三个用户u1、u2、u3和四件物品I1、I2、I3、I4,每个用户喜欢的物品列表如图2中的(a)所示。

    对每个用户u喜欢的物品列表都建立一个物品同现矩阵Mu,如用户u1喜欢物品I1和I3,则其物品同现矩阵中Mu1[I1][I3]和Mu1[I3][I1]的值为1,依次类推,由用户喜欢的物品列表可得到每个用户的物品同现矩阵Mu,如图2中的(b)所示。然后将所有用户的物品同现矩阵相加得到最终的所有用户物品同现矩阵M,如图2中的(c)所示。

    根据物品的同现矩阵和用户的历史行为,来求解推荐评分,然后根据推荐评分给用户生成推荐列表。推荐评分=物品同现矩阵*用户评分向量[4]。

    3.2 数据准备

    在此以MovieLens(http://grouplens.org/datasets/movielens)作為本推荐系统中的实验数据。MovieLens是GroupLens Research实验室的一个非商业性质、以研究为目的的实验性项目,采集了一组从20世纪90年代末到21世纪初的电影评分数据,包含大小不同的数据集,每个数据集中包括电影信息数据及电影评分记录等。

    本系统采用MovieLens 1M数据集。该数据集中存放电影评分记录的文件是“ratings.csv”,其数据格式如图3所示,每一行用逗号分隔的四个数据分别表示用户ID、电影ID、评分和评分时间戳,本推荐系统中只使用前三个数据元素。

    数据集中存放电影信息数据的文件是“movies.csv”,其数据格式如图4所示,系统中主要使用前两个数据:电影ID和电影名称(年份)。

    基于此数据集,如何通过已知的用户评分记录来预测未知的用户评分,通过此评分来预测用户是否会喜欢某部电影,从而决定是否给用户推荐该电影。实现时采用Top-N推荐,即为目标用户提供一个长度为N的推荐列表。

    3.3 数据处理

    首先,将所需数据读入并进行一定的预处理,将用户评分记录的前3项(用户ID、电影ID、评分)和电影信息文件的前2项(电影ID和电影名称)依次读出并放到字典中。评分记录信息用于求解电影相似度,电影信息用于推荐结果展示。其Python代码[4-6]如下:

    3.4 建立同现矩阵

    同现矩阵是一稀疏矩阵,在此采用Python内置序列字典来存放,可有效提高算法空间和时间效率。其实现代码如下:

    3.5 计算推荐评分及推荐结果

    当同现矩阵计算完成后,根据同现矩阵和用户评分来计算用户对未观看过的相似电影的推荐评分(也即兴趣度),根据推荐评分高低来针对用户进行电影推荐。其实现代码如下:

    3.6 输出推荐结果

    根据需要来输出某个用户的Top-N推荐结果,其代码如下:

    调用主函数main("ratings.csv","movies.csv","2",10)对用户2,为其推荐10部未曾看过的电影,得到的推荐结果如图5所示。

    4 结束语

    推荐系统可帮助用户从海量信息中高效地获取自己潜在需求,是大数据在互联网领域的典型应用,通过分析用户的历史记录来了解用户的喜好,从而主动为用户推荐其感兴趣的信息,满足用户的个性化需求。本文利用Python语言实现的基于物品的协同过滤算法的电影推荐系统具有普适性,在该系统基础上稍加修改,就可应用于音乐推荐系统、图书推荐系统、商品推荐系统等,具有广阔的应用前景。

    参考文献(References):

    [1] [美]查鲁.C.阿加沃尔.推荐系统:原理与实践[M].机械工业出版社,2018.

    [2] 项亮.推荐系统实践[M].人民邮电出版社,2012.

    [3] 林子雨.大数据技术原理与应用[M].人民邮电出版社,2017.

    [4] 王建芳.机器学习算法实践[M].清华大学出版社,2018.

    [5] 黑马程序员.Python实战编程[M].中国铁道出版社,2018.

    [6] 董付国.Python程序设计开发宝典[M].清华大学出版社,2017.

    展开全文
  • 推荐系统当中的物质扩散算法,使用python语言编写,有效快捷
  • 推荐系统Python代码实现

    千次阅读 2019-01-05 00:10:23
    协同过滤推荐系统在我们的日常生活之中无处不在,例如,在电子商城购物,系统会根据用户的记录或者其他的 信息来推荐相应的产品给客户,是一种智能的生活方式。之所以交协同过滤,是因为在实现过滤推荐的时候是根据 ...

    协同过滤推荐系统在我们的日常生活之中无处不在,例如,在电子商城购物,系统会根据用户的记录或者其他的

    信息来推荐相应的产品给客户,是一种智能的生活方式。之所以交协同过滤,是因为在实现过滤推荐的时候是根据

    其他人的行为来做预测的,基于相似用户的喜好来实现用户的喜好预测。

    简要介绍:         

    通过找到兴趣相投,或者有共同经验的群体,来向用户推荐感兴趣的信息。

    举例,如何协同过滤,来对用户A进行电影推荐?

    答:简要步骤如下

    找到用户A(user_id_1)的兴趣爱好

    找到与用户A(user_id_1)具有相同电影兴趣爱好的用户群体集合Set<user_id>

    找到该群体喜欢的电影集合Set<movie_id>

    将这些电影Set<Movie_id>推荐给用户A(user_id_1)

    具体实施步骤如何?

    答:简要步骤如下

    (1)画一个大表格,横坐标是所有的movie_id,纵坐标所有的user_id,交叉处代表这个用户喜爱这部电影

     

    Move_id_1

    Move_id_2

    Move_id_3

    Move_id_4

    Move_id_5

    ……

    Move_id_110w

    User_id_1

    1

    1

    1

     

     

     

     

    User_id_2

    1

    1

    1

    1

     

     

     

    User_id_3

    1

    1

    1

     

    1

     

     

    ………….

     

     

     

     

     

     

     

    ………….

     

     

     

     

     

     

     

    User_id_10w

    1

     

    1

     

    1

     

     

    如上表:

    横坐标,假设有10w部电影,所以横坐标有10w个movie_id,数据来源自数据库

    纵坐标,假设有100w个用户,所以纵坐标有100w个user_id,数据也来自数据库

    交叉处,“1”代表用户喜爱这部电影,数据来自日志

    画外音:什么是“喜欢”,需要人为定义,例如浏览过,查找过,点赞过,反正日志里有这些数据

    (2)找到用户A(user_id_1)的兴趣爱好

    如上表,可以看到,用户A喜欢电影{m1, m2, m3}

    (3)找到与用户A(user_id_1)具有相同电影兴趣爱好的用户群体集合Set<user_id>

    如上表,可以看到,喜欢{m1, m2, m3}的用户,除了u1,还有{u2, u3}

    (4)找到该群体喜欢的电影集合Set<movie_id>

    如上表,具备相同喜好的用户群里{u2, u3},还喜好的电影集合是{m4, m5}

    画外音:“协同”就体现在这里。

    (5)未来用户A(use_id_1)来访问网站时,要推荐电影{m4, m5}给ta。

    具体实现步骤:

    第一步:计算两者之间的相似度

                           通常会先把二维表格绘制在一个图中总,每个用户数据表示一个点。

                           度量相似度计算的方法:a.曼哈顿距离计算(计算迅速,节省时间)

                                                                   b.欧氏距离计算(计算两个点之间的直线距离)

    数据预处理:

    去网站:https://grouplens.org/datasets/movielens/           下载movieLen数据集

                  或者

                          ml-latest-small(1MB): http://files.grouplens.org/datasets/movielens/ml-latest-small.zip
                          ml-latest(234.2MB): http://files.grouplens.org/datasets/movielens/ml-latest.zip

    解压读取movies.csv和ratings.csv文件

    两个文件的数据格式如下:

    1. 通过如下程序提取数据:
    2. #!/usr/bin/env python
    3. # encoding: utf-8
    4. """
    5. @Company:华中科技大学电气学院聚变与等离子研究所
    6. @version: V1.0
    7. @author: YEXIN
    8. @contact: 1650996069@qq.com or yexin@hust.edu.cn 2018--2020
    9. @software: PyCharm
    10. @file: recommend.py
    11. @time: 2018/8/19 17:32
    12. @Desc:读取用户的电影数据和评分数据
    13. """
    14. import pandas as pd
    15. movies = pd.read_csv("E:\PycharmWorks\ML\CollaborativeFiltering\ml-latest\movies.csv")
    16. ratings = pd.read_csv("E:\PycharmWorks\ML\CollaborativeFiltering\ml-latest\\ratings.csv")##这里注意如果路径的中文件名开头是r,要转义。
    17. data = pd.merge(movies,ratings,on = 'movieId')#通过两数据框之间的movieId连接
    18. data[['userId','rating','movieId','title']].sort_values('userId').to_csv('E:\PycharmWorks\ML\CollaborativeFiltering\ml-latest\data.csv',index=False)

    结果:

    采用python字典来表示每位用户评论的电影和评分
    1. #!/usr/bin/env python
    2. # encoding: utf-8
    3. """
    4. @Company:华中科技大学电气学院聚变与等离子研究所
    5. @version: V1.0
    6. @author: YEXIN
    7. @contact: 1650996069@qq.com or yexin@hust.edu.cn 2018--2020
    8. @software: PyCharm
    9. @file: movie_rating_user.py
    10. @time: 2018/8/19 17:50
    11. @Desc:采用python字典来表示每位用户评论的电影和评分
    12. """
    13. file = open("E:\PycharmWorks\ML\CollaborativeFiltering\ml-latest\data.csv",'r', encoding='UTF-8')#记得读取文件时加‘r’, encoding='UTF-8'
    14. ##读取data.csv中每行中除了名字的数据
    15. data = {}##存放每位用户评论的电影和评分
    16. for line in file.readlines()[1:100]:
    17. #注意这里不是readline()
    18. line = line.strip().split(',')
    19. #如果字典中没有某位用户,则使用用户ID来创建这位用户
    20. if not line[0] in data.keys():
    21. data[line[0]] = {line[3]:line[1]}
    22. #否则直接添加以该用户ID为key字典中
    23. else:
    24. data[line[0]][line[3]] = line[1]
    25. print(data)

    结果(部分):

    计算任何两位用户之间的相似度,由于每位用户评论的电影不完全一样,所以兽先要找到两位用户共同评论过的电影

    然后计算两者之间的欧式距离,最后算出两者之间的相似度。

    1. #!/usr/bin/env python
    2. # encoding: utf-8
    3. """
    4. @Company:华中科技大学电气学院聚变与等离子研究所
    5. @version: V1.0
    6. @author: YEXIN
    7. @contact: 1650996069@qq.com or yexin@hust.edu.cn 2018--2020
    8. @software: PyCharm
    9. @file: movie_rating_user.py
    10. @time: 2018/8/19 17:50
    11. @Desc:采用python字典来表示每位用户评论的电影和评分
    12. """
    13. file = open("E:\PycharmWorks\ML\CollaborativeFiltering\ml-latest\data.csv",'r', encoding='UTF-8')#记得读取文件时加‘r’, encoding='UTF-8'
    14. ##读取data.csv中每行中除了名字的数据
    15. data = {}##存放每位用户评论的电影和评分
    16. for line in file.readlines()[1:100]:
    17. #注意这里不是readline()
    18. line = line.strip().split(',')
    19. #如果字典中没有某位用户,则使用用户ID来创建这位用户
    20. if not line[0] in data.keys():
    21. data[line[0]] = {line[3]:line[1]}
    22. #否则直接添加以该用户ID为key字典中
    23. else:
    24. data[line[0]][line[3]] = line[1]
    25. #print(data)
    26. """计算任何两位用户之间的相似度,由于每位用户评论的电影不完全一样,所以兽先要找到两位用户共同评论过的电影
    27. 然后计算两者之间的欧式距离,最后算出两者之间的相似度
    28. """
    29. from math import *
    30. def Euclidean(user1,user2):
    31. #取出两位用户评论过的电影和评分
    32. user1_data=data[user1]
    33. user2_data=data[user2]
    34. distance = 0
    35. #找到两位用户都评论过的电影,并计算欧式距离
    36. for key in user1_data.keys():
    37. if key in user2_data.keys():
    38. #注意,distance越大表示两者越相似
    39. distance += pow(float(user1_data[key])-float(user2_data[key]),2)
    40. return 1/(1+sqrt(distance))#这里返回值越小,相似度越大
    41. #计算某个用户与其他用户的相似度
    42. def top10_simliar(userID):
    43. res = []
    44. for userid in data.keys():
    45. #排除与自己计算相似度
    46. if not userid == userID:
    47. simliar = Euclidean(userID,userid)
    48. res.append((userid,simliar))
    49. res.sort(key=lambda val:val[1])
    50. return res[:4]
    51. RES = top10_simliar('1')
    52. print(RES)

    用户之间相似度结果:0表示两位的影评几乎一样,1表示没有共同的影评

    根据相似度来推荐用户:

    1. ########################################################################
    2. #根据用户推荐电影给其他人
    3. def recommend(user):
    4. #相似度最高的用户
    5. top_sim_user = top10_simliar(user)[0][0]
    6. #相似度最高的用户的观影记录
    7. items = data[top_sim_user]
    8. recommendations = []
    9. #筛选出该用户未观看的电影并添加到列表中
    10. for item in items.keys():
    11. if item not in data[user].keys():
    12. recommendations.append((item,items[item]))
    13. recommendations.sort(key=lambda val:val[1],reverse=True)#按照评分排序
    14. #返回评分最高的10部电影
    15. return recommendations[:10]
    16. Recommendations = recommend('1')
    17. print(Recommendations)

    推荐结果:

    ==================================================================================

    但有时我们会碰到因为两个用户之间数据由于数据膨胀,一方数据大,一方数据小,但是两者称明显的线性关系

    我们引入Pearson相关系数来衡量两个变量之间的线性相关性。

    Pearson:-1~1   -1:完全负相关  1:完全正相关  0:不相关              

    相关系数 0.8-1.0 极强相关

    0.6-0.8 强相关

    0.4-0.6 中等程度相关

    0.2-0.4 弱相关

    0.0-0.2 极弱相关或无相关

    公式:

    python代码:

    1. #########################################################################
    2. ##计算两用户之间的Pearson相关系数
    3. def pearson_sim(user1,user2):
    4. # 取出两位用户评论过的电影和评分
    5. user1_data = data[user1]
    6. user2_data = data[user2]
    7. distance = 0
    8. common = {}
    9. # 找到两位用户都评论过的电影
    10. for key in user1_data.keys():
    11. if key in user2_data.keys():
    12. common[key] = 1
    13. if len(common) == 0:
    14. return 0#如果没有共同评论过的电影,则返回0
    15. n = len(common)#共同电影数目
    16. print(n,common)
    17. ##计算评分和
    18. sum1 = sum([float(user1_data[movie]) for movie in common])
    19. sum2 = sum([float(user2_data[movie]) for movie in common])
    20. ##计算评分平方和
    21. sum1Sq = sum([pow(float(user1_data[movie]),2) for movie in common])
    22. sum2Sq = sum([pow(float(user2_data[movie]),2) for movie in common])
    23. ##计算乘积和
    24. PSum = sum([float(user1_data[it])*float(user2_data[it]) for it in common])
    25. ##计算相关系数
    26. num = PSum - (sum1*sum2/n)
    27. den = sqrt((sum1Sq-pow(sum1,2)/n)*(sum2Sq-pow(sum2,2)/n))
    28. if den == 0:
    29. return 0
    30. r = num/den
    31. return r
    32. R = pearson_sim('1','3')
    33. print(R)

    pearson系数结果:

    注意:通过Pearson系数得到用户的相似度和通过欧式距离得到结果可能不一样

     

     

     

     

    展开全文
  • python写个简单的推荐系统示例程序作者:阿俊 发布于:2011-11-26 16:03 Saturday分类:推荐系统python这门语言写程序代码量非常少,短短几行就可以把程序写的很清楚,由于它严格的缩进格式,所以看起来也很容易看...

    用python写个简单的推荐系统示例程序

    作者:阿俊 发布于:2011-11-26 16:03 Saturday

    分类:推荐系统

    python这门语言写程序代码量非常少,短短几行就可以把程序写的很清楚,由于它严格的缩进格式,所以看起来也很容易看。

    其中,字典和列表递推式非常好用,写起来效率会非常非常高。

    但python的执行效率很低,所以主要的函数还要用c写,或者用c和python混合着写,用python丰富的数据结构,用c的执行效率。

    下面的代码是一个简单的user-based knn推荐系统

    #python version 2.6

    #dataset dict:

    critics={'tom':{'a':3,'b':2,'c':3,'d':1,'e':5},

    'bob':{'a':3,'b':4,'c':3,'d':1,'e':5},

    'jean':{'a':3,'b':2,'c':3,'d':2,'e':3},

    'jobs':{'a':1,'b':2,'c':4,'d':1,'e':5},

    'bill':{'a':0,'b':2,'c':1,'d':0,'e':2}}

    #calculate similarity

    from math import sqrt

    #Euclidean distance

    def sim_distance (prefs,person1,person2):

    si={}

    for item in prefs[person1]:

    if item in prefs[person2]:

    si[item]=1

    if len(si)==0: return 0

    sum_of_squares=sum([pow(prefs[person1][item]-prefs[person2][item],2)

    for item in prefs[person1] if item in prefs[person2]])

    return 1/(1+sqrt(sum_of_squares))

    #print sim_distance(critics,'bill','tom')

    #pearson method

    def sim_pearson (prefs,person1,person2):

    si={}

    for item in prefs[person1]:

    if item in prefs[person2]: si[item]=1

    n=len(si)

    if n==0:return 1

    sum1=sum([prefs[person1][it] for it in si])

    sum2=sum([prefs[person2][it] for it in si])

    sum1Sq=sum([pow(prefs[person1][it],2)for it in si])

    sum2Sq=sum([pow(prefs[person2][it],2)for it in si])

    pSum=sum([prefs[person1][it]*prefs[person2][it] for it in si])

    #calculate the pearson vlaue

    num=pSum-(sum1*sum2/n)

    den=sqrt((sum1Sq-pow(sum1,2)/n)*(sum2Sq-pow(sum2,2)/n))

    if den==0: return 0

    r=num/den

    return r

    #print sim_pearson(critics,'bill','tom')

    #ranking one person's neighborhood

    def topmatches (prefs,person,n,similarity=sim_distance):

    scores=[(similarity(prefs,person,other),other)

    for other in prefs if other!=person]

    scores.sort()#sort the similarity

    scores.reverse()

    return scores[0:n]

    #print topmatches(critics,'bill',4)

    #recommend process

    def getRecommendations (prefs,person,n,similarity=sim_pearson):#n:print the top n item

    totals={}

    simSums={}

    for other in prefs:

    if other==person: continue

    sim=similarity(prefs,person,other)

    #print sim

    if sim<=0: continue

    for item in prefs[other]:

    if item not in prefs[person] or prefs[person][item]==0:

    #print item

    totals.setdefault(item,0)

    totals[item]+=prefs[other][item]*sim

    simSums.setdefault(item,0)

    #sum of similarity

    simSums[item]+=sim

    rankings=[(total/simSums[item],item) for item,total in totals.items()]

    rankings.sort()

    rankings.reverse()

    return rankings[0:n]

    print getRecommendations (critics,'bill',2)

    如果你想做item-based的话,可以利用下面的函数

    展开全文
  • 用户推荐系统_python 代码

    千次阅读 2017-02-23 23:47:07
    代码是参考项亮的《推荐系统实践》写的,基本没什么改进。 用到的数据库是从MovieLens下载下来的,我将数据集分为train和test两个,测试的流行度,覆盖率,精确度,召回率,参考《推荐系统实践》P25-P33。
  • 使用Python的简单推荐系统实现 当前型号: 概率矩阵分解 贝叶斯矩阵分解 具有加权Lambda正则化(ALS-WR)的交替最小二乘 参考: R. Salakhutdinov和A.Mnih。,“概率矩阵分解”,NIPS 2008 “使用MCMC的贝叶斯...
  • 基于python开发的推荐系统框架 代码清晰明了,而且不断改进,值得一读 http://github.com/muricoca/crab 可以来这里看看
  • 推荐系统实战——python代码实现

    千次阅读 2019-03-21 11:39:06
    基于用户的协同过滤算法 代码实现...使用LFM隐语义模型进行Top-N推荐 代码实现 https://blog.csdn.net/fuqiuai/article/details/80653267 基于物品的协同过滤算法 https://blog.csdn.net/ls317842927...
  • Python+Django+Mysql实现在线电影推荐系统(基于用户、项目的协同过滤推荐算法) 一、项目简介 1、开发工具和实现技术 pycharm2020professional版本,python3.8版本,django3.1.1版本,mysql8.0.21版本,bootstrap...
  • python电影推荐系统

    2021-03-26 19:33:56
    python电影推荐系统 代码解释 封装类和函数 导包 随机数 字符 方差 import random import string import numpy as np %load function.py 定义用户类 类函数可以生成用户 看过的电影字典 class user(object): def ...
  • Python+Django+Mysql实现在线音乐推荐系统(基于用户、项目的协同过滤推荐算法) 一、项目简介 1、开发工具和实现技术 pycharm2020professional版本,python3.8版本,django3.1.1版本,mysql8.0.21版本,bootstrap...
  • Python与Tensorflow推荐系统实现代码
  • 主要给大家介绍了如何利用不到40行python代码实现一个简单的推荐系统,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • 项亮《推荐系统实践》 python实现 基于邻域的算法 冷启动问题
  • 推荐系统相似度python

    2018-01-23 11:18:12
    基于社交网络的推荐系统需要的用户相似度物品相似度计算程序代码和测试代码,编程语言为python
  • 推荐系统中最为主流与经典的技术之一是协同过滤技术(Collaborative Filtering), 它是基于这样的假设:用户如果在过去对某些项目产生过兴趣,那么将来他很可能依然对其保持热忱。 目前推荐系统中用的最多的就是...
  • Python+Django+Mysql实现在线电影推荐系统(基于用户、项目的协同过滤推荐算法) 一、项目简介 1、开发工具和实现技术 pycharm2020professional版本,python3.8版本,django3.1.1版本,mysql8.0.21版本,bootstrap...
  • 原作者代码地址: https://github.com/echen/restricted-boltzmann-machines 部分翻译: http://www.cnblogs.com/zhangchaoyang/articles/5537643.html cnblogs上的这篇没有完全翻译,我主要翻译这篇没有提及...
  • Python实现音乐推荐系统【跟着迪哥学python】数据+源代码,需要的自取
  • 有如下R(5,4)的打分矩阵:(“-”表示用户没有打分) 其中打分矩阵R(n,m)是n行和m列,n表示user个数,m行表示item个数 那么,如何根据目前的矩阵R(5,4)如何对...矩阵分解在推荐系统的应用以及python代码的实现
  • 本次实验将基于 Flask 框架与 MySQL 数据库,使用 Python 语言实现一个简单的番剧推荐系统。 1.2 知识点 本实验中我们将学习并实践以下知识点: Python 语言基础 SQL 语言基础 HTML 与 CSS 基础 数据库表的...
  • python运行js代码

    2020-04-17 22:57:15
    Python 之运行Js代码实践 1、通过在本地安装JS环境,配合PyexecJs库 我选择安装的是NoDe.js,记得选择加入系统环境变量。python 引入Js代码时,有两种方式:直接执行和引入js文件两种,引入文件时,可能会出现字符...
  • 什么是推荐系统 维基百科这样解释道:推荐系统属于资讯过滤的一种应用。推荐系统能够将可能受喜好的资讯或实物(例如:电影、电视节目、音乐、书籍、新闻、图片、网页)推荐给使用者。源码看文末! 本质上是根据用户...
  • python代码示例-Python代码样例列表

    千次阅读 2020-10-28 20:45:24
    ├─algorithm│ Python用户推荐系统曼哈顿算法实现.py│ NFA引擎,Python正则测试工具应用示例.py│ Python datetime计时程序的实现方法.py│ python du熊学斐波那契实现.py│ python lambda实现求素数的简短代码.py...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,101
精华内容 440
关键字:

python推荐系统代码

python 订阅