头歌实践教学平台:数据科学与大数据技术导论(四)
四、第1关大数据综合案例理论相关知识你需要掌握1.大数据综合案例。案例任务网络上的电影信息在迅速增长随着时间的推进电影信息越来越多用户面对如此庞大的数据将变得无所适从。电影推荐系统可以根据用户的喜好用户对一些电影的评分向用户推荐可能感兴趣的电影这样可以给用户创造一个良好的电影信息推荐体验让用户不再漫无目的地去寻找符合自己口味的电影。电影推荐系统的功能包括用户管理功能和电影推荐功能。如下图所示电影推荐系统功能用户管理功能是系统的基础功能包括注册功能和登录功能。注册是第一次使用本系统的用户的必要步骤用户进入注册界面按要求填写相关信息即用户自定义登录账号和密码完成新用户注册。在用户成功注册后即可使用系统的登录功能用户可在登录界面填写账号和密码验证成功后可进入推荐系统。电影推荐功能是系统的核心功能用户登录成功以后系统自动随机挑选一些电影呈现给用户由用户根据自己个人喜好对电影进行评分然后系统会根据用户的评分信息调用 Spark 程序计算出用户最可能感兴趣的几部电影并在网页中为用户呈现精美的电影图片。系统设计系统总体设计电影推荐系统的设计开发工作包括网站、电影推荐程序和数据库三个部分网站搭建一个网站提供用户管理和电影推荐功能电影推荐程序开发电影推荐程序结合大规模历史数据集和用户个人喜好为用户推荐其可能感兴趣的电影数据库设计一个关系数据库存放用户信息、电影信息、用户评分信息和电影推荐结果信息。下图描述了网站、电影推荐程序和数据库三个部分之间的关系。网站、电影推荐程序和数据库三个部分之间的关系当用户注册时新用户的用户名和密码会被写入到数据库中当用户登录时系统会到数据库读取用户名和登录密码进行验证当用户评分时用户对多部电影的评分信息会被写入到数据库当用户请求推荐电影时网页会调用电影推荐程序电影推荐程序会读取数据库中的该用户的个性化评分数据并从分布式文件系统中读取大规模历史评分数据计算得到推荐结果比如 5 部用户最感兴趣的电影并把推荐结果写入到数据库最后由网页程序从数据库中读取推荐结果呈现到网页中。数据库设计本系统使用关系数据库保存用户信息、电影信息、用户评分信息和电影推荐结果信息。需要创建一个数据库 movierecommend并在数据库中创建 4 个表即电影信息表 movieinfo、用户信息表 user、用户评分表 personalratings 以及电影推荐结果表 recommendresult。 各个表的字段如下1电影信息表 movieinfo电影ID、电影名称、电影上映时间、电影导演、主要演员、电影宣传海报、电影的平均评分、参与电影评分的人数、电影简介、电影类型。2用户信息表 user用户 ID、用户名、用户登录密码。3用户评分表 personalratings用户 ID、电影 ID、用户对电影的评分、评分时间。4电影推荐结果表 recommendresult用户 ID、电影 ID、电影评分、电影名称。系统网站的设计如图所示电影推荐系统网站主要包括首页、登录页面、注册页面、用户评分页面和电影推荐结果页面。电影推荐系统的网页跳转示意图在推荐系统网站首页中如下图所示会滚动显示当前热播的几部电影。同时在页面的右上角提供了“登录”和“注册”按钮当用户点击时分别会跳转到“登录”和“注册”页面。推荐系统网站首页在用户评分成功以后系统会调用后端的电影推荐程序计算得到电影推荐结果并把推荐结果写入到数据库。然后系统从数据库中读取推荐结果并以可视化方式呈现在“电影推荐结果页面”上。如下图所示电影推荐结果页面算法设计1、算法的选择电影推荐程序的设计是电影推荐系统设计的核心。电影推荐程序需要完成推荐功能因此可以选择经典的推荐算法——协同过滤。基于 ALS 矩阵分解的协同过滤算法就是典型的基于模型的协同过滤算法。基于模型的协同过滤算法是通过已经观察到的所有用户给产品的打分来推断每个用户的喜好并向用户推荐适合的产品。本系统就采用该算法来预测某个用户对某部电影的评分并把评分高的电影推荐给该用户。2、ALS 算法的基本原理在实际应用中用户和商品的关系可以抽象为一个三元组User,Item,Rating用户对物品的评分行为可以表示成一个评分矩阵A(m*n)表示 m 个用户对 n 个物品的评分情况。用户对物品的评分:v1 v2 v3 v4 v5u1 3 5 4 ? 1u2 4 ? 3 3 1u3 3 4 5 3 2u4 4 4 3 2 1u5 2 4 ? 1 2u6 ? 5 4 1 2其中矩阵 A 的每个元素 Aij表示用户 ui对物品 vj的评分。在实际应用场景中一方面m 和 n 的数值都很大矩阵A的规模很容易就会突破 1 亿项这时传统的矩阵分解方法面对如此巨大的数据量往往会显得“无能为力”另一方面用户不会对所有的物品都进行评分因此在矩阵A中会不可避免地存在一些“缺失值”表中用问号标记的地方这意味着A是一个稀疏矩阵里面会存在很多空值。基于模型的协同过滤算法就是根据已经观察到的用户、物品信息来预测矩阵 A 中的“缺失值”。“用户-物品”矩阵 A 中的元素 Aij是用户给予物品的显式偏好例如用户根据自己的喜好对电影进行评分。然而在现实世界中使用时我们常常只能访问隐式反馈如意见、点击、购买、喜欢以及分享等而无法获得用户对物品的直接评分。基于 ALS 矩阵分解的协同过滤算法不是直接对评分矩阵进行建模而是根据隐式反馈如意见、点击、购买、喜欢以及分享等来衡量用户喜好某个物品的置信水平从而得到“用户-物品”矩阵 A 中的“缺失值”。例如将用户 (User) 对物品 (Item) 的评分矩阵分解为两个矩阵一个是用户对物品隐含特征的偏好矩阵另一个是物品所包含的隐含特征的矩阵。具体而言将用户-物品的评分矩阵分解成两个隐含因子矩阵 P 和 Q从而将用户和物品都投影到一个隐含因子的空间中去。即对于R(m×n)的矩阵ALS 旨在找到两个低维矩阵P(m×k)和矩阵Q(n×k)来近似逼近R(m×n)其中kmin(m, n)。这里相当于降维了矩阵 P 和 Q 也称为低秩矩阵。ALS 是求解的著名算法基本思想是固定其中一类参数使其变为单类变量优化问题利用解析方法进行优化再反过来固定先前优化过的参数再优化另一组参数此过程迭代进行直到收敛。ALS 即“最小交替二乘法”中的“交替”就是指我们先随机生成 P0然后固定 P0 去求解 Q0再固定 Q0 求解 P1这样交替进行下去。因为每步迭代都会降低重构误差并且误差是有下界的所以 ALS 一定会收敛。3、使用 ALS 算法预测用户对电影的评分在本案例中我们可以获得一个电影评分数据集里面包含了大量用户对不同电影的评分用户和商品的关系三元组User,Item,Rating中User 就是参与打分的电影观众Item 就是电影Rating 就是观众对电影的打分。在我们获取到的电影评分数据集中只包含了大量用户对他已经看过的电影的评分对于没有看过的电影用户是无法评分的因此由这个数据集构建得到的矩阵肯定是一个稀疏矩阵。我们可以使用电影评分数据集对 ALS 算法进行训练训练的过程就是寻找低秩矩阵 P 和 Q、使 P 和 Q 尽可能地逼近R的过程。算法训练过程达到收敛以后得到一个模型然后就可以使用这个模型进行评分预测也就是给定一个用户和一部电影该模型就会预测该用户可能给该电影打多少分。技术选择为了实现之前给出的系统设计方案需要选择确定相关的实现技术具体如下1数据集。通过网络爬虫从网络获得电影评分数据集这里使用 Scrapy 爬虫。2操作系统。在构建大数据分析系统时一般建议采用 Linux 系统Linux 系统有许多发行版这里选择 Ubuntu。3关系数据库。在电影推荐系统中需要使用关系数据库来存储用户信息、电影信息、用户评分信息和电影推荐结果信息。目前市场上有许多关系数据库产品比如 Oracle、SQL Server、DB2、MySQL 等这里选择开源数据库产品 MySQL。4分布式文件系统。用来保存大量的电影评分数据这里选择 Hadoop 的 HDFS。5ETL。用来把通过网络爬虫得到的、保存在文本文件中的数据经过数据清洗以后加载到分布式文件系统中这里采用开源 ETL 工具 Kettle。6分布式计算框架。对于机器学习算法而言传统的机器学习算法由于技术和单机存储的限制只能在少量数据上使用。在面对大规模数据集时需要实现分布式机器学习算法因此这里采用机器学习框架 Spark MLlib。MLlib 提供了 ALS 算法的分布式实现也就是说开发人员不需要编写ALS算法的实现细节只要调用 MLlib 提供的 ALS 算法的 API传入训练数据电影评分数据集MLlib 就会自动完成模型训练训练得到的模型就可以用于预测某个用户对某部电影的评分。7编程语言。Spark MLlib 支持 Java、Scala 和 Python这里采用 Scala 语言。8开发工具。调试 Spark 程序需要一款高效的开发工具这里选择 IntelliJIDEA。9网站。网站开发采用 Node.js。Node.js 是一个 JavaScript 运行环境是一个基于Chrome JavaScript 运行时建立的平台用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动、非阻塞 I/O 模型具备轻量和高效的特点非常适合在分布式设备上运行数据密集型的实时应用。系统实现技术:项目 技术数据集 Scrapy爬虫操作系统 Linux系统比如Ubuntu关系数据库 MySQL分布式文件系统 HDFSETL Kettle分布式计算框架 Spark MLlib编程语言 Scala开发工具 IntelliJ IDEA网站 Node.js通过上述技术选择以后本案例的数据分析全流程就十分清晰了整体过程如下图所示。本案例的数据分析整体过程系统实现系统实现是一个比较复杂的过程这里只简单介绍系统实现过程中所涉及到的一些任务关于系统实现的详细细节可以参考《大数据实训案例之电影推荐系统Scala 版》。系统实现涉及的主要任务如下1搭建环境。安装 Linux 系统、JDK、关系型数据库 MySQL、大数据软件 Hadoop、大数据软件 Spark、开发工具 IntelliJ IDEA、ETL 工具 Kettle 和 Node.js2采集数据。编写 Scrapy 爬虫从网络上获取电影评分数据3加载数据。使用 ETL 工具 Kettle 对数据进行清洗后加载到分布式文件系统 HDFS 中。4存储和管理数据。使用分布式文件系统 HDFS 和关系数据库 MySQL 对数据进行存储和管理。5处理和分析。使用 Scala 语言和开发工具 IntelliJ IDEA编写 SparkMLlib 程序根据 HDFS 中的大量数据进行模型训练即使用数据对 ALS 算法进行训练得到模型然后使用训练得到的模型进行电影评分预测并为用户推荐评分高的电影。6可视化。使用 Node.js 搭建网站接受用户访问并以可视化方式呈现电影推荐结果。案例所需知识和技能总体而言要实现本案例我们需要掌握以下知识Linux 操作系统、关系数据库、JDK 基本知识、面向对象编程、Scala 编程语言、网络爬虫、数据清洗、分布式文件系统、Spark、Spark SQL、Spark Mllib、JDBC、机器学习、数据挖掘、推荐系统、协同过滤算法、ASL 算法、网页应用程序开发、HTML 语言、数据可视化、系统设计等。从专业技能的角度我们需要掌握Linux 系统及相关软件的安装和使用方法、JDK 的安装、Hadoop 的安装和基本使用方法、Spark 的安装和基本使用方法、MySQL 数据库的安装和基本使用方法、开发工具 InteliJ IDEA 的安装和使用方法、Scala 程序开发方法、软件项目管理工具 Maven 的使用方法、ETL 工具 Kettle 的安装和使用方法、Spark SQL 程序的开发方法、ALS 算法的使用方法、Spark MLlib 程序开发方法、Node.js 的安装和使用 Node.js 开发动态网页的方法等。有任何问题都可以随时关注私信