精华内容
下载资源
问答
  • 推荐系统可以大致分为三类:基于内容的推荐系统,基于协同过滤推荐系统和混合推荐系统(使用这两者方式组合)。 基于内容的推荐系统使用物品的特征来推荐其他类似物品。 例如,如果我在淘宝上浏览一件纯色T恤,基于...

    推荐系统可以大致分为三类:基于内容的推荐系统,基于协同过滤推荐系统和混合推荐系统(使用这两者方式组合)。

    基于内容的推荐系统使用物品的特征来推荐其他类似物品。 例如,如果我在淘宝上浏览一件纯色T恤,基于内容的推荐系统可能会推荐给我其他款式的纯色的T恤,因为它们具有相似的特征(袖子,颜色等)。

    基于协同过滤的系统根据用户的行为来推荐其他物品。 它们包括基于用户协同过滤(userCF),和基于物品的协同过滤(ItemCF)两类。 userCF的基本思想是同寻找相似用户,并推荐相似用户喜好的物品,如:

     俗话说“物以类聚、人以群分”,拿看电影这个例子来说,如果你喜欢《蝙蝠侠》、《碟中谍》、《星际穿越》、《源代码》等电影,另外有个人也都喜欢这些电影,而且他还喜欢《钢铁侠》,则很有可能你也喜欢《钢铁侠》这部电影。

         所以说,当一个用户 A 需要个性化推荐时,可以先找到和他兴趣相似的用户群体 G,然后把 G 喜欢的、并且 A 没有听说过的物品推荐给 A,这就是基于用户的协同过滤算法。

    ItemCF的核心思想是给用户推荐那些和他们之前喜欢的物品相似的其他物品,如:

    比如,用户A之前买过《数据挖掘导论》,该ItemCF会根据此行为给你推荐《机器学习》,但是ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。

    在此文中,我们将构建一个基于物品的协同过滤系统(ItemCF)

    数据分析

    我们的数据来自于豆瓣电影网的用户点评数据,你可以在这里下载,用户点评数据包含了3个表,movies,ratings, links,我们只会用到其中的两个表,movies和ratings,首先我们查看一下数据

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    %matplotlib inline
    
    movies = pd.read_csv( './data/douban/movies.csv')
    print('电影数目(有名称):%d' % movies[~pd.isnull(movies.title)].shape[0])
    print('电影数目(没有名称):%d' % movies[pd.isnull(movies.title)].shape[0])
    print('电影数目(总计):%d' % movies.shape[0])
    movies.sample(10)

    在movies表中有很多电影没有名字,但这并不影响我们的使用。

    ratings = pd.read_csv('./data/douban/ratings.csv')
    print('用户数据:%d' % ratings.userId.unique().shape[0])
    print('电影数据:%d' % ratings.movieId.unique().shape[0])
    print('评分数目:%d' % ratings.shape[0])
    ratings.head()

     

    ratings表包含了userId,movieId,rating,timestamp四个字段,其中userId,movieId,分别表示用户Id,和电影Id,rating表示电影评分,总共有28718名用户,评分记录总数为2828500.

    接下来我们查看一下ratings表中的rating字段的数据分布

    plt.rc("font", size=15)
    ratings.rating.value_counts(sort=False).plot(kind='bar')
    plt.title('Rating Distribution\n')
    plt.xlabel('Rating')
    plt.ylabel('Count')
    plt.savefig('system1.png', bbox_inches='tight')
    plt.show()

    可以看到评分数据分为5档,分别对应1星,2星,3星,4星和5星,其中3星,4星和5星评分次数较多,所占比重较大,1星和2星评分次数较少所占比重较小。

    接下来我们查看一下评分次数最多的电影。

    rating_count = pd.DataFrame(ratings.groupby('movieId')['rating'].count())
    rating_count.sort_values('rating', ascending=False).head()

    评分最多的电影评分次数达到了6574次。我们查看一下这些分别是什么电影。

    most_rated_movies = pd.DataFrame([150, 415, 414, 19, 93], index=np.arange(5), columns = ['movieId'])
    most_rated_movies_summary = pd.merge(most_rated_movies, movies, on='movieId')
    most_rated_movies_summary

     这些电影名称都不是中文名,通过查询豆瓣电影网,查询到了它们的中文名称:

    The Shawshank Redemption:肖申克的救赎
    Léon:这个杀手不太冷
    Forrest Gump:阿甘正传
    Inception:盗梦空间
    Le fabuleux destin d\'Amélie Poulain:天使爱美丽 

    这几部电影在豆瓣电影网上的确都是高分电影。

    接下来我们查看一下每部电影的平均得分和它们的评分次数:

    average_rating = pd.DataFrame(ratings.groupby('movieId')['rating'].mean())
    average_rating['ratingCount'] = pd.DataFrame(ratings.groupby('movieId')['rating'].count())
    average_rating.sort_values('ratingCount', ascending=False).head()

    然后我们再看一下每部电影的平均得分和评分次数的分布情况

    plt.figure(figsize=(10,6))
    plt.scatter(average_rating.rating,average_rating.ratingCount)
    plt.xlabel('average rating')
    plt.ylabel('rating count')
    plt.show()

     

    从散点图上可以看到 电影的平均得分和评分次数呈现正相关趋势。电影平均得分越高,评分次数也越高。

    数据清洗

    我们现在要构造一个用户对电影的评分矩阵,该矩阵每一行代表一个user,每一列代表一部movie,矩阵中的每一个值代表某位用户对某部电影的评分。但是由于用户总数为28718,电影总数为57424,那么该矩阵的维度将达到(28718,57424),这将是一个超大矩阵,为了减少计算的复杂度,必须要减小数据的维度,以免出现内存溢出的情况.

    我们要过滤掉一部分评分数据,那么过滤的依据是什么?我个人觉得可以从两个方面来考虑:

    第一、我们针对用户来过滤:凡是用户评分次数少于10次的评分数据

    第二、我们针对电影来过滤:凡是电影被评分的次数少于10次的评分数据

    以上两点是我个人的想法,具体是10次还是多少次可以根据实际情况来确定。

    user_rating_count = ratings['userId'].value_counts()
    ratings = ratings[ratings['userId'].isin(user_rating_count[user_rating_count >= 10].index)]
    
    movied_rating_counts = ratings['movieId'].value_counts()
    ratings = ratings[ratings['movieId'].isin(movied_rating_counts[movied_rating_counts >= 10].index)]
    

    电影推荐

    当数据被预处理以后,我们可以构造用户对电影的评分矩阵了

    ratings_pivot = ratings.pivot(index='userId', columns='movieId',values='rating').fillna(0)
    userID = ratings_pivot.index
    movieId = ratings_pivot.columns
    print(ratings_pivot.shape)
    ratings_pivot.head()

     

    好了,我们构造了用户对电影的评分矩阵,该矩阵的维度为(18378,19454) 比原来小了很多,矩阵中有很多0元素表示该用户没有看过该部电影,接下来我们计算皮尔森相关系数的方式,来寻找最相似的电影,假设我要寻找movieId为2550(黃飛鴻之三獅王爭霸)的这部电影的相似电影

    example_movieId=2550
    bones_ratings = ratings_pivot[example_movieId]
    similar_to_bones = ratings_pivot.corrwith(bones_ratings)
    
    corr_bones = pd.DataFrame(similar_to_bones, columns=['pearsonR'])
    corr_bones.dropna(inplace=True)
    corr_summary = corr_bones.join(average_rating['ratingCount'])
    pearson_corr=corr_summary[corr_summary['ratingCount']>=500].sort_values('pearsonR', ascending=False).head(11)
    print(movies[movies.movieId == example_movieId]['title'].values[0])
    print(pearson_corr)

    我们在计算皮尔森相关系数的时候,还有一个重要因素需要考虑,那就是用户的评分次数,评分次数越多,评价结果就越准确,因此我们还要设定一个评分次数的阈值,这里暂定为500次。以上结果为与"黃飛鴻之三獅王爭霸"最相似的10部电影,其中包含了的皮尔森相关系数(从大到小进行了排序)和评价次数

    接下来我查看一下这10部电影的名称:

    print(movies[movies.movieId == example_movieId]['title'].values[0])
    corr_movie_ids=pearson_corr.index
    movie_corr = pd.DataFrame(corr_movie_ids[1:], index=np.arange(10), columns=['movieId'])
    corr_movies = pd.merge(movie_corr, movies, on='movieId')
    corr_movies

    从以上的结果看来这10部电影大都为李连杰主演的功夫片,从内容上看与“黃飛鴻之三獅王爭霸”颇为相似。

    总结

    今天我进行了推荐系统的快速开发演示,个人觉得推荐系统开发的核心并不在于选择什么样的推荐算法,而在于前期的数据的分析和数据清洗这两个阶段。数据分析可以为数据清洗提供依据,数据清洗则可以提高推荐算法的执行效率。

    完整代码在此下载

    展开全文
  • 系统分析和设计方法之系统分析

    千次阅读 2019-01-11 15:41:47
    系统分析处于从项目触发到形成项目章程,从项目章程扩展到项目需求,再到需求的逻辑过程分析,最后到可行性方案的确定。整个系统分析在项目管理周期过程中处于项目整体管理的制定项目章程环节,分析的是业务需求。...

    系统分析处于从项目触发到形成项目章程,从项目章程扩展到项目需求,再到需求的逻辑过程分析,最后到可行性方案的确定。整个系统分析在项目管理周期过程中处于项目整体管理的制定项目章程环节,分析的是业务需求。虽然讲解的内容是以过程的形式进行介绍的,但是具体的每个操作基本都是以系统操作为基础的。

     

    • 什么是系统分析
    • 系统分析方法
    • 范围定义阶段
    • 问题分析阶段
    • 需求分析阶段
    • 逻辑设计阶段
    • 决策分析阶段
    • 系统分析的未来

     

    1.什么是系统分析

    没有什么标准或者是完整的定义,但是一般意义上来说,系统分析主要集中在业务层面上,不是技术或实现方面的。

     

    2.系统分析方法

    系统分析方法有很多种,每种都有作用,相互竞争也相互完善,要根据合适的场景去选择,混搭也是可以的,但是要以解决问题为标准。

    模型驱动法包括结构分析、信息工程和面向对象分析等。模型驱动分析是以图形交流业务问题、需求和方案。结构化分析是最广泛应用的分析,它强调以过程为中心,关注数据通过业务和软件过程的流程。信息工程关注系统中存储的数据结构,而不是过程,以数据为中心,强调知识或数据需求的分析。面向对象分析是解决数据模型和过程模型的同步问题,现在成为主流。

    加速系统分析法包含获取原型、快速架构开发。加速系统分析法强调构造原乡以更快地位一个新系统确定业务需求和用户需求。获取原型使用快速开发工具辅助用户获取业务需求。当然原型是很简陋,特别是UI和外观,但是请引导业务人员关注需求,不要关注外观。还有很重要的一点是,你必须有足够多的原始素材可以支撑你能使用原型,假如你是第一次做系统分析,请放弃它。快速架构系统是一种构建系统模型的加速分析法,采用逆向工程从已有系统生成原型。但是这两种加速系统分析法都缺少一个正式的设计下进行,所以工程师难以一边原型化,一边保持加速系统分析阶段的优点。

    前两种都依赖于需求的确定和管理,下面是两种常用的需求获取方法。调查研究技术,一门系统研究必备的技能,调查内容包括:文档、文献或实地考察、观察当前系统的运行环境、调查和资源管理人员及用户群体、同一些有经验的人面谈,只要能有助于获取需求,都可以着手调查看看。调查是非常消耗时间的,联合需求计划技术可以加速需求的获取和管理。

    业务过程重构法改进业务流程,避免保留低效率的自动化过程。

    FAST系统分析策略不强制使用某种单一方法,集成前面几套方法称为一套比较流行的敏捷方法。

    Note:上面的方法介绍的像蜜糖一样甜美,不过这些只是简介性质类的,能够根据灵活场景使用需要更多的细节和思考,以及行动。

    3.范围定义阶段

    范围定义极端是典型系统开发的第一阶段。在其他资料中,这个阶段可能叫做初始研究阶段、开始研究阶段、概述阶段、计划阶段。范围定义阶段回答“这个项目看起来是否值得?”。为了回答这个问题,我们必须定义项目的范围以及触发该项目的可见问题、机会、指示。这个阶段主要关心现有系统的系统所有者视图,以及触发项目的问题或机会。范围定义阶段的交付成果是项目章程,它的内容有:1.列出问题和机会;2.协商项目的初步分为;3.评估项目的价值;4.计划项目进度表和预算;5.汇报项目计划。

    列出问题和机会,确定触发该项目的问题、机会、指示,并对每个问题、机会、指示都按照紧急程度、可见性、好处、优先权进行评估。通常是由高级系统分析员和项目经理领导完成这个任务,大部分的参与者可以粗略的归为系统所有者,包括主要的负责人等。可见性是一个方案或系统在多大程度上对客户、执行管理层是可见的,通常用评级标准鉴别。

    协商项目的初步范围,由高级系统分析员和项目经理领导,参与者大部分是系统所有者,包括主要负责人,主要工作内容是基于前一个阶段产生的初始问题陈述形成定义项目范围的基础。项目范围包括使用什么样的数据描述系统、包括什么样的业务过程、系统用户怎么连接系统。当前阶段的主要技术有调查研究和会议。

    评估项目价值,由高级系统分析员和项目经理领导,但系统所有者应作出决策,主要任务是基于有限的资料猜测项目收益是否可以冲抵项目成本,然后决策是否继续。

    计划项目进度表和预算,主要由项目经理的责任,由上一个阶段决定是否启动。前提是项目启动的一致性得到认可。当然进度表和预算作为资源的一种,需要存档。

    汇报项目计划是用于向指导部门汇报获得批准的过程。任何指导部门都应主要由非信息系统专家或管理人员构成。这也表示项目有效的沟通技巧需要很熟练的。

     

    4.问题分析阶段

    问题分析阶段通常无法跳过,几乎总是需要对当前系统的某种理解,可以想一些办法进行加速问题分析阶段。首先,如果项目是由一个战略或战术规划触发,那么项目的价值是毫无疑义的,问题分析阶段可以缩减到仅仅只是理解当前系统;其次,一个 项目由一个只是引发的,例如法律等,这也会加速问题分析阶段;最后使用某些方法学和住址有意地合并问题分析阶段和需求分析阶段,也可以加速系统分析的过程。问题分析阶段的目标是充分研究和理解问题领域,并全面分析其中存在的问题、机会和约束条件。问题分析阶段的主要关心的是现有系统的系统所有者视图和系统用户视图,仍然需要使用虽少的系统建模。问题分析阶段的任务有:1.研究问题领域;2.分析问题和机会;3、分析业务过程;4.制定系统改进目标;5.修改项目计划;6.汇报调查结果和建议。

    研究问题领域,业务问题、机会、指示和约束条件都存在与这个领域。这个任务由项目经理领导,资深系统分析员主持,身兼两职也是正常的。为了可以覆盖问题领域,足够的系统用户是必需的,但是只能抽调部分系统用户(因为系统用户也要维持正常业务运转),很少出现有限的系统用户可以代表全部系统用户的利益。在这种情况下,能够保证系统用户和系统分析人员之间有效的沟通是非常重要的。在当前阶段产生的文档,不仅要检查是否存在,还要检查时效性问题。所有的对业务问题、机会、指示的理解应该文档化(1.当时的理解是这样的;2.后来随着信息的补充或过一段时间,理解会发生变化;3.可以更好的存档和传播),可以采用模型的模式,也可以采用知识-过程-通信的构件方式。上下文图是一种用于分析系统在系统用户层面的输入输出模型,将系统记为黑盒模型,系统用户的每个服务过程的输入输出通过图形表示,极好的解决了系统用户和系统的交互上的分析。

    分析问题和机会,必须说这个需要深厚的基础,不要一开始就视图用“我们想...”或者“我们需要...”等方式描述问题,更多要从原因和结果层面进行分析。

    分析业务过程只适用于业务重构项目,基于现有业务进行分析,整个业务流程降低费用提升效率。

    制定系统改进目标,主要是建立成功的准则,对系统的任何改进都应该参照此规则。它同时确定任何可能限制系统改进灵活性的约束条件。系统改进目标也代表对新系统预期的首次尝试,约束条件是针对实现目标的限制或界限。系统改进目标应该是可以度量的,非常明确的;约束条件可以是进度、成本、技术、政策等。

    修改项目计划是针对项目范围变动做的整体性变更,由系统分析员推动。首先评估范围变动,然后将变动的修改合并进项目范围,接着变更项目计划,最后排列项目任务的优先级。

    汇报调查结果和建议,将前面几个小过程的交付物整理出来,如果有过程文档更佳,进行汇报和后续评审,是否项目继续下去。

    5.需求分析阶段

    需求分析阶段回答一个问题“用户需要什么?想从一个新系统中得到什么?”这是任何一个信息系统成功的关键。需求分析阶段的活动有:1.定义需求;2.排列需求的优先次序;3.修改项目计划;4.交流需求陈述,这些活动可能是并行执行的,最终的交付物是需求陈述。

    定义需求, 将项目目标转换成功能需求和非功能需求,主要交付物就是功能需求和非功能需求的草稿,这些草稿形式各异。需求清单和每个目标的子清单组成了需求,每个子清单都包括输入、输出、过程、存储的数据。当然也可以采用用例来建模。

    排列需求的优先次序,在需求验证之后,系统所有者和用户应该排列系统需求的优先次序。强制需求是最小的系统实现需求,理想的需求是相对强制需求来说非基本的需求。在排列过程中可以使用时间盒技术,分段式排列。

    修改项目计划,这个修改主要是更详细的需求对项目计划的反馈,带来进度、成本、范围上的变化。

    交流需求陈述,这是一个持续性的任务,在这个过程中用户会不断的宣扬他们对需求的优先级考虑,需要项目经理和主管来主持优先级变更。人际关系、交流、协商技巧是该项任务需要的基本技术。

    整个需求分析其实一直贯穿在生命周期中,需要持续的管理项目需求,最好有专门的流程来管理。

     

    6.逻辑设计阶段

    逻辑设计阶段是使用系统建模进一步记录业务需求,这些系统模型表示了数据结构、业务过程、数据流和用户接口。某种意义上讲,逻辑设计阶段验证了前面阶段建立的需求。当前阶段的最终交付物是生成一个业务需求陈述,它将实现前面阶段中确定的系统改进目标。在当前阶段的任务图中任务开始变得不像前几个阶段那么有先后顺序。逻辑设计阶段的任务有:1.结构化功能需求;2.建立功能需求的原型(可选);3.验证功能需求;4.定义验收测试用例。

    结构化功能需求是逻辑设计的一种方法,有系统分析员支持任务记录结果,该任务由每个功能需求出发,输出的是实际系统模型和详细规格说明。如何做到系统模型和详细规格说明给到恰好足够是需要根据实际需要决定。

    建立功能需求的原型(可选),是系统建模的替代方法,有系统构造人员推动任务,系统分析员记录和分析结构,通常系统用户是任务的主要数据输入者,依赖于用户已经确定的一个或多个功能需求。原型一般用在需求分析阶段构造输入和输出的示例,可以非常便于构造数据库和数据信息,前提假设条件是用户看到原型时能够知道他们的需求。这个假设满足起来看上去很容易,实际上并不容易,这要求用户有一定的技术功底,当然在中国就更不容易了。

    验证功能需求,由系统分析员支持该任务,验证需求的完整性和正确性,协调用户找出需求中的错误、忽略并进行澄清。

    定义验收测试用例,这个任务不是必需但是此时开始并不算早,因为当前阶段已经可以获得系统的业务过程、数据规则、业务规则,包括执行顺序等等,有系统分析员和系统构造人员执行该任务。

    7.决策分析阶段

    决策分析阶段确定候选方案,分析那些候选方案并推荐一个将被设计、构造和实现的目标系统。评估过程中不仅要考虑业务层面的信息,还要考虑现有的技术架构和环境,从技术层面考量,做出一个比较妥当的决策。决策分析阶段的任务有:1.确定候选方案;2.分析候选方案;3.比较候选方案;4.修改项目计划;5.推荐一种系统方案。

    确定候选方案,由系统分析员推动这个任务,这些候选方案的设计思想和观点来源于系统所有者、系统用户、系统构造人员等。调查研究技术、小组会议技术是用于研究候选系统方案的主要技术。

    分析候选方案,有系统分析员推动,不要比较候选方案,只需要对每个候选方案在技术可行性、运行可行性、经济可行性、进度可行性四个维度进行分析,记录分析过程和结构。

    比较候选方案,由系统分析员推动,系统设计人员和系统构造人员参与回答技术可行性问题,最终授权由系统所有者和系统用户执行最后的分析和推荐工作,在比较过程中直接排除掉不可行的方案。如果被推荐的方案不止一个,应该设置方案的优先权。

    修改项目计划,由项目经理、项目所有者和整个项目团队一起推动,系统分析员和系统所有者是关键人物,主要内容是不断的修正项目计划,保证项目信息在各个方面的一致性。

    推荐一种系统方案,有项目经理和主要负责人联合推动,向业务团队推荐一种系统方案。系统分析员需要编写正式的业务报告,做出不涉及技术的演示汇报。

     

    8.系统分析的未来

    面向对象分析最终代替结构化分析和信息工程,成为系统分析员的首选。CASE技术会继续改进,RAD技术也会快速发展,但是知道从根本上研究和分析业务问题并定义作为系统设计前提的逻辑业务需求的系统分析员仍然是最前沿的。

     

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

    张玉叶

    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.

    展开全文
  • 基于内容的推荐系统、基于知识的推荐系统及基于知识的推荐系统中基于约束的推荐技术和基于样列的推荐技术,推荐系统攻击,以及推荐系统的开发框架。

    1、基于内容的推荐系统

    (1)基于内容的推荐算法概述
    基于内容的推荐算法(Content-based Recommendations, CB)也是一种工业界应用比较广的一种推荐算法。由于协同过滤推荐算法中仅仅基于用户对于商品的评分进行推荐,所以有可能出现冷启动的问题,如果可以根据物品的特性和用户的特殊偏好等特征属性进行比较直观的推荐就可以解决这个冷启动的问题。
    CB算法虽然需要依赖物品和用户偏好的额外信息,但是不需要太多的用户评分或者群体记录,也就是说,就是只有一个用户也可以完成推荐功能,产生一个物品推荐列表。
    CB算法的初始设计的目标是推荐有意思的文本文档,现阶段也会将该算法应用到其它推荐领域中。
    (2)基于内容的推荐算法结构
    CB算法主要包含三个步骤:
    1.  Item Representation: 为每一个item抽取一些特征属性出来,也就是结构化物品的描述操作,对应的处理过程叫做: Content Analyzer(内容分析);
    2.  Profile Learning:利用一个用户过去喜欢(不喜欢)的item特征数据,来学习该用户的喜好特征(profile);对应的处理过程叫做:Profile Learning(特征学习);
    3.  Recommendation Generation:通过比较上一步得到的用户profile于特征item的特征,为此用户推荐一组相关性最大的item即可;对应的处理过程叫做:Filtering Component(过滤组件)。
    1.  CB-Item Representation
    对于物品特征属性的抽取类型机器学习中采用的方式,主要包括对数值型数据的处理和对非数值型数据的处理,主要处理方式如下:
    a.  数值型数据归一化;
    b.  数值型数据二值化;
    c.  非数值型数据词袋法转换为特征向量;
    d.  TF-IDF;
    e.  Word2Vec。
    2.  CB-Profile Learning
    假设用户u对于一些item已经给出了喜好判断,喜欢其中的一部分item,不喜欢其中的另外一部分,那么该过程就是通过用户u过去的这些喜好判断,构建一个判别模型,最后可以根据这个模型判断用户u对于一个新的item是否会喜好。所以说这是一个比较典型的有监督学习问题,理论上可以使用机器学习的分类算法求解出所需要的判别模型。
    常用的算法有:
    a.  最近邻方法(K-Nearest Neighbor, KNN);
    b.  决策树算法(Decision Tree, DT);
    c.  线下分类算法(Linear Classifer, LC);
    d.  朴素贝叶斯算法(Naive Bayes, NB)。
    (3)CB和CF的区别
    CB(基于内容的推荐算法)的推荐系统会试图推荐给给定用户过去喜欢的相似物品。CB不需要用户-物品评分矩阵。
    CF(协同过滤的推荐算法)的推荐系统会试图识别出具有相同爱好的用户,并推荐他们喜欢过的物品。CF算法是基于用户-物品评分矩阵来进行推荐的。
    (4)算法流程

    (5)CB算法的优缺点
    1.  优点:
    用户独立性: 在构建模型的过程中,仅仅只需要考虑当前用户信息即可;
    透明度:通过显示地列出使得物品出现在推荐列表中的内容特征或者描述,可以比较明确的解释推荐系统是如何工作的;
    新物品:在没有任何评分的情况下,也可以进行推荐。
    2.  缺点:
    可分析的内容有限/特征抽取比较难:与推荐对象相关的特征数量和类型上是有限制的,而且依赖于领域知识;
    无法发现用户的潜在兴趣/过度特化:由于CB中的推荐结果是和该用户以前喜欢的item类似的,所以如果一个用户在一个网站仅仅只对一个item表达出喜欢的情绪,那么推荐系统也就无法发现这个人可能还喜欢其它物品;
    无法为新用户产生推荐:由于CB算法需要依赖用户的历史数据,那么对于新用户而已就有可能无法产生一个比较可靠的推荐。

    2、基于知识的推荐系统

    (1)基于知识的推荐系统概述
    传统的推荐算法(CB和CF)适用于推荐特性或者口味相似的物品,比如:书籍、电影或者新闻。但是在对某些产品进行推荐的过程中,就有可能不是特别适合的方法,比如汽车、电脑、房屋、或者理财产品等等。主要是两个原因:很难在一个产品上获取大量的用户评分信息以及获得推荐的用户不会对这些已经过时的产品产生一个满意的回馈。
    基于知识的推荐技术(Knowledge-based Recommendations, KB)是专门解决这类问题的一种新的推荐技术,高度重视知识源,不会存在冷启动的问题,因为推荐的需求都是被直接引出的。缺点是:所谓的知识的获取比较难,需要知识整理工程师将领域专家的知识整理成为规范的、可用的表达形式。
    基于知识的推荐技术需要主动的询问用户的需求,然后返回推荐结果。
    (2)会话式推荐系统交互形式
    一般的交互过程如下:
    a.  用户指定自己的最初偏好,然后一次性问完所有问题,或者逐步问完问题;
    b.  当收集到足够多有关用户需求和偏好的信息后,会提供给用户一组匹配产品;
    c.  用户可能会修改自己的需求;
    d.  类似于搜索过程,只是将搜索过程中给定的参数输入到基于知识的推荐系统中。
    系统开发中需要考虑的问题:
    a.  需要一些比较高精度的推荐结果;
    b.  当没有完全匹配物品的时候,需要给定解决方案,比如主动提供某些的候选结果。
    (3)KB的分类
    基于知识的推荐系统分为两大类:基于样列的推荐和基于约束的推荐;这两种方法非常相似:先收集用户需求,在找不到推荐方案的情况下,自动修复与需求的不一致性,并给出推荐的解释。区别在于:推荐方案是如何被计算出来的。
    1.  基于样列的推荐方法通过相似度衡量标准从目录中检索物品。
    2.  基于约束的推荐方式主要是利用预先定义好的推荐知识库,即一些描述用户需求以及与这些需求相关的产品信息特征的显示关联规则;也就是使用约束求解器解决的约束满足问题或者通过数据库引擎执行并解决的合取查询形式。
    基于知识的推荐系统一般情况下需要依赖物品特征的详细知识;简单来讲,推荐就是从物品特征数量表中挑出能够匹配用户需求、偏好和硬件需求的物品;用户的需求可能会表达成为:价格不超过在2200元的物品或者能够防水等等

    3、基于约束的推荐技术

    (1)基本概念
    基于约束的推荐技术可以使用一组(V,D,C)来描述,其中:
    1.  V:是一组变量集合,主要是:Vc和VPROD;
    2.  D:是一组这些变量的有限域;
    3.  C:是一组约束条件,描述了这些变量能够同时满足的取值的组合条件;主要是CR、CF、CPROD;
    实际上基于约束的推荐技术就是在约束(V=Vc U VPROD, D, C = CR U CF U CPROD)情况下,给定一个需求REQ,给出一个最终的RES推荐结果。
    用户属性(Vc):描述了客户的潜在需求,即用户需求的特征属性实例化。比如:max-price表示用户能够接受的最高价格。
    4.  产品属性(VPROD):描述了一个给定产品种类的特征属性,比如mpix表示分辨率。一致性约束条件(CR):定义了允许范围内的用户实例对象,也就是对客户需求可能的实例化的系统约束,比如:如果要去相机能够大于大尺寸的照片,则最大可接受价格必须高于1500。
    5.  过滤条件(CF):定义了在那种条件下应该选择的哪种产品,也就是定义了用户属性和产品属性之间的关系,比如:大尺寸照片打印功能要求相机的分辨率至少大于5mpix。
    6.  产品约束条件(CPROD):定义了当前有效的产品分类。
    (2)默认值设置
    默认值设置的主要目的是帮助用户说明需求的一种方式,当用户给定一个比较模糊、泛化的需求的时候,系统可以对该属性指标进行解析转换,得到更加丰富的需求条件列表。比如:当一个用户需要的是一个可以打印大尺寸照片的时候,我们可以默认认为他需要的相机的像素必须大于3兆;给定默认的方式如下:
    1.  静态默认设置:每一个属性都具有一个默认值
    2.  条件默认设置:根据用户给定的需求条件,生产一个默认值
    3.  派生默认设置:利用以前所有用户的交互日志和当前用户给定的参数,进行分析建模,得到每一个属性的默认值。最常用的方法为:1最近邻和加权多数投票。
    (3)处理空结果集
    实际上,当用户给定的需求太多的时候,就有可能产生没有任何一个物品是符合给定需求的,也就会产生一个空推荐结果集,基本上所有的推荐系统都不能完全解决这种“无米之炊”的难题,常用的一种解决方案是:
    给定用户需求特征属性的优先级别,按照属性的优先级别删除原始需求中的需求,得到一个新的需求条件列表,重新获取推荐数据,直到有结果产生。
    (4)推荐结果排序
    基于首位效应,用户会更多的关注并选择列表开头的物品,并且这种根据物品对用户的效用进行结果排序的方式会显著提高推荐应用的信任度和用户购买意愿。
    物品排序的根据是多属性效用理论,也就是依据每个物品对用户的效用来评价。每个物品会根据事先定义好的维度来进行评价,比如相机主要考虑的就是:质量和经济实惠;金融领域可能主要考虑的就是:有效性、风险和利润。结合用户对各个维度的偏好数值(百分比),来计算出最终的对于这个商品的偏好程度。

    4、基于样列的推荐技术

    基于样列的推荐技术中主要问题就是求解用户需求和物品之间的距离,也就是物品和需求之间的相似度。一种常用的计算相似度的公式如下:

    5、基于知识的推荐系统总结

    基于知识的推荐系统在协同过滤或者基于内容的推荐技术有明显缺点的时候十分有用,并且能够很好的应用到大型的推荐系统中,但是基于知识的推荐系统还是存在着一系列的问题:
    基于约束的推荐技术构建约束条件需要比较多的一个领域知识,比较难。
    基于样列的推进技术当计算物品和需求之间相似度公式效果不佳的时候,推荐的结构比较不好,而且结构化物品特征数量以及构建特征属性和需求之间的相似度计算规则比较难,需要比较高的一个领域知识。
    未来是一个发展方向,但是在当前推荐领域中实际应用的不多。

    6、混合推荐系统

    我们可以把推荐系统看成一个黑盒子,可以将输入的数据转换成为一个有序的物品列表再进行输出,输入的数据主要包含用户记录、上下文信息、产品特征、知识模型等等,但是没有任何一个推荐算法可以利用到这所有的输入数据,所以可以考虑将多个推荐系统模型的结果混合到一起来作为最终的推荐结果。
    混合推荐系统的设计结构主要分为三大类,分别是:整体式混合设计、并行式混
    合设计、流水线式混合设计。


    7、推荐系统攻击

    在实际应用中,由于推荐系统的建议可能会影响用户的购买行为,带来经济效益的时候,我们并不能假设所有的用户都是诚实公平的,也就是说存在的恶意用户有可能会影响推荐系统的运行效果,让推荐列表经常(或者很少)包含某类商品,这种问题就叫做推荐系统攻击。
    解决方案:
    1.  尽可能的提高“可信”朋友的评分权重;
    2.  过滤异常数据,因为只有大量异常数据的存在才有可能对最终结果产生不好的影响,那么只需要过滤这部分的异常数据就可以解决这个问题。

    8、推荐系统框架

    名称SVDFeatureLibMFLibFMLenskitGraphLabMahoutSparkMLibEasyRecWafflesMyrrix
    语言C++C++C++JavaC++JavaJava/ScalaJavaC++C++
    分布式
    学术界产品

    除了常用的这十种推荐框架外,还有很多其它的框架,比如: Python-recsys(python)、Recommendable(Ruby)、Oryx(Java)、Recommenderlab(R)等等,这些框架除了使用的编程语言不同以外,实现的算法大同小异,主要是:SVD、ALS、CF及其改进算法等等。

    python-recsys Library

    使用Python语言实现的一个推荐系统框架,主要实现基于SVD奇异值矩阵分解的协同过滤算法,参考文档列表如下:
    文档说明:http://ocelma.net/software/python-recsys/build/html/
    源码:https://github.com/ocelma/python-recsys

    python-recsys Library的安装

    python-recsys需要依赖的python模块有(基本模块已有):divisi2、csc-pysparse、networkx、numpy、scipy(python版本2.7或者>=3.4)。

    • 下载python的安装压缩包:python-recsys.tar.gz
    • 解压压缩包:tar xvfz python-recsys.tar.gz
    • 进入解压后的目录:cd python-recsys
    • python命令进行安装(root用户进行安装):sudo python setup.py install
    • 在windows上有可能出现依赖Microsoft Visual的异常信息
    python-recsys Library的案例
    # 导入模块
    from recsys.algorithm.factorize import SVD
    # 创建对象并加载数据
    svd = SVD()
    svd.load_data(filename='./data/movielens/ratings.dat', sep='::', format={'col':0, 'row':1, 'value':2, 'ids': int})
    
    # 给定参数并训练模型
    k = 100
    svd.compute(k=k,
    min_values=10,
    pre_normalize=None,
    mean_center=True,
    post_normalize=True,
    savefile='/tmp/movielens')
    
    # 获取两个对象之间的相似度
    ITEMID1 = 1 							# Toy Story (1995)
    ITEMID2 = 2355 							# A bug's life (1998)
    svd.similarity(ITEMID1, ITEMID2)
    # 0.67706936677315799
    
    # 根据用户id获取推荐物品列表
    svd.recommend(USERID, is_row=False) 	#cols are users and rows are items, thus we set is_row=False
    # Returns: <ITEMID, Predicted Rating>
    [(2905, 5.2133848204673416), 			# Shaggy D.A., The
    (318, 5.2052108435956033), 				# Shawshank Redemption, The
    (2019, 5.1037438278755474), 			# Seven Samurai
    (1178, 5.0962756861447023), 			# Paths of Glory (1957)
    (904, 5.0771405690055724), 				# Rear Window (1954)
    (1250, 5.0744156653222436), 			# Bridge on the River Kwai, The
    (858, 5.0650911066862907), 				# Godfather, The
    (922, 5.0605327279819408), 				# Sunset Blvd.
    (1198, 5.0554543765500419), 			# Raiders of the Lost Ark
    (1148, 5.0548789542105332)] 			# Wrong Trousers, The
    
    # 根据物品id获取推荐用户列表
    svd.recommend(ITEMID)
    # Returns: <USERID, Predicted Rating>
    [(283, 5.716264440514446),
    (3604, 5.6471765418323141),
    (5056, 5.6218800339214496),
    (446, 5.5707524860615738),
    (3902, 5.5494529168484652),
    (4634, 5.51643364021289),
    (3324, 5.5138903299082802),
    (4801, 5.4947999354188548),
    (1131, 5.4941438045650068),
    (2339, 5.4916048051511659)]
    
    SparkMLlib

    SparkMLlib是Spark中的一个模块,主要包含机器学习相关应用领域的API,是在Spark分布式计算框架上运行的一种机器学习算法框架,主要包括常用的分类、聚类、回归和协同过滤算法(ALS),是大数据领域中应用比较多的一种技术。
    文档说明:http://spark.apache.org/docs/1.6.1/mllib-collaborative-filtering.html
    源码下载:https://github.com/apache/spark&SparkMLlib

    SparkMLlib Maven依赖
    <dependency>
    	<groupId>org.apache.spark</groupId>
    	<artifactId>spark-core_${spark.scala.version}</artifactId>
    	<version>${spark.version}</version>
    </dependency>
    <dependency>
    	<groupId>org.apache.spark</groupId>
    	<artifactId>spark-mllib_${spark.scala.version}</artifactId>
    	<version>${spark.version}</version>
    </dependency>
    <dependency>
    	<groupId>org.apache.hadoop</groupId>
    	<artifactId>hadoop-client</artifactId>
    	<version>${hadoop.version}</version>
    </dependency>
    
    SparkMLlib的案例
    • 案例一:基于SparkMLlib中的协同过滤算法对豆瓣网的电影数据进行推荐算法实现
    • 案例二:基于Spark RDD中的相关API对MovieLens中的电影数据进行协同过滤推荐算法实现
    Mahout

    Mahout是Apache Software Foundation(ASF)开发的一个开源项目,目的是创建一些可伸缩的机器学习算法。Mahout是基于MapReduce/Spark的一个分布式机器学习框架,中间主要包含分类、回归、聚类以及推荐算法等。主要有User-Based CF、Item-Based CF、ALS、ALS on Implicit Feedback、Weighted MF、SVD、SGD等算法。
    文档说明:http://mahout.apache.org/
    源码下载:https://github.com/apache/mahout
    Mahout和Spark、MapReduce一样,只是一种提供了机器学习算法的框架,不需要搭建什么环境,可以直接将最终的jar文件运行在yarn上,有时可能需要解决依赖包的问题。

    Mahout Maven依赖
    <dependency>
    	<groupId>org.apache.mahout</groupId>
    	<artifactId>mahout-math-scala_2.10</artifactId>
    	<version>${mahout.version}</version>
    </dependency>
    <dependency>
    	<groupId>org.apache.mahout</groupId>
    	<artifactId>mahout-spark_2.10</artifactId>
    	<version>${mahout.version}</version>
    </dependency>
    
    Mahout的案例

    对MovieLens数据进行Mahout推荐API实验,主要是协同过滤中的常用算法,例如基于用户的近邻算法、基于物品的近邻算法、ASL、SVD等常用算法,并比较这几种算法的推荐模型的效果,如召回率之类的指标。

    展开全文
  • 在过去的十年中,神经网络已经取得了巨大的飞跃。如今,神经网络已经得以广泛应用,并逐渐取代传统的...YouTube的推荐系统算法由两个神经网络组成:一个用于候选生成,一个用于排序。如果你没时间仔细研究论文,可以...
  • 个性化推荐系统概述

    万次阅读 2018-11-07 10:47:47
    一、 个性化推荐系统简介 个性化推荐系统是建立在海量数据挖掘基础上的一种智能平台,可以模拟商店销售人员向顾客提供商品信息和建议,为顾客购物提供完全个性化的决策支持和信息服务,它的目标是既满足用户意识到...
  • 软件系统分析模型文档

    千次阅读 2019-11-06 08:27:31
    以下是学生选课系统的系统分析模型文档 系统分析模型 ...
  • 基于深度学习的音乐推荐系统简述

    千次阅读 热门讨论 2020-04-04 21:15:27
    本文简要介绍我做的基于深度学习的音乐推荐系统。主要从需求分析与设计实现的角度来进行介绍。 (一)需求分析   基于深度学习的音乐推荐系统旨在以个性化音乐推荐模型为基础,使用B/S架构的形式实现。个性化推荐...
  • 网易云音乐基于用户的推荐系统

    万次阅读 热门讨论 2018-08-09 09:56:20
    如今,网易云音乐着重社交功能,因此,本文尝试构建基于用户的推荐系统。 摘要:本文思路是根据用户所有时间听歌排行计算相似度,推荐用户最近一周听歌次数大于2次的歌曲。采用jaccard距离和向量余弦计算相似度。...
  • 信息系统分析与设计课程心得

    万次阅读 多人点赞 2017-02-28 13:41:39
    信息系统分析与设计课程心得此博客为信息系统分析与设计课程的学习心得记录。一、绪论1概念1.1信息要了解信息系统,首先要了解信息的概念。信息是我们理解世界的重要概念,我对它的定义是:信息是对客观事物及其相互...
  • 系统分析师书籍推荐

    千次阅读 2012-10-12 10:47:51
    国内著书有以下三本,都是51CMM张友生博士以中国系统分析团名义和考试复习资料用书名义出版的。 系统分析与设计技术 张友生 本书涵盖了《系统分析师考试大纲》的部分内容,是全国计算机技术与软件专业技术...
  • 推荐系统搜集分析数据

    千次阅读 2018-09-14 12:51:44
     本文主要介绍推荐系统如何搜集,分析数据,通过必要的推荐算法,使推荐结果符合用户的个人口味。 一.利用用户行为数据 目录 什么叫做用户行为数据 为什么利用用户行为数据 用户行为的分类 ...
  • 可行性分析系统方案建议 可行性的6个准则 成本效益分析技术 候选系统的可行性分析 系统方案建议 1.可行性分析系统方案建议 可行性分析针对的问题是项目能不能够收回投资,系统方案建议则是针对项目的解决...
  • 数据挖掘与分析 - 推荐系统的原理与开发图表一览试想一个推荐系统的应用场景分析应用场景的需求开始开发推荐图书系统常规解决想法曼哈顿距离欧氏距离 序言1:“你喜欢的我也喜欢”,这句话算是推荐系统最精华的提炼...
  • 推荐系统】电影推荐系统(一)

    千次阅读 2021-02-02 15:02:02
    随着互联网的发展,推荐系统在各种互联网项目中占据了不可缺少的一部分,商品的推荐,抖音小视频推荐,音乐推荐,交友推荐等等。电影系统相对来说是一种简单的推荐,因此笔者也从电影系统入手,进军推荐系统的学习,...
  • 推荐算法综述

    万次阅读 2017-11-02 13:36:23
    推荐算法综述     摘 要: 近年来,互联网信息指数级增长,推荐能够帮助用户发现感兴趣的物品,目前被广泛应用于电子商务、搜索引擎、视频音乐网站、社交网络等。...并且分析这些算法各自的优缺
  • 用户行为在个性化推荐系统中一般分成两种-- 显性反馈行为和隐性反馈行为。显性反馈行为包括用户明确表示对物品喜好的行为,比如对商品评分,喜欢或不喜欢。隐性反馈行为指的是那些不能明确反馈客户喜好的行为,比如...
  • 推荐系统之用户行为分析

    千次阅读 2017-12-17 00:00:00
    用户行为介绍基于用户行为的...用户行为在个性化推荐系统中一般分两种——显性反馈行为(explicit feedback)和隐性反馈 行为(implicit feedback)。显性反馈行为包括用户明确表示对物品喜好的行为:主要方式就是评分
  • 基于用户行为分析的推荐算法是个性化推荐系统的重要算法,一般称为协同过滤算法。 1.用户行为数据 用户行为数据在网站上的主要存在形式是日志和会话日志。 用户行为 显性反馈行为:用户明确表示对物品喜好。 ...
  • 基于spark的电影推荐系统数据集

    热门讨论 2015-05-27 19:39:10
    基于spark的电影推荐系统数据集
  • 什么是推荐系统? 互联网的信息越来越多,用户面对大量数据信息的时候,无法获得对自己真正有用的部分,造成信息超载问题。 推荐系统就是解决信息超载的一个办法。 推荐系统依据用户的历史行为、社交关系、兴趣点等...
  • 计算机毕业设计之Python大数据招聘可视化 招聘推荐系统 职位薪资预测算法 大数据招聘数据分析 大数据毕业设计 职位可视化(带预测算法、职位推荐)
  • 系统分析师之路

    千次阅读 2017-11-14 21:13:32
    打算2018年5月考系统分析师,于2017年双十一当天开始了我的备战之路,下面的书籍及相关书名是转载一个前辈的,也是我接下来几个月要看的书。看书心得会持续更新。。。 系统分析师必读书籍 系统分析师教程 作者:...
  • 系统分析与设计期末复习题目

    千次阅读 2018-12-12 20:38:39
    系统分析与设计 P1-P2:系统开发生命周期和4个基本阶段 SDLC是指这样一个过程,包括:理解信息系统、对业务的支持、设计系统、构建系统、以及把系统移交给用户。SDLC有相似的4个基本阶段:计划,分析,设计和实现...
  • 系统分析师视频教程下载

    万次阅读 热门讨论 2018-01-30 20:41:05
    给大家推荐一个希赛系统分析师视频教程,视频下载地址:http://pan.baidu.com/s/1dE2sWnR 点击打开链接 网盘的视频实时跟新,网盘还有配套电子书籍,历年真题分类讲解 授课讲师  王勇 ...
  • 电影推荐系统架构

    千次阅读 多人点赞 2020-03-01 01:00:06
  • 本文将深入介绍推荐系统的工作原理,和其中涉及的各种推荐机制,以及它们各自的优缺点和适用场景,帮助用户清楚的了解和快速构建适合自己的推荐系统。 1 信息发现 随着 Web 2.0 的发展, Web 已经变成数据分享的...
  • 详细分析推荐系统和搜索引擎的差异陈运文

    万次阅读 多人点赞 2015-12-29 00:12:06
    详细分析推荐系统和搜索引擎的差异陈运文   从信息获取的角度来看,搜索和推荐是用户获取信息的两种主要手段。无论在互联网上,还是在线下的场景里,搜索和推荐这两种方式都大量并存,那么推荐系统和搜索引擎这两...
  • 推荐系统综述:初识推荐系统

    万次阅读 多人点赞 2018-06-26 11:58:42
    4.推荐方式和效果评估 4.1 评分预测 4.2 TopN推荐 5. 推荐算法 5.1 基于用户行为推荐 5.1.1基于用户的协同过滤(User-Based CF) 5.1.2基于物品的协同过滤(Item-Based CF) 5.1.3隐语义模型(Latent Factor ...
  • 推荐系统总结

    万次阅读 多人点赞 2018-09-02 17:43:47
    一、推荐系统结构 二、推荐引擎算法(Algorithm) 1、协同过滤推荐算法 1.1 关系矩阵与矩阵计算 1.1.1 用户与用户(U-U矩阵) 1.1.2 物品与物品(V-V矩阵) 1.1.3 用户与物品(U-V矩阵) 1.1.4 奇异值分解(SVD) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 521,584
精华内容 208,633
关键字:

推荐系统分析

友情链接: 20181029-数组练习.zip