python用在哪些方面 如何制作游戏(或者有没有这方面的论坛以及大神帮忙,私信联系)

查看:7841|回复:11
(115.75 KB)
大家好!51CTO读书频道试读送书籍活动圆满成功,感谢各位粉丝的长期关注!请中奖粉丝于日17:00前将您的姓名、电话、地址、工作单位以私信的方式回复给读书频道官方微信(微信号:book51cto)以便我们安排发送书籍。以下是中奖名单:才子不才、tianrui007、pity。&再次恭喜以上获奖的粉丝,我们的活动仍在进行,请大家密切关注,试读送书活动等你来参与!&编辑推荐:
1. 使用Python各种扩展库完成数值计算、界面制作、三维可视化、图像处理、提高运算速度等任务
2. 光盘中提供作者本人整合开发的便携式运行环境WinPython,省去读者一一收集Python各个扩展库并安装的麻烦,涵盖NumPy、SciPy、matplotlib、Pandas、SymPy、TVTK、Mayavi、OpenCV、Cython等
3. 文前精美彩插演示书中示例所展现的Python各扩展库的强大处理效果,装帧和排版都十分考究
作者简介:
张若愚,毕业于华中理工大学(现华中科技大学)通信工程专业,2004年获日本姬路工业大学(现兵库县立大学)硕士学位。毕业后于日本神户制钢综合研究所从事研究开发工作至今,研究方向为:嵌入式DSP信号处理系统开发,嵌入式MCU控制系统开发,工业控制软件开发,信号处理、数据处理以及生产系统的计算机模拟。在工作中他积极采用Python作为主要编程语言,在数据处理、信号分析、工业控制、算法模拟等领域取得了较好的研究成果。已完成的研究课题有:嵌入式声音分离系统、车载音响设备、超声波探伤系统、压缩机系统的数字模拟等。
内容简介:
本书详细介绍Python科学计算中最常用的扩展库NumPy、SciPy、matplotlib、Pandas、SymPy、TTK、Mayavi、OpenCV、Cython,涉及数值计算、界面制作、三维可视化、图像处理、提高运算效率等多方面的内容。所附光盘中包含所有章节的Notebook以及便携式运行环境WinPython,以方便读者运行书中所有实例。
本期有奖试读活动时间:-&试读链接:
本期问题:
1.可以用 Python 编程语言做哪些神奇好玩的事情?
2. Python的扩展库有哪些?
3.书中作者整合开发的便携式运行环境WinPython(光盘中),你认为是否方便使用?
活动说明:
在学习试读章节后,根据试读内容进行书评,即可获得抽奖机会,名额共3个,随机抽取后每位中奖者将获赠《Python 科学计算》1本,大家快快来参与吧!
本帖最后由 读书频道 于
15:51 编辑
支持,这么好的活动
初级工程师
1.可以用 Python 编程语言做哪些神奇好玩的事情?这个问题,/question/这个帖子里的回复真是让我脑洞大开。下面列举几个神奇好玩的事情:1)国外有一位程序员 Kurt Grandis, 家里后院常常遭受松鼠小偷,于是乎他使用Python创造了一套智能武装系统:Kinect定位 -& OpenCV识别松鼠 -& Arduino控制水qiang攻击。2)用微信控制灯泡。搞个微信公众号,设置把请求转发到你自己的公众号服务器。公众号服务器上用Python搭一个HTTP服务器,获取到来自微信的请求。然后用Python开多一个线程通过TCP/UDP协议把消息推送到本地电脑,电脑通过串口连接Arduino电路板。Python调用serial模块和Arduino电路板通信,Arduino控制灯泡的行为。3)通过python查看哪个微信好友把你删了......2. Python的扩展库有哪些?&计算机视觉库OpenCV、三维可视化库VTK、复杂网络分析库igraph。科学计算扩展库:NumPy、SciPy和matplotlib,它们分别为Python提供了快速数组处理、数值运算以及绘图功能。数据分析扩展库Pandas、机器学习扩展库scikit-learn。3.书中作者整合开发的便携式运行环境WinPython(光盘中),你认为是否方便使用?这个要等到拿到书才能验证一下是否方便使用 ^_^ ,对于学习来说,有个便携式运行环境肯定是很方便的了。
本帖最后由 guwei4037 于
11:51 编辑
成功最大的敌人是虚度光阴、畏缩不前。
必须支持,好活动,自学基础有一段时间了,偶尔用于项目中,算是新手
1.可以用 Python 编程语言做哪些神奇好玩的事情?
Phython是一种优雅、明确、简单的语言。
可以做很多事情,曾经看到一个搞笑的面试:
面试官让一个同学编个程序来实现四则运算,什么语言都可以
同学直接用了eval(x)。
比较有趣的可以制作网络小爬虫,开发小游戏等。
2. Python的扩展库有哪些?
eventlet、Gevent、wxPython、 py2exe、Python Image Library、SciPy等
3.书中作者整合开发的便携式运行环境WinPython(光盘中),你认为是否方便使用?
有一套运行环境和开发实例看书的时候会方便好多。
1.可以用 Python 编程语言做哪些神奇好玩的事情?
Phython是一种明确、简单的语言。
可以做很多事情,
可以制作网络小爬虫,开发小游戏等。
2. Python的扩展库有哪些?
eventlet、Gevent、wxPython、 py2exe、Python Image Library、SciPy等
3.书中作者整合开发的便携式运行环境WinPython(光盘中),你认为是否方便使用?
有一套运行环境和开发实例看书的时候会方便好多。
助理工程师
1.可以用 Python 编程语言做哪些神奇好玩的事情?
爬取网络数据。采集网络数据进行分析对比,或者登录微博后用Python不停给人点赞;用于加密和解密:encode程序把一段密文写入一张图片,且完全不破坏图片的视觉效果,肉眼无法察觉差异;
2. Python的扩展库有哪些?
& & scons —— 项目构建工具,写好了模板用起来还是很方便的
  sendpkt —— 一个开发包
  setuptools —— 一套python包管理机制
  Cheetah —— 构建和扩充任何种类的基于文本的内容
  pycurl —— URL处理工具
  pydot —— 画图的,graphiz
  pyevent —— 事件支持
  pylint —— 培养良好的编码习惯
  Pylons —— 又一个web framework
  pypcap —— 抓包的
  pysqlite2 —— SQLite的连接组件
  python-dnet —— 控制网络安全的其他设备
  pythonwin —— Windows扩展
  pywmi —— 省了好多折腾功夫
  reportlab —— Python操作PDF的Libary。
 &&scapy —— 网络包构建分析框架
& & simplejson —— JSON的支持
  sqlalchemy —— SQL数据库连接池
  SQLObject —— 数据库连接池
  cherrypy —— 一个WEB framework
  ctypes —— 用来调用动态链接库
  Cx-oracle —— 连接oracle的工具
  DBUtils —— 数据库连接池
  django —— 一个WEB framework
  DPKT —— raw-scoket网络编程
  docutils —— 用来写文档的
  dpkt —— 数据包的解包和组包
  feedparser —— rss解析
  Kodos —— 正则表达式调试工具
  Mechanize —— 爬虫连接网站常用
  pefile —— windows pe文件解析器
  py2exe —— 用来生成windows可执行文件
  twisted —— 巨无霸的网络编程框架
  winpdb —— 自己的程序或者用别的库不太明白的时候就靠它了
  wxPython —— GUI编程框架,熟悉MFC的人会非常喜欢,简直是同一架构(对于初学者或者对设计要求不高的用户来说,使用 Boa Constructor可以方便迅速的进行wxPython的开发)
  PIL—— 图像处理库,可以打开数十种图像格式,还提供许多图像处理函数,如图像增强、滤波算法等。
  Pyro—— 实现与JAVA RMI类似的技术
  PLY—— 基于LEX、YACC的语言工具
  Corepy—— 使用开发编写x86汇编程序
  LightCloud—— 实现的分布式的键-值数据库
& & Parallel Python(PP)—— 轻松开发SMP、集群并行计算的库
3.书中作者整合开发的便携式运行环境WinPython(光盘中),你认为是否方便使用?
有运行环境更便于学习与参考,对每个学习具有事半功倍的效果。
论坛妇、少女之友
新的语言,新的挑战,支持活动,我想要这本书!
我爱你,如果肾够好的话,我希望是一万年!
1.可以用 Python 编程语言做哪些神奇好玩的事情?
A:使用PyGame做游戏,这个比较有意思,入门也很容易
B:使用Python自己做网络爬虫,从网站下载文章和美女图片
C:在做开发时,使用Python解析配置文件,实现自动代码生成,把公司里的人惊呆了
2. Python的扩展库有哪些?
这个就比较多了,且都是很实用的
bashplotlib----绘图,这个做数据分析极有用
PyMC----用于贝叶斯分析
beautifulsoup----网页解析,爬虫利器
re---正则表达式
pprint---漂亮的输出
logging----日志
urllib/urllib2/httplib---- http库,网页解析
其它的太多了,不一一列举了
3.书中作者整合开发的便携式运行环境WinPython(光盘中),你认为是否方便使用?
WinPython 是由 Python(x,y) 的作者开发,功能很全,是专用于科学计算的开发环境,甚至一定程序上超过了Matlab,做科学计算是再合适不过了。它包含了常用的科学计算工具包numpy,scipy,sklearn,matplotlib,还要调用C动态库的扩展包ctypes。
Matlab当然做科学计算也很强大,但是其体积太大,启动速度太慢。
另外,平时我开发,多用PyScripter这个IDE,非常轻巧,安装文件不到10M。不过不支持多线程。
1.可以用 Python 编程语言做哪些神奇好玩的事情?(1)和Android程序员关系最近的就是给apk加密(2)图片转字符画(Python初音)_______________#########_____________________________________############___________________________________#############_________________________________##__###########_______________________________###__######_#####______________________________###_#######___####____________________________###__##########_####__________________________####__###########_####_______________________#####___###########__#####____________________######___###_########___#####__________________#####___###___########___######_______________######___###__###########___######____________######___####_##############__######__________#######__#####################_#######_________#######__##############################_______#######__######_#################_#######______#######__######_######_#########___######______#######____##__######___######_____######______#######________######____#####_____#####________######________#####_____#####_____####__________#####________####______#####_____###____________#####______;###________###______#________________##_______####________####______________(3)破解验证码(4)《线上幽灵》的作者就是用Python入侵五角大楼的2. Python的扩展库有哪些?&pycurl——URL处理pydot——绘图(相当于Android的canvas)pyevent——事件支持(相当于EventBus)reportlab——PDFsimplejson——JSON解析(相当于Gson)SQLObject——SQL数据库(相当于GreenDAO)feedparser——rss解析Kodos——正则表达式Mechanize——爬虫,数据挖掘py2exe——生成windows系统的exebashplotlib——绘制图表beautifulsoup——HTML解析pprint——文字输出的美化logging——Log统一管理3.书中作者整合开发的便携式运行环境WinPython(光盘中),你认为是否方便使用?WinPython 是专用于科学计算的Python开发环境,尽管功能不如Matlab和Anaconda丰富,但是体积轻小,使用便捷
本帖最后由 东风玖哥 于
19:18 编辑
1.可以用 Python 编程语言做哪些神奇好玩的事情?
Python是一种解释型、面向对象、动态的高级程序设计语言,Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。
2. Python的扩展库有哪些?
Python科学计算中最常用的扩展库NumPy、SciPy、matplotlib、Pandas、SymPy、TTK、Mayavi、OpenCV、Cython,涉及数值计算、界面制作、三维可视化、图像处理、提高运算效率等多方面的内容。
3.书中作者整合开发的便携式运行环境WinPython(光盘中),你认为是否方便使用?
WinPython只能在Windows系统中运行,提供了一个安装扩展库的WinPython Control Panel界面程序,通过它可以安装Python的各种扩展库。当然最好还能够提供更多的支持不同系统的开发环境工具。
首先感谢论坛和出版社提供的这次机会,经过试读是我受益匪浅,对于那些从来没有学习过编程或者并非计算机专业的编程学习者而言,Python 是最好的选择之一。Python 第一次学习Python,我只用了不到二十分钟的时间,站在书店里把一本教初学编程的人学习Python 的书翻了一遍。也是从那时起,我开始被这种神奇的语言吸引。下面就3个问题进行总结如下:&1.可以用 Python 编程语言做哪些神奇好玩的事情?&====================================================================&===========================================&A:使用PyGame做游戏,这个比较有意思,Pygame还是不错的,但只适合做小游戏。用Pygame写个植物大战僵尸还是可以的。&B:Python作为黑客第一语言,在黑客领域的应用就不多说了。&C:Python做网站,有几个web框架 WebFrameworks。&D:使用Python自己做网络爬虫,从网站下载文章和美女图片&E:,比如手写字识别,人脸识别,垃圾邮件处理等。====================================================================&&&============================================2. Python的扩展库有哪些?&====================================================================&Python 是一种功能丰富的语言,它拥有一个强大的基本类库和数量众多的第三方扩展.Python 一大优势之一便是它的可扩展性,在此基础上衍生出了数量庞大的第三方扩展库,主要有如下:&pycurl——URL处理&pydot——绘图(相当于Android的canvas)&pyevent——事件支持(相当于EventBus)&reportlab——PDF&simplejson——JSON解析(相当于Gson)&SQLObject——SQL数据库(相当于GreenDAO)&feedparser——rss解析&Kodos——正则表达式&Mechanize——爬虫,数据挖掘&py2exe——生成windows系统的exe&bashplotlib——绘制图表&beautifulsoup——HTML解析&pprint——文字输出的美化&logging——Log统一管理&bashplotlib----绘图,这个做数据分析极有用&PyMC----用于贝叶斯分析&beautifulsoup----网页解析,爬虫利器&re---正则表达式&pprint---漂亮的输出&logging----日志&urllib/urllib2/httplib---- http库,网页解析&其它的太多了,不一一列举了,我觉得python之所以强大是因为它有无穷的扩展库,这些扩展库为我们能够进行更快开发提供的相当的便利.&====================================================================&============================================&3.书中作者整合开发的便携式运行环境WinPython(光盘中),你认为是否方便使用?&====================================================================&============================================WinPython 是由 Python(x,y) 的作者开发,功能很全,是专用于科学计算的开发环境,甚至一定程序上超过了Matlab,做科学计算是再合适不过了。它包含了常用的科学计算工具包numpy,scipy,sklearn,matplotlib,还要调用C动态库的扩展包ctypes。WinPython只能在Windows系统中运行,提供了一个安装扩展库的WinPython Control Panel界面程序,通过它可以安装Python的各种扩展库。当然最好还能够提供更多的支持不同系统的开发环境工具。有运行环境更便于学习与参考,对每个学习具有事半功倍的效果。
=================================================================================================================&Python是一种面向对象、直译式计算机程序设计语言,也是一种功能强大的通用型语言。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务,总之,Python是一种使用广泛又便捷的语言,常常能带给使用者惊喜。&
最后再次感谢论坛与出版社提供的这次机会,真心希望可以获得这本书。
本帖最后由 才子不才 于
23:21 编辑&p&&b&最近研究了一下协同过滤算法,其中主要为基于内容与基于用户的两种推荐算法,真实案例中往往会结合两种算法,来实现整体目标最优。本文首先介绍了User CF和Item CF的基本概念,然后介绍了基于内容和用户的协同过滤算法的主要区别是什么。若有不妥的地方,欢迎指出,共同学习。&/b&&/p&&ol&&li&User CF:基于用户的协同过滤算法&/li&&li&Item CF:基于内容的协同过滤算法&/li&&li&User CF vs. Item CF&/li&&ol&&li&计算复杂度&/li&&li&适用场景&/li&&li&推荐多样性和精度&/li&&/ol&&/ol&&h2&&b&User CF:基于用户的协同过滤算法&/b&&/h2&&p&基于用户的 CF 的基本思想相当简单,基于用户对物品的偏好找到相邻邻居用户,然后将邻居用户喜欢的推荐给当前用户。计算上,就是&b&将一个用户对所有物品的偏好作为一个向量&/b&来计算用户之间的相似度,找到 K 邻居后,根据邻居的相似度权重以及他们对物品的偏好,预测当前用户没有偏好的未涉及物品,计算得到一个排序的物品列表作为推荐。图 2 给出了一个例子,对于用户 A,根据用户的历史偏好,这里只计算得到一个邻居 – 用户 C,然后将用户 C 喜欢的物品 D 推荐给用户 A。&/p&&h2&&b&Item CF:基于内容的协同过滤算法&/b&&/h2&&p&基于物品的 CF 的原理和基于用户的 CF 类似,只是在计算邻居时采用物品本身,而不是从用户的角度,即基于用户对物品的偏好找到相似的物品,然后根据用户的历史偏好,推荐相似的物品给他。从计算的角度看,就是&b&将所有用户对某个物品的偏好作为一个向量&/b&来计算物品之间的相似度,得到物品的相似物品后,根据用户历史的偏好预测当前用户还没有表示偏好的物品,计算得到一个排序的物品列表作为推荐。图 3 给出了一个例子,对于物品 A,根据所有用户的历史偏好,喜欢物品 A 的用户都喜欢物品 C,得出物品 A 和物品 C 比较相似,而用户 C 喜欢物品 A,那么可以推断出用户 C 可能也喜欢物品 C。&/p&&h2&&b&User CF vs. Item CF&/b&&/h2&&p&&b&计算复杂度&/b&&/p&&p&user-based 的缺点也比较明显,相似用户的稳定度要小于物品的稳定度程度,所以需要在线更新。 而item-based离线计算就能够获得比较好的复杂度。&/p&&ul&&li&电商网站的商品推荐:Item CF 从性能和复杂度上比 User CF 更优
其中的一个主要原因就是对于一个在线网站,用户的数量往往大大超过物品的数量,同时物品的数据相对稳定,因此计算物品的相似度不但计算量较小,同时也不必频繁更新。&/li&&li&新闻资讯的内容推荐:User CF 从性能和复杂度上比 Item CF 更优
对于新闻,博客或者微内容的推荐系统,情况往往是相反的,内容的数量是海量的,同时也是更新频繁的,所以单从复杂度的角度,这两个算法在不同的系统中各有优势,推荐引擎的设计者需要根据自己应用的特点选择更加合适的算法。&/li&&/ul&&p&&b&适用场景&/b&&/p&&p&user-based. 按理说更适合新闻这种,item量远大于用户的。item-based更适合item量较小的。&/p&&ul&&li&非社交网络的网站更适合Item CF&/li&&/ul&&p&在非社交网络的网站中,内容内在的联系是很重要的推荐原则,它比基于相似用户的推荐原则更加有效。比如在购书网站上,当你看一本书的时候,推荐引擎会给你推荐相关的书籍,这个推荐的重要性远远超过了网站首页对该用户的综合推荐。可以看到,在这种情况下,Item CF 的推荐成为了引导用户浏览的重要手段。同时 Item CF 便于为推荐做出解释,在一个非社交网络的网站中,给某个用户推荐一本书,同时给出的解释是某某和你有相似兴趣的人也看了这本书,这很难让用户信服,因为用户可能根本不认识那个人;但如果解释说是因为这本书和你以前看的某本书相似,用户可能就觉得合理而采纳了此推荐。&/p&&ul&&li&社交网络的网站更适合User CF&/li&&/ul&&p&相反的,在现今很流行的社交网络站点中,User CF 是一个更不错的选择,User CF 加上社会网络信息,可以增加用户对推荐解释的信服程度。&/p&&p&&b&推荐多样性和精度&/b&&/p&&p&研究推荐引擎的学者们在相同的数据集合上分别用 User CF 和 Item CF 计算推荐结果,发现推荐列表中,只有 50% 是一样的,还有 50% 完全不同。但是这两个算法确有相似的精度,所以可以说,这两个算法是很互补的。&/p&&blockquote&从单一用户角度,肯定是user-based 更加多样,但同时也更加容易推荐比较热的东西。item-based,是根据用户的历史记录来推荐,所以相对来说,更容易拟合。item-based, 对于新用户(读取量下于10的时候的推荐效果更好。)。 item-based ,更容易发现长尾数据,因为只要有一些用户买了这个长尾的物品,那么这两个物品就有很高的相关性).&/blockquote&&ul&&li&单个用户:User CF的多样性&Item CF的多样性&/li&&/ul&&p&就是说给定一个用户,查看系统给出的推荐列表是否多样,也就是要比较推荐列表中的物品之间两两的相似度,不难想到,对这种度量方法,Item CF 的多样性显然不如 User CF 的好,因为 Item CF 的推荐就是和以前看的东西最相似的。&/p&&ul&&li&整个系统:Item CF的多样性&User CF的多样性&/li&&/ul&&p&这种情况下,也被称为覆盖率 (Coverage),它是指一个推荐系统是否能够提供给所有用户丰富的选择。&/p&&p&在这种指标下,Item CF 的多样性要远远好于 User CF, 因为 User CF 总是倾向于推荐热门的,从另一个侧面看,也就是说,Item CF 的推荐有很好的新颖性,很擅长推荐长尾里的物品。所以,尽管大多数情况,Item CF 的精度略小于 User CF, 但如果考虑多样性,Item CF 却比 User CF 好很多。 &/p&&p&&b&本文主要整理自POLL的笔记:&/b&&a href=&///?target=http%3A///102819/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&协同过滤(CF)算法详解和实现 &i class=&icon-external&&&/i&&/a&,有兴趣的同学可以继续深入阅读。&/p&
最近研究了一下协同过滤算法,其中主要为基于内容与基于用户的两种推荐算法,真实案例中往往会结合两种算法,来实现整体目标最优。本文首先介绍了User CF和Item CF的基本概念,然后介绍了基于内容和用户的协同过滤算法的主要区别是什么。若有不妥的地方,欢…
&p&谢邀。我并非搞推荐算法的,只是给你些建议,仅供参考呀。&/p&&p&你可以去搜索下阿里巴巴的PAI平台,里面有一个阿里对外发布的协同过滤算法Etrec;另外2016年的时候有一个影响比较大的推荐框架 wide and depp,供你参考&/p&&p&&a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[] Wide & Deep Learning for Recommender Systems&i class=&icon-external&&&/i&&/a&&/p&
谢邀。我并非搞推荐算法的,只是给你些建议,仅供参考呀。你可以去搜索下阿里巴巴的PAI平台,里面有一个阿里对外发布的协同过滤算法Etrec;另外2016年的时候有一个影响比较大的推荐框架 wide and depp,供你参考
&figure&&img src=&/50/v2-82cc73ef1f0_b.jpg& data-rawwidth=&637& data-rawheight=&372& class=&origin_image zh-lightbox-thumb& width=&637& data-original=&/50/v2-82cc73ef1f0_r.jpg&&&/figure&&p&推荐算法具有非常多的应用场景和商业价值,因此对推荐算法值得好好研究。推荐算法种类很多,但是目前应用最广泛的应该是协同过滤类别的推荐算法,本文就对协同过滤类别的推荐算法做一个概括总结,后续也会对一些典型的协同过滤推荐算法做原理总结。&/p&&h1&1. 推荐算法概述&/h1&&p&推荐算法是非常古老的,在机器学习还没有兴起的时候就有需求和应用了。概括来说,可以分为以下5种:&/p&&p&1)&strong&基于内容的推荐&/strong&:这一类一般依赖于自然语言处理NLP的一些知识,通过挖掘文本的TF-IDF特征向量,来得到用户的偏好,进而做推荐。这类推荐算法可以找到用户独特的小众喜好,而且还有较好的解释性。这一类由于需要NLP的基础,本文就不多讲,在后面专门讲NLP的时候再讨论。&/p&&p&2)&strong&协调过滤推荐&/strong&:本文后面要专门讲的内容。协调过滤是推荐算法中目前最主流的种类,花样繁多,在工业界已经有了很多广泛的应用。它的优点是不需要太多特定领域的知识,可以通过基于统计的机器学习算法来得到较好的推荐效果。最大的优点是工程上容易实现,可以方便应用到产品中。目前绝大多数实际应用的推荐算法都是协同过滤推荐算法。&/p&&p&3)&strong&混合推荐&/strong&:这个类似我们机器学习中的集成学习,博才众长,通过多个推荐算法的结合,得到一个更好的推荐算法,起到三个臭皮匠顶一个诸葛亮的作用。比如通过建立多个推荐算法的模型,最后用投票法决定最终的推荐结果。混合推荐理论上不会比单一任何一种推荐算法差,但是使用混合推荐,算法复杂度就提高了,在实际应用中有使用,但是并没有单一的协调过滤推荐算法,比如逻辑回归之类的二分类推荐算法广泛。&/p&&p&4)&strong&基于规则的推荐&/strong&:这类算法常见的比如基于最多用户点击,最多用户浏览等,属于大众型的推荐方法,在目前的大数据时代并不主流。&/p&&p&5)&strong&基于人口统计信息的推荐&/strong&:这一类是最简单的推荐算法了,它只是简单的根据系统用户的基本信息发现用户的相关程度,然后进行推荐,目前在大型系统中已经较少使用。&/p&&br&&figure&&img src=&/50/v2-96ab7c82c2_b.png& data-rawwidth=&669& data-rawheight=&161& class=&origin_image zh-lightbox-thumb& width=&669& data-original=&/50/v2-96ab7c82c2_r.png&&&/figure&&br&&h1&2. 协调过滤推荐概述&/h1&&p&协同过滤(Collaborative Filtering)作为推荐算法中最经典的类型,包括在线的协同和离线的过滤两部分。所谓在线协同,就是通过在线数据找到用户可能喜欢的物品,而离线过滤,则是过滤掉一些不值得推荐的数据,比比如推荐值评分低的数据,或者虽然推荐值高但是用户已经购买的数据。&/p&&p&协同过滤的模型一般为m个物品,m个用户的数据,只有部分用户和部分数据之间是有评分数据的,其它部分评分是空白,此时我们要用已有的部分稀疏数据来预测那些空白的物品和数据之间的评分关系,找到最高评分的物品推荐给用户。&/p&&p&一般来说,协同过滤推荐分为三种类型。第一种是&strong&基于用户(user-based)的协同过滤&/strong&,第二种是&strong&基于项目(item-based)的协同过滤&/strong&,第三种是&strong&基于模型(model based)的协同过滤&/strong&。&/p&&p&基于用户(user-based)的协同过滤主要考虑的是用户和用户之间的相似度,只要找出相似用户喜欢的物品,并预测目标用户对对应物品的评分,就可以找到评分最高的若干个物品推荐给用户。而基于项目(item-based)的协同过滤和基于用户的协同过滤类似,只不过这时我们转向找到物品和物品之间的相似度,只有找到了目标用户对某些物品的评分,那么我们就可以对相似度高的类似物品进行预测,将评分最高的若干个相似物品推荐给用户。比如你在网上买了一本机器学习相关的书,网站马上会推荐一堆机器学习,大数据相关的书给你,这里就明显用到了基于项目的协同过滤思想。&/p&&p&我们可以简单比较下基于用户的协同过滤和基于项目的协同过滤:基于用户的协同过滤需要在线找用户和用户之间的相似度关系,计算复杂度肯定会比基于基于项目的协同过滤高。但是可以帮助用户找到新类别的有惊喜的物品。而基于项目的协同过滤,由于考虑的物品的相似性一段时间不会改变,因此可以很容易的离线计算,准确度一般也可以接受,但是推荐的多样性来说,就很难带给用户惊喜了。一般对于小型的推荐系统来说,基于项目的协同过滤肯定是主流。但是如果是大型的推荐系统来说,则可以考虑基于用户的协同过滤,当然更加可以考虑我们的第三种类型,基于模型的协同过滤。&/p&&p&基于模型(model based)的协同过滤是目前最主流的协同过滤类型了,我们的一大堆机器学习算法也可以在这里找到用武之地。下面我们就重点介绍基于模型的协同过滤。&/p&&h1&3. 基于模型的协同过滤&/h1&&p&基于模型的协同过滤作为目前最主流的协同过滤类型,其相关算法可以写一本书了,当然我们这里主要是对其思想做有一个归类概括。我们的问题是这样的m个物品,m个用户的数据,只有部分用户和部分数据之间是有评分数据的,其它部分评分是空白,此时我们要用已有的部分稀疏数据来预测那些空白的物品和数据之间的评分关系,找到最高评分的物品推荐给用户。&/p&&p&对于这个问题,用机器学习的思想来建模解决,主流的方法可以分为:用关联算法,聚类算法,分类算法,回归算法,矩阵分解,神经网络,图模型以及隐语义模型来解决。下面我们分别加以介绍。&/p&&h2&3.1 用关联算法做协同过滤&/h2&&p&一般我们可以找出用户购买的所有物品数据里频繁出现的项集活序列,来做频繁集挖掘,找到满足支持度阈值的关联物品的频繁N项集或者序列。如果用户购买了频繁N项集或者序列里的部分物品,那么我们可以将频繁项集或序列里的其他物品按一定的评分准则推荐给用户,这个评分准则可以包括支持度,置信度和提升度等。&/p&&p&常用的关联推荐算法有Apriori,FP Tree和PrefixSpan。如果大家不熟悉这些算法,可以参考我的另外几篇文章:&/p&&p&Apriori算法原理总结:&a href=&/?target=http%3A///pinard/p/6293298.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Apriori算法原理总结 - 刘建平Pinard - 博客园&i class=&icon-external&&&/i&&/a&&/p&&p&FP Tree算法原理总结:&a href=&/?target=http%3A///pinard/p/6307064.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&FP Tree算法原理总结 - 刘建平Pinard - 博客园&i class=&icon-external&&&/i&&/a&&/p&&p&PrefixSpan算法原理总结:&a href=&/?target=http%3A///pinard/p/6323182.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&PrefixSpan算法原理总结 - 刘建平Pinard - 博客园&i class=&icon-external&&&/i&&/a&&/p&&h2&3.2 用聚类算法做协同过滤&/h2&&p&用聚类算法做协同过滤就和前面的基于用户或者项目的协同过滤有些类似了。我们可以按照用户或者按照物品基于一定的距离度量来进行聚类。如果基于用户聚类,则可以将用户按照一定距离度量方式分成不同的目标人群,将同样目标人群评分高的物品推荐给目标用户。基于物品聚类的话,则是将用户评分高物品的相似同类物品推荐给用户。&/p&&p&常用的聚类推荐算法有K-Means, BIRCH, DBSCAN和谱聚类,如果大家不熟悉这些算法,可以参考我的另外几篇文章:&/p&&p&K-Means聚类算法原理:&a href=&/?target=http%3A///pinard/p/6164214.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&K-Means聚类算法原理 - 刘建平Pinard - 博客园&i class=&icon-external&&&/i&&/a&&/p&&p&BIRCH聚类算法原理:&a href=&/?target=http%3A///pinard/p/6179132.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&BIRCH聚类算法原理 - 刘建平Pinard - 博客园&i class=&icon-external&&&/i&&/a&&/p&&p&DBSCAN密度聚类算法:&a href=&/?target=http%3A///pinard/p/6208966.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&DBSCAN密度聚类算法 - 刘建平Pinard - 博客园&i class=&icon-external&&&/i&&/a&&/p&&p&谱聚类(spectral clustering)原理总结:&a href=&/?target=http%3A///pinard/p/6221564.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&谱聚类(spectral clustering)原理总结&i class=&icon-external&&&/i&&/a&&br&&/p&&br&&h2&3.3 用分类算法做协同过滤&/h2&&p&如果我们根据用户评分的高低,将分数分成几段的话,则这个问题变成分类问题。比如最直接的,设置一份评分阈值,评分高于阈值的就是推荐,评分低于阈值就是不推荐,我们将问题变成了一个二分类问题。虽然分类问题的算法多如牛毛,但是目前使用最广泛的是逻辑回归。为啥是逻辑回归而不是看起来更加高大上的比如支持向量机呢?因为逻辑回归的解释性比较强,每个物品是否推荐我们都有一个明确的概率放在这,同时可以对数据的特征做工程化,得到调优的目的。目前逻辑回归做协同过滤在BAT等大厂已经非常成熟了。&/p&&p&常见的分类推荐算法有逻辑回归和朴素贝叶斯,两者的特点是解释性很强。如果大家不熟悉这些算法,可以参考我的另外几篇文章:&/p&&p&逻辑回归原理小结:&a href=&/?target=http%3A///pinard/p/6029432.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&逻辑回归原理小结 - 刘建平Pinard - 博客园&i class=&icon-external&&&/i&&/a&&/p&&p&朴素贝叶斯算法原理小结:&a href=&/?target=http%3A///pinard/p/6069267.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&朴素贝叶斯算法原理小结 - 刘建平Pinard - 博客园&i class=&icon-external&&&/i&&/a&&/p&&br&&h2&3.4 用回归算法做协同过滤&/h2&&p&用回归算法做协同过滤比分类算法看起来更加的自然。我们的评分可以是一个连续的值而不是离散的值,通过回归模型我们可以得到目标用户对某商品的预测打分。&/p&&p&常用的回归推荐算法有Ridge回归,回归树和支持向量回归。如果大家不熟悉这些算法,可以参考我的另外几篇文章:&/p&&p&线性回归原理小结:&a href=&/?target=http%3A///pinard/p/6004041.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&线性回归原理小结 - 刘建平Pinard - 博客园&i class=&icon-external&&&/i&&/a&&/p&&p&决策树算法原理(下):&a href=&/?target=http%3A///pinard/p/6053344.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&决策树算法原理(下) - 刘建平Pinard - 博客园&i class=&icon-external&&&/i&&/a&&/p&&p&支持向量机原理(五)线性支持回归:&a href=&/?target=http%3A///pinard/p/6113120.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&支持向量机原理(五)线性支持回归 - 刘建平Pinard - 博客园&i class=&icon-external&&&/i&&/a&&/p&&br&&h2&3.5 用矩阵分解做协同过滤&/h2&&p&用矩阵分解做协同过滤是目前使用也很广泛的一种方法。由于传统的奇异值分解SVD要求矩阵不能有缺失数据,必须是稠密的,而我们的用户物品评分矩阵是一个很典型的稀疏矩阵,直接使用传统的SVD到协同过滤是比较复杂的。&/p&&p&目前主流的矩阵分解推荐算法主要是SVD的一些变种,比如FunkSVD,BiasSVD和SVD++。这些算法和传统SVD的最大区别是不再要求将矩阵分解为UΣVT&/p&&p&的形式,而变是两个低秩矩阵PTQ&/p&&p&的乘积形式。对于矩阵分解的推荐算法,后续我会专门开篇来讲。&/p&&br&&h2&3.6 用神经网络做协同过滤&/h2&&p&用神经网络乃至深度学习做协同过滤应该是以后的一个趋势。目前比较主流的用两层神经网络来做推荐算法的是限制玻尔兹曼机(RBM)。在目前的Netflix算法比赛中, RBM算法的表现很牛。当然如果用深层的神经网络来做协同过滤应该会更好,大厂商用深度学习的方法来做协同过滤应该是将来的一个趋势。后续我会专门开篇来讲讲RBM。&/p&&br&&h2&3.7
用图模型做协同过滤&/h2&&p&用图模型做协同过滤,则将用户之间的相似度放到了一个图模型里面去考虑,常用的算法是SimRank系列算法和马尔科夫模型算法。对于SimRank系列算法,它的基本思想是被相似对象引用的两个对象也具有相似性。算法思想有点类似于大名鼎鼎的PageRank。而马尔科夫模型算法当然是基于马尔科夫链了,它的基本思想是基于传导性来找出普通距离度量算法难以找出的相似性。后续我会专门开篇来讲讲SimRank系列算法。 &/p&&br&&h2&3.8 用隐语义模型做协同过滤&/h2&&p&隐语义模型主要是基于NLP的,涉及到对用户行为的语义分析来做评分推荐,主要方法有隐性语义分析LSA和隐含狄利克雷分布LDA,这些等讲NLP的再专门讲。&/p&&br&&h1&4. 协同过滤的一些新方向&/h1&&p&当然推荐算法的变革也在进行中,就算是最火爆的基于逻辑回归推荐算法也在面临被取代。哪些算法可能取代逻辑回归之类的传统协同过滤呢?下面是我的理解:&/p&&p&a)&strong& 基于集成学习的方法和混合推荐&/strong&:这个和混合推荐也靠在一起了。由于集成学习的成熟,在推荐算法上也有较好的表现。一个可能取代逻辑回归的算法是GBDT。目前GBDT在很多算法比赛都有好的表现,而有工业级的并行化实现类库。&/p&&p&b)&strong&基于矩阵分解的方法&/strong&:矩阵分解,由于方法简单,一直受到青睐。目前开始渐渐流行的矩阵分解方法有分解机(Factorization Machine)和张量分解(Tensor Factorization)。&/p&&p&c) &strong&基于深度学习的方法&/strong&:目前两层的神经网络RBM都已经有非常好的推荐算法效果,而随着深度学习和多层神经网络的兴起,以后可能推荐算法就是深度学习的天下了?目前看最火爆的是基于CNN和RNN的推荐算法。&/p&&br&&h1&5. 协同过滤总结 &/h1&&p&协同过滤作为一种经典的推荐算法种类,在工业界应用广泛,它的优点很多,模型通用性强,不需要太多对应数据领域的专业知识,工程实现简单,效果也不错。这些都是它流行的原因。&/p&&p&当然,协同过滤也有些难以避免的难题,比如令人头疼的“冷启动”问题,我们没有新用户任何数据的时候,无法较好的为新用户推荐物品。同时也没有考虑情景的差异,比如根据用户所在的场景和用户当前的情绪。当然,也无法得到一些小众的独特喜好,这块是基于内容的推荐比较擅长的。   &/p&&p&以上就是协同过滤推荐算法的一个总结,希望可以帮大家对推荐算法有一个更深的认识,并预祝大家新年快乐!&/p&&p&出处:&a href=&/?target=http%3A///pinard/p/6349233.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&协同过滤推荐算法总结 - 刘建平Pinard&i class=&icon-external&&&/i&&/a&&/p&&br&&p&&b&大家也可以加小编微信:tswenqu,进R语言中文社区 交流群。&/b&&/p&
推荐算法具有非常多的应用场景和商业价值,因此对推荐算法值得好好研究。推荐算法种类很多,但是目前应用最广泛的应该是协同过滤类别的推荐算法,本文就对协同过滤类别的推荐算法做一个概括总结,后续也会对一些典型的协同过滤推荐算法做原理总结。1. 推荐…
&figure&&img src=&/50/66fd180ad3eeedbe0eee_b.png& data-rawwidth=&529& data-rawheight=&300& class=&origin_image zh-lightbox-thumb& width=&529& data-original=&/50/66fd180ad3eeedbe0eee_r.png&&&/figure&&p&Spark入门学习资源:&a href=&/?target=https%3A///courses/%3Fcourse_type%3Dall%26tag%3DSpark& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Spark入门系列实验课程&i class=&icon-external&&&/i&&/a&。&br&&/p&&h2&一、Spark简介&/h2&&p&Spark是UC Berkeley AMP lab开发的一个集群计算的框架,类似于Hadoop,但有很多的区别。最大的优化是让计算任务的中间结果可以存储在内存中,不需要每次都写入HDFS,更适用于需要迭代的MapReduce算法场景中,可以获得更好的性能提升。例如一次&a href=&/?target=http%3A///blog//spark-officially-sets-a-new-record-in-large-scale-sorting.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&排序测试&i class=&icon-external&&&/i&&/a&中,对100TB数据进行排序,Spark比Hadoop快三倍,并且只需要十分之一的机器。Spark集群目前最大的可以达到8000节点,处理的数据达到PB级别,在互联网企业中应用非常广泛。&/p&&h2&二、Spark理论导读&/h2&&p&学习spark前推荐的理论文章:&/p&&p&2.1 &a href=&/question//answer/& class=&internal&&大数据技术生态介绍&/a&&/p&&p&写的很好的一篇大数据技术生态圈介绍文章,层次条理分明,内容详尽。推荐必读。&/p&&p&2.2 &a href=&/?target=https%3A//cwiki.apache.org/confluence/display/SPARK/Powered%2BBy%2BSpark& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&谁在使用Spark?&i class=&icon-external&&&/i&&/a&&/p&&p&这个页面列举了部分使用Spark的公司和组织,有使用场景的介绍,可做简单了解。&/p&&p&2.3 &a href=&/question//answer/& class=&internal&&Spark与Hadoop对比&/a&&/p&&p&这篇介绍是我看到过最详尽的,讲到很多Spark基本原理和对比Hadoop的优势,推荐必读。&/p&&h1&三、Spark入门实践教程&/h1&&p&有很多想要学习Spark的小伙伴都在自学,实验楼最近整理了一系列的spark入门教程,并提供线上配套的练习环境,希望对Spark学习者有所帮助~&/p&&p&Spark线上实验环境:&br&&/p&&p&&figure&&img src=&/d68818b5eba7f0b807a11b_b.png& data-rawwidth=&1362& data-rawheight=&615& class=&origin_image zh-lightbox-thumb& width=&1362& data-original=&/d68818b5eba7f0b807a11b_r.png&&&/figure& Spark生态圈(图来自&a href=&/?target=http%3A//xiguada.org/spark/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&这里&i class=&icon-external&&&/i&&/a&):&br&&/p&&p&&figure&&img src=&/853b7dbbb0af6f14c1fe_b.png& data-rawwidth=&589& data-rawheight=&281& class=&origin_image zh-lightbox-thumb& width=&589& data-original=&/853b7dbbb0af6f14c1fe_r.png&&&/figure&下面依照上图,对Spark入门系列课程做介绍。&/p&&p&3.1 &a href=&/?target=https%3A///courses/586& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Spark 讲堂之 SQL 入门&i class=&icon-external&&&/i&&/a&&/p&&p&Spark SQL 是一个分布式查询引擎,在这个教程里你可以学习到 Spark SQL 的基础知识和常用 API 用法,了解常用的数学和统计函数。最后将通过一个分析股票价格与石油价格关系的实例进一步学习如何利用 Spark SQL 分析数据。&/p&&p&3.2 &a href=&/?target=https%3A///courses/571& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Spark 讲堂之 Streaming 入门&i class=&icon-external&&&/i&&/a&&/p&&p&Spark Streaming 适用于实时处理流式数据。该教程带你学习 Spark Streaming 的工作机制,了解 Streaming 应用的基本结构,以及如何在 Streaming 应用中附加 SQL 查询。&/p&&p&Streaming图:&/p&&br&&figure&&img src=&/dbca5b0c77e2e7d8b36b3dd_b.jpg& data-rawwidth=&580& data-rawheight=&214& class=&origin_image zh-lightbox-thumb& width=&580& data-original=&/dbca5b0c77e2e7d8b36b3dd_r.jpg&&&/figure&&p&3.3 &a href=&/?target=https%3A///courses/600& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Spark 讲堂之 MLlib 入门&i class=&icon-external&&&/i&&/a&&/p&&p&这个教程你可以了解到 Spark 的 MLlib 库相关知识,掌握 MLlib 的几个基本数据类型,并且可以动手练习如何通过机器学习中的一些算法来推荐电影。&/p&&p&3.4 &a href=&/?target=https%3A///courses/529& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Spark 讲堂之 GraphX 入门&i class=&icon-external&&&/i&&/a&&/p&&p&GraphX是Spark用于解决图和并行图计算问题的新组件。GraphX通过RDD的扩展,在其中引入了一个新的图抽象,即顶点和边带有特性的有向多重图,提供了一些基本运算符和优化了的Pregel API,来支持图计算。&/p&&p&3.5 &a href=&/?target=https%3A///courses/534& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Spark 讲堂之 GraphX 图算法&i class=&icon-external&&&/i&&/a&&/p&&p&GraphX包含了一些用于简化图分析任务的的图计算算法。你可以通过图操作符来直接调用其中的方法。这个教程中讲解这些算法的含义,以及如何实现它们。&/p&&p&3.6 &a href=&/?target=https%3A///courses/615& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Spark 讲堂之 SparkR 入门&i class=&icon-external&&&/i&&/a&&/p&&p&SparkR是一个提供轻量级前端的R包,集成了Spark的分布式计算和存储等特性。这个教程将以较为轻松的方式带你学习如何在SparkR中创建和操作DataFrame,如何应用SQL查询和机器学习算法等。&/p&&p&3.7 &a href=&/?target=https%3A///courses/536& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Spark 讲堂之 DataFrame 入门&i class=&icon-external&&&/i&&/a&&/p&&p&DataFrame让Spark具备了处理大规模结构化数据的能力,在比原有的RDD转化方式更加易用、计算性能更好。这个教程通过一个简单的数据集分析任务,讲解DataFrame的由来、构建方式以及一些常用操作。&/p&&p&3.8 &a href=&/?target=https%3A///courses/543& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Spark 讲堂之 DataFrame 详解&i class=&icon-external&&&/i&&/a&&/p&&p&这个教程通过更加深入的讲解,使用真实的数据集,并结合实际问题分析过程作为引导,旨在让Spark学习者掌握DataFrame的高级操作技巧,如创建DataFrame的两种方式、UDF等。&/p&&p&3.9 &a href=&/?target=https%3A///courses/575& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Sqoop 数据迁移工具&i class=&icon-external&&&/i&&/a&&/p&&p&Sqoop 是大数据环境中重要的是数据转换工具,这个教程对Sqoop 的安装配置进行了详细的讲解,并列举了Sqoop 在数据迁移过程中基本操作指令。&/p&&p&以上9个教程比较适合有一定的Spark基础的人学习。&/p&&p&3.10 &a href=&/?target=https%3A///courses/456& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Spark 大数据动手实验&i class=&icon-external&&&/i&&/a&&/p&&p&这个教程是一个系统性的教程,总共15个小节,带你亲身体验Spark大数据分析的魅力,课程中可以实践:&br&Spark,Scala,Python,Spark Streaming,SparkSQL,MLlib,GraphX,IndexedRDD,SparkR,Tachyon,KeystoneML,BlinkDB等技术点,无疑是学习Spark最快的上手教程!&/p&&p&这个教程较为系统,非常适合零基础的人进行学习。&/p&&p&希望以上10个教程可以帮助想入门Spark的人技术更上一层楼。&/p&
Spark入门学习资源:。 一、Spark简介Spark是UC Berkeley AMP lab开发的一个集群计算的框架,类似于Hadoop,但有很多的区别。最大的优化是让计算任务的中间结果可以存储在内存中,不需要每次都写入HDFS,更适用于需要迭代的MapReduce…
&h2&协同过滤&/h2&&blockquote&算法介绍:&/blockquote&&p&协同过滤常被用于推荐系统。这类技术目标在于填充“用户-商品”联系矩阵中的缺失项。Spark.ml目前支持基于模型的协同过滤,其中用户和商品以少量的潜在因子来描述,用以预测缺失项。Spark.ml使用交替最小二乘(ALS)算法来学习这些潜在因子。&/p&&p&*注意基于DataFrame的ALS接口目前仅支持整数型的用户和商品编号。&/p&&p&显式与隐式反馈&/p&&p&基于矩阵分解的协同过滤的标准方法中,“用户-商品”矩阵中的条目是用户给予商品的显式偏好,例如,用户给电影评级。然而在现实世界中使用时,我们常常只能访问隐式反馈(如意见、点击、购买、喜欢以及分享等),在spark.ml中我们使用“隐式反馈数据集的协同过滤“来处理这类数据。本质上来说它不是直接对评分矩阵进行建模,而是将数据当作数值来看待,这些数值代表用户行为的观察值(如点击次数,用户观看一部电影的持续时间)。这些数值被用来衡量用户偏好观察值的置信水平,而不是显式地给商品一个评分。然后,模型用来寻找可以用来预测用户对商品预期偏好的潜在因子。&/p&&p&正则化参数&/p&&p&我们调整正则化参数regParam来解决用户在更新用户因子时产生新评分或者商品更新商品因子时收到的新评分带来的最小二乘问题。这个方法叫做“ALS-WR”它降低regParam对数据集规模的依赖,所以我们可以将从部分子集中学习到的最佳参数应用到整个数据集中时获得同样的性能。&/p&&blockquote&参数:&/blockquote&&p&alpha:&/p&&p&类型:双精度型。&/p&&p&含义:隐式偏好中的alpha参数(非负)。&/p&&p&checkpointInterval:&/p&&p&类型:整数型。&/p&&p&含义:设置检查点间隔(&=1),或不设置检查点(-1)。&/p&&p&implicitPrefs:&/p&&p&类型:布尔型。&/p&&p&含义:特征列名。&/p&&p&itemCol:&/p&&p&类型:字符串型。&/p&&p&含义:商品编号列名。&/p&&p&maxIter:&/p&&p&类型:整数型。&/p&&p&含义:迭代次数(&=0)。&/p&&p&nonnegative:&/p&&p&类型:布尔型。&/p&&p&含义:是否需要非负约束。&/p&&p&numItemBlocks:&/p&&p&类型:整数型。&/p&&p&含义:商品数目(正数)。&/p&&p&numUserBlocks:&/p&&p&类型:整数型。&/p&&p&含义:用户数目(正数)。&/p&&p&predictionCol:&/p&&p&类型:字符串型。&/p&&p&含义:预测结果列名。&/p&&p&rank:&/p&&p&类型:整数型。&/p&&p&含义:分解矩阵的排名(正数)。&/p&&p&ratingCol:&/p&&p&类型:字符串型。&/p&&p&含义:评分列名。&/p&&p&regParam:&/p&&p&类型:双精度型。&/p&&p&含义:正则化参数(&=0)。&/p&&p&seed:&/p&&p&类型:长整型。&/p&&p&含义:随机种子。&/p&&p&userCol:&/p&&p&类型:字符串型。&/p&&p&含义:用户列名。&/p&&blockquote&调用示例:&/blockquote&&p&下面的例子中,我们从&a href=&/?target=http%3A//grouplens.org/datasets/movielens/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&MovieLens dataset&i class=&icon-external&&&/i&&/a&读入评分数据,每一行包括用户、电影、评分以及时间戳。我们默认其排序是显式的来训练ALS模型。我们通过预测评分的均方根误差来评价推荐模型。如果评分矩阵来自其他信息来源,也可将implicitPrefs设置为true来获得更好的结果。&/p&&p&Scala:&/p&&div class=&highlight&&&pre&&code class=&language-scala&&&span&&/span&&span class=&k&&import&/span& &span class=&nn&&org.apache.spark.ml.evaluation.RegressionEvaluator&/span&
&span class=&k&&import&/span& &span class=&nn&&org.apache.spark.ml.recommendation.ALS&/span&
&span class=&k&&case&/span& &span class=&k&&class&/span& &span class=&nc&&Rating&/span&&span class=&o&&(&/span&&span class=&n&&userId&/span&&span class=&k&&:&/span& &span class=&kt&&Int&/span&&span class=&o&&,&/span& &span class=&n&&movieId&/span&&span class=&k&&:&/span& &span class=&kt&&Int&/span&&span class=&o&&,&/span& &span class=&n&&rating&/span&&span class=&k&&:&/span& &span class=&kt&&Float&/span&&span class=&o&&,&/span& &span class=&n&&timestamp&/span&&span class=&k&&:&/span& &span class=&kt&&Long&/span&&span class=&o&&)&/span&
&span class=&k&&def&/span& &span class=&n&&parseRating&/span&&span class=&o&&(&/span&&span class=&n&&str&/span&&span class=&k&&:&/span& &span class=&kt&&String&/span&&span class=&o&&)&/span&&span class=&k&&:&/span& &span class=&kt&&Rating&/span& &span class=&o&&=&/span& &span class=&o&&{&/span&
&span class=&k&&val&/span& &span class=&n&&fields&/span& &span class=&k&&=&/span& &span class=&n&&str&/span&&span class=&o&&.&/span&&span class=&n&&split&/span&&span class=&o&&(&/span&&span class=&s&&&::&&/span&&span class=&o&&)&/span&
&span class=&n&&assert&/span&&span class=&o&&(&/span&&span class=&n&&fields&/span&&span class=&o&&.&/span&&span class=&n&&size&/span& &span class=&o&&==&/span& &span class=&mi&&4&/span&&span class=&o&&)&/span&
&span class=&nc&&Rating&/span&&span class=&o&&(&/span&&span class=&n&&fields&/span&&span class=&o&&(&/span&&span class=&mi&&0&/span&&span class=&o&&).&/span&&span class=&n&&toInt&/span&&span class=&o&&,&/span& &span class=&n&&fields&/span&&span class=&o&&(&/span&&span class=&mi&&1&/span&&span class=&o&&).&/span&&span class=&n&&toInt&/span&&span class=&o&&,&/span& &span class=&n&&fields&/span&&span class=&o&&(&/span&&span class=&mi&&2&/span&&span class=&o&&).&/span&&span class=&n&&toFloat&/span&&span class=&o&&,&/span& &span class=&n&&fields&/span&&span class=&o&&(&/span&&span class=&mi&&3&/span&&span class=&o&&).&/span&&span class=&n&&toLong&/span&&span class=&o&&)&/span&
&span class=&o&&}&/span&
&span class=&k&&val&/span& &span class=&n&&ratings&/span& &span class=&k&&=&/span& &span class=&n&&spark&/span&&span class=&o&&.&/span&&span class=&n&&read&/span&&span class=&o&&.&/span&&span class=&n&&textFile&/span&&span class=&o&&(&/span&&span class=&s&&&data/mllib/als/sample_movielens_ratings.txt&&/span&&span class=&o&&)&/span&
&span class=&o&&.&/span&&span class=&n&&map&/span&&span class=&o&&(&/span&&span class=&n&&parseRating&/span&&span class=&o&&)&/span&
&span class=&o&&.&/span&&span class=&n&&toDF&/span&&span class=&o&&()&/span&
&span class=&k&&val&/span& &span class=&nc&&Array&/span&&span class=&o&&(&/span&&span class=&n&&training&/span&&span class=&o&&,&/span& &span class=&n&&test&/span&&span class=&o&&)&/span& &span class=&k&&=&/span& &span class=&n&&ratings&/span&&span class=&o&&.&/span&&span class=&n&&randomSplit&/span&&span class=&o&&(&/span&&span class=&nc&&Array&/span&&span class=&o&&(&/span&&span class=&mf&&0.8&/span&&span class=&o&&,&/span& &span class=&mf&&0.2&/span&&span class=&o&&))&/span&
&span class=&c1&&// Build the recommendation model using ALS on the training data&/span&
&span class=&k&&val&/span& &span class=&n&&als&/span& &span class=&k&&=&/span& &span class=&k&&new&/span& &span class=&nc&&ALS&/span&&span class=&o&&()&/span&
&span class=&o&&.&/span&&span class=&n&&setMaxIter&/span&&span class=&o&&(&/span&&span class=&mi&&5&/span&&span class=&o&&)&/span&
&span class=&o&&.&/span&&span class=&n&&setRegParam&/span&&span class=&o&&(&/span&&span class=&mf&&0.01&/span&&span class=&o&&)&/span&
&span class=&o&&.&/span&&span class=&n&&setUserCol&/span&&span class=&o&&(&/span&&span class=&s&&&userId&&/span&&span class=&o&&)&/span&
&span class=&o&&.&/span&&span class=&n&&setItemCol&/span&&span class=&o&&(&/span&&span class=&s&&&movieId&&/span&&span class=&o&&)&/span&
&span class=&o&&.&/span&&span class=&n&&setRatingCol&/span&&span class=&o&&(&/span&&span class=&s&&&rating&&/span&&span class=&o&&)&/span&
&span class=&k&&val&/span& &span class=&n&&model&/span& &span class=&k&&=&/span& &span class=&n&&als&/span&&span class=&o&&.&/span&&span class=&n&&fit&/span&&span class=&o&&(&/span&&span class=&n&&training&/span&&span class=&o&&)&/span&
&span class=&c1&&// Evaluate the model by computing the RMSE on the test data&/span&
&span class=&k&&val&/span& &span class=&n&&predictions&/span& &span class=&k&&=&/span& &span class=&n&&model&/span&&span class=&o&&.&/span&&span class=&n&&transform&/span&&span class=&o&&(&/span&&span class=&n&&test&/span&&span class=&o&&)&/span&
&span class=&k&&val&/span& &span class=&n&&evaluator&/span& &span class=&k&&=&/span& &span class=&k&&new&/span& &span class=&nc&&RegressionEvaluator&/span&&span class=&o&&()&/span&
&span class=&o&&.&/span&&span class=&n&&setMetricName&/span&&span class=&o&&(&/span&&span class=&s&&&rmse&&/span&&span class=&o&&)&/span&
&span class=&o&&.&/span&&span class=&n&&setLabelCol&/span&&span class=&o&&(&/span&&span class=&s&&&rating&&/span&&span class=&o&&)&/span&
&span class=&o&&.&/span&&span class=&n&&setPredictionCol&/span&&span class=&o&&(&/span&&span class=&s&&&prediction&&/span&&span class=&o&&)&/span&
&span class=&k&&val&/span& &span class=&n&&rmse&/span& &span class=&k&&=&/span& &span class=&n&&evaluator&/span&&span class=&o&&.&/span&&span class=&n&&evaluate&/span&&span class=&o&&(&/span&&span class=&n&&predictions&/span&&span class=&o&&)&/span&
&span class=&n&&println&/span&&span class=&o&&(&/span&&span class=&s&&s&Root-mean-square error = &/span&&span class=&si&&$rmse&/span&&span class=&s&&&&/span&&span class=&o&&)&/span&
&/code&&/pre&&/div&&p&Java:&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&kn&&import&/span& &span class=&nn&&java.io.Serializable&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&org.apache.spark.api.java.JavaRDD&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&org.apache.spark.api.java.function.Function&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&org.apache.spark.ml.evaluation.RegressionEvaluator&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&org.apache.spark.ml.recommendation.ALS&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&org.apache.spark.ml.recommendation.ALSModel&/span&&span class=&o&&;&/span&
&span class=&kd&&public&/span& &span class=&kd&&static&/span& &span class=&kd&&class&/span& &span class=&nc&&Rating&/span& &span class=&kd&&implements&/span& &span class=&n&&Serializable&/span& &span class=&o&&{&/span&
&span class=&kd&&private&/span& &span class=&kt&&int&/span& &span class=&n&&userId&/span&&span class=&o&&;&/span&
&span class=&kd&&private&/span& &span class=&kt&&int&/span& &span class=&n&&movieId&/span&&span class=&o&&;&/span&
&span class=&kd&&private&/span& &span class=&kt&&float&/span& &span class=&n&&rating&/span&&span class=&o&&;&/span&
&span class=&kd&&private&/span& &span class=&kt&&long&/span& &span class=&n&&timestamp&/span&&span class=&o&&;&/span&
&span class=&kd&&public&/span& &span class=&nf&&Rating&/span&&span class=&o&&()&/span& &span class=&o&&{}&/span&
&span class=&kd&&public&/span& &span class=&nf&&Rating&/span&&span class=&o&&(&/span&&span class=&kt&&int&/span& &span class=&n&&userId&/span&&span class=&o&&,&/span& &span class=&kt&&int&/span& &span class=&n&&movieId&/span&&span class=&o&&,&/span& &span class=&kt&&float&/span& &span class=&n&&rating&/span&&span class=&o&&,&/span& &span class=&kt&&long&/span& &span class=&n&&timestamp&/span&&span class=&o&&)&/span& &span class=&o&&{&/span&
&span class=&k&&this&/span&&span class=&o&&.&/span&&span class=&na&&userId&/span& &span class=&o&&=&/span& &span class=&n&&userId&/span&&span class=&o&&;&/span&
&span class=&k&&this&/span&&span class=&o&&.&/span&&span class=&na&&movieId&/span& &span class=&o&&=&/span& &span class=&n&&movieId&/span&&span class=&o&&;&/span&
&span class=&k&&this&/span&&span class=&o&&.&/span&&span class=&na&&rating&/span& &span class=&o&&=&/span& &span class=&n&&rating&/span&&span class=&o&&;&/span&
&span class=&k&&this&/span&&span class=&o&&.&/span&&span class=&na&&timestamp&/span& &span class=&o&&=&/span& &span class=&n&&timestamp&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&
&span class=&kd&&public&/span& &span class=&kt&&int&/span& &span class=&nf&&getUserId&/span&&span class=&o&&()&/span& &span class=&o&&{&/span&
&span class=&k&&return&/span& &span class=&n&&userId&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&
&span class=&kd&&public&/span& &span class=&kt&&int&/span& &span class=&nf&&getMovieId&/span&&span class=&o&&()&/span& &span class=&o&&{&/span&
&span class=&k&&return&/span& &span class=&n&&movieId&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&
&span class=&kd&&public&/span& &span class=&kt&&float&/span& &span class=&nf&&getRating&/span&&span class=&o&&()&/span& &span class=&o&&{&/span&
&span class=&k&&return&/span& &span class=&n&&rating&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&
&span class=&kd&&public&/span& &span class=&kt&&long&/span& &span class=&nf&&getTimestamp&/span&&span class=&o&&()&/span& &span class=&o&&{&/span&
&span class=&k&&return&/span& &span class=&n&&timestamp&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&
&span class=&kd&&public&/span& &span class=&kd&&static&/span& &span class=&n&&Rating&/span& &span class=&nf&&parseRating&/span&&span class=&o&&(&/span&&span class=&n&&String&/span& &span class=&n&&str&/span&&span class=&o&&)&/span& &span class=&o&&{&/span&
&span class=&n&&String&/span&&span class=&o&&[]&/span& &span class=&n&&fields&/span& &span class=&o&&=&/span& &span class=&n&&str&/span&&span class=&o&&.&/span&&span class=&na&&split&/span&&span class=&o&&(&/span&&span class=&s&&&::&&/span&&span class=&o&&);&/span&
&span class=&k&&if&/span& &span class=&o&&(&/span&&span class=&n&&fields&/span&&span class=&o&&.&/span&&span class=&na&&length&/span& &span class=&o&&!=&/span& &span class=&mi&&4&/span&&span class=&o&&)&/span& &span class=&o&&{&/span&
&span class=&k&&throw&/span& &span class=&k&&new&/span& &span class=&n&&IllegalArgumentException&/span&&span class=&o&&(&/span&&span class=&s&&&Each line must contain 4 fields&&/span&&span class=&o&&);&/span&
&span class=&o&&}&/span&
&span class=&kt&&int&/span& &span class=&n&&userId&/span& &span class=&o&&=&/span& &span class=&n&&Integer&/span&&span class=&o&&.&/span&&span class=&na&&parseInt&/span&&span class=&o&&(&/span&&span class=&n&&fields&/span&&span class=&o&&[&/span&&span class=&mi&&0&/span&&span class=&o&&]);&/span&
&span class=&kt&&int&/span& &span class=&n&&movieId&/span& &span class=&o&&=&/span& &span class=&n&&Integer&/span&&span class=&o&&.&/span&&span class=&na&&parseInt&/span&&span class=&o&&(&/span&&span class=&n&&fields&/span&&span class=&o&&[&/span&&span class=&mi&&1&/span&&span class=&o&&]);&/span&
&span class=&kt&&float&/span& &span class=&n&&rating&/span& &span class=&o&&=&/span& &span class=&n&&Float&/span&&span class=&o&&.&/span&&span class=&na&&parseFloat&/span&&span class=&o&&(&/span&&span class=&n&&fields&/span&&span class=&o&&[&/span&&span class=&mi&&2&/span&&span class=&o&&]);&/span&
&span class=&kt&&long&/span& &span class=&n&&timestamp&/span& &span class=&o&&=&/span& &span class=&n&&Long&/span&&span class=&o&&.&/span&&span class=&na&&parseLong&/span&&span class=&o&&(&/span&&span class=&n&&fields&/span&&span class=&o&&[&/span&&span class=&mi&&3&/span&&span class=&o&&]);&/span&
&span class=&k&&return&/span& &span class=&k&&new&/span& &span class=&n&&Rating&/span&&span class=&o&&(&/span&&span class=&n&&userId&/span&&span class=&o&&,&/span& &span class=&n&&movieId&/span&&span class=&o&&,&/span& &span class=&n&&rating&/span&&span class=&o&&,&/span& &span class=&n&&timestamp&/span&&span class=&o&&);&/span&
&span class=&o&&}&/span&
&span class=&o&&}&/span&
&span class=&n&&JavaRDD&/span&&span class=&o&&&&/span&&span class=&n&&Rating&/span&&span class=&o&&&&/span& &span class=&n&&ratingsRDD&/span& &span class=&o&&=&/span& &span class=&n&&spark&/span&
&span class=&o&&.&/span&&span class=&na&&read&/span&&span class=&o&&().&/span&&span class=&na&&textFile&/span&&span class=&o&&(&/span&&span class=&s&&&data/mllib/als/sample_movielens_ratings.txt&&/span&&span class=&o&&).&/span&&span class=&na&&javaRDD&/span&&span class=&o&&()&/span&
&span class=&o&&.&/span&&span class=&na&&map&/span&&span class=&o&&(&/span&&span class=&k&&new&/span& &span class=&n&&Function&/span&&span class=&o&&&&/span&&span class=&n&&String&/span&&span class=&o&&,&/span& &span class=&n&&Rating&/span&&span class=&o&&&()&/span& &span class=&o&&{&/span&
&span class=&kd&&public&/span& &span class=&n&&Rating&/span& &span class=&nf&&call&/span&&span class=&o&&(&/span&&span class=&n&&String&/span& &span class=&n&&str&/span&&span class=&o&&)&/span& &span class=&o&&{&/span&
&span class=&k&&return&/span& &span class=&n&&Rating&/span&&span class=&o&&.&/span&&span class=&na&&parseRating&/span&&span class=&o&&(&/span&&span class=&n&&str&/span&&span class=&o&&);&/span&
&span class=&o&&}&/span&
&span class=&o&&});&/span&
&span class=&n&&Dataset&/span&&span class=&o&&&&/span&&span class=&n&&Row&/span&&span class=&o&&&&/span& &span class=&n&&ratings&/span& &span class=&o&&=&/span& &span class=&n&&spark&/span&&span class=&o&&.&/span&&span class=&na&&createDataFrame&/span&&span class=&o&&(&/span&&span class=&n&&ratingsRDD&/span&&span class=&o&&,&/span& &span class=&n&&Rating&/span&&span class=&o&&.&/span&&span class=&na&&class&/span&&span class=&o&&);&/span&
&span class=&n&&Dataset&/span&&span class=&o&&&&/span&&span class=&n&&Row&/span&&span class=&o&&&[]&/span& &span class=&n&&splits&/span& &span class=&o&&=&/span& &span class=&n&&ratings&/span&&span class=&o&&.&/span&&span class=&na&&randomSplit&/span&&span class=&o&&(&/span&&span class=&k&&new&/span& &span class=&kt&&double&/span&&span class=&o&&[]{&/span&&span class=&mf&&0.8&/span&&span class=&o&&,&/span& &span class=&mf&&0.2&/span&&span class=&o&&});&/span&
&span class=&n&&Dataset&/span&&span class=&o&&&&/span&&span class=&n&&Row&/span&&span class=&o&&&&/span& &span class=&n&&training&/span& &span class=&o&&=&/span& &span class=&n&&splits&/span&&span class=&o&&[&/span&&span class=&mi&&0&/span&&span class=&o&&];&/span&
&span class=&n&&Dataset&/span&&span class=&o&&&&/span&&span class=&n&&Row&/span&&span class=&o&&&&/span& &span class=&n&&test&/span& &span class=&o&&=&/span& &span class=&n&&splits&/span&&span class=&o&&[&/span&&span class=&mi&&1&/span&&span class=&o&&];&/span&
&span class=&c1&&// Build the recommendation model using ALS on the training data&/span&
&span class=&n&&ALS&/span& &span class=&n&&als&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&n&&ALS&/span&&span class=&o&&()&/span&
&span class=&o&&.&/span&&span class=&na&&setMaxIter&/span&&span class=&o&&(&/span&&span class=&mi&&5&/span&&span class=&o&&)&/span&
&span class=&o&&.&/span&&span class=&na&&setRegParam&/span&&span class=&o&&(&/span&&span class=&mf&&0.01&/span&&span class=&o&&)&/span&
&span class=&o&&.&/span&&span class=&na&&setUserCol&/span&&span class=&o&&(&/span&&span class=&s&&&userId&&/span&&span class=&o&&)&/span&
&span class=&o&&.&/span&&span class=&na&&setItemCol&/span&&span class=&o&&(&/span&&span class=&s&&&movieId&&/span&&span class=&o&&)&/span&
&span class=&o&&.&/span&&span class=&na&&setRatingCol&/span&&span class=&o&&(&/span&&span class=&s&&&rating&&/span&&span class=&o&&);&/span&
&span class=&n&&ALSModel&/span& &span class=&n&&model&/span& &span class=&o&&=&/span& &span class=&n&&als&/span&&span class=&o&&.&/span&&span class=&na&&fit&/span&&span class=&o&&(&/span&&span class=&n&&training&/span&&span class=&o&&);&/span&
&span class=&c1&&// Evaluate the model by computing the RMSE on the test data&/span&
&span class=&n&&Dataset&/span&&span class=&o&&&&/span&&span class=&n&&Row&/span&&span class=&o&&&&/span& &span class=&n&&predictions&/span& &span class=&o&&=&/span& &span class=&n&&model&/span&&span class=&o&&.&/span&&span class=&na&&transform&/span&&span class=&o&&(&/span&&span class=&n&&test&/span&&span class=&o&&);&/span&
&span class=&n&&RegressionEvaluator&/span& &span class=&n&&evaluator&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&n&&RegressionEvaluator&/span&&span class=&o&&()&/span&
&span class=&o&&.&/span&&span class=&na&&setMetricName&/span&&span class=&o&&(&/span&&span class=&s&&&rmse&&/span&&span class=&o&&)&/span&
&span class=&o&&.&/span&&span class=&na&&setLabelCol&/span&&span class=&o&&(&/span&&span class=&s&&&rating&&/span&&span class=&o&&)&/span&
&span class=&o&&.&/span&&span class=&na&&setPredictionCol&/span&&span class=&o&&(&/span&&span class=&s&&&prediction&&/span&&span class=&o&&);&/span&
&span class=&n&&Double&/span& &span class=&n&&rmse&/span& &span class=&o&&=&/span& &span class=&n&&evaluator&/span&&span class=&o&&.&/span&&span class=&na&&evaluate&/span&&span class=&o&&(&/span&&span class=&n&&predictions&/span&&span class=&o&&);&/span&
&span class=&n&&System&/span&&span class=&o&&.&/span&&span class=&na&&out&/span&&span class=&o&&.&/span&&span class=&na&&println&/span&&span class=&o&&(&/span&&span class=&s&&&Root-mean-square error = &&/span& &span class=&o&&+&/span& &span class=&n&&rmse&/span&&span class=&o&&);&/span&
&/code&&/pre&&/div&&p&Python:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&kn&&from&/span& &span class=&nn&&pyspark.ml.evaluation&/span& &span class=&kn&&import&/span& &span class=&n&&RegressionEvaluator&/span&
&span class=&kn&&from&/span& &span class=&nn&&pyspark.ml.recommendation&/span& &span class=&kn&&import&/span& &span class=&n&&ALS&/span&
&span class=&kn&&from&/span& &span class=&nn&&pyspark.sql&/span& &span class=&kn&&import&/span& &span class=&n&&Row&/span&
&span class=&n&&lines&/span& &span class=&o&&=&/span& &span class=&n&&spark&/span&&span class=&o&&.&/span&&span class=&n&&read&/span&&span class=&o&&.&/span&&span class=&n&&text&/span&&span class=&p&&(&/span&&span class=&s2&&&data/mllib/als/sample_movielens_ratings.txt&&/span&&span class=&p&&)&/span&&span class=&o&&.&/span&&span class=&n&&rdd&/span&
&span class=&n&&parts&/span& &span class=&o&&=&/span& &span class=&n&&lines&/span&&span class=&o&&.&/span&&span class=&n&&map&/span&&span class=&p&&(&/span&&span class=&k&&lambda&/span& &span class=&n&&row&/span&&span class=&p&&:&/span& &span class=&n&&row&/span&&span class=&o&&.&/span&&span class=&n&&value&/span&&span class=&o&&.&/span&&span class=&n&&split&/span&&span class=&p&&(&/span&&span class=&s2&&&::&&/span&&span class=&p&&))&/span&
&span class=&n&&ratingsRDD&/span& &span class=&o&&=&/span& &span class=&n&&parts&/span&&span class=&o&&.&/span&&span class=&n&&map&/span&&span class=&p&&(&/span&&span class=&k&&lambda&/span& &span class=&n&&p&/span&&span class=&p&&:&/span& &span class=&n&&Row&/span&&span class=&p&&(&/span&&span class=&n&&userId&/span&&span class=&o&&=&/span&&span class=&nb&&int&/span&&span class=&p&&(&/span&&span class=&n&&p&/span&&span class=&p&&[&/span&&span class=&mi&&0&/span&&span class=&p&&]),&/span& &span class=&n&&movieId&/span&&span class=&o&&=&/span&&span class=&nb&&int&/span&&span class=&p&&(&/span&&span class=&n&&p&/span&&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&]),&/span&
&span class=&n&&rating&/span&&span class=&o&&=&/span&&span class=&nb&&float&/span&&span class=&p&&(&/span&&span class=&n&&p&/span&&span class=&p&&[&/span&&span class=&mi&&2&/span&&span class=&p&&]),&/span& &span class=&n&&timestamp&/span&&span class=&o&&=&/span&&span class=&nb&&long&/span&&span class=&p&&(&/span&&span class=&n&&p&/span&&span class=&p&&[&/span&&span class=&mi&&3&/span&&span class=&p&&])))&/span&
&span class=&n&&ratings&/span& &span class=&o&&=&/span& &span class=&n&&spark&/span&&span class=&o&&.&/span&&span class=&n&&createDataFrame&/span&&span class=&p&&(&/span&&span class=&n&&ratingsRDD&/span&&span class=&p&&)&/span&
&span class=&p&&(&/span&&span class=&n&&training&/span&&span class=&p&&,&/span& &span class=&n&&test&/span&&span class=&p&&)&/span& &span class=&o&&=&/span& &span class=&n&&ratings&/span&&span class=&o&&.&/span&&span class=&n&&randomSplit&/span&&span class=&p&&([&/span&&span class=&mf&&0.8&/span&&span class=&p&&,&/span& &span class=&mf&&0.2&/span&&span class=&p&&])&/span&
&span class=&c1&&# Build the recommendation model using ALS on the training data&/span&
&span class=&n&&als&/span& &span class=&o&&=&/span& &span class=&n&&ALS&/span&&span class=&p&&(&/span&&span class=&n&&maxIter&/span&&span class=&o&&=&/span&&span class=&mi&&5&/span&&span class=&p&&,&/span& &span class=&n&&regParam&/span&&span class=&o&&=&/span&&span class=&mf&&0.01&/span&&span class=&p&&,&/span& &span class=&n&&userCol&/span&&span class=&o&&=&/span&&span class=&s2&&&userId&&/span&&span class=&p&&,&/span& &span class=&n&&itemCol&/span&&span class=&o&&=&/span&&span class=&s2&&&movieId&&/span&&span class=&p&&,&/span& &span class=&n&&ratingCol&/span&&span class=&o&&=&/span&&span class=&s2&&&rating&&/span&&span class=&p&&)&/span&
&span class=&n&&model&/span& &span class=&o&&=&/span& &span class=&n&&als&/span&&span class=&o&&.&/span&&span class=&n&&fit&/span&&span class=&p&&(&/span&&span class=&n&&training&/span&&span class=&p&&)&/span&
&span class=&c1&&# Evaluate the model by computing the RMSE on the test data&/span&
&span class=&n&&predictions&/span& &span class=&o&&=&/span& &span class=&n&&model&/span&&span class=&o&&.&/span&&span class=&n&&transform&/span&&span class=&p&&(&/span&&span class=&n&&test&/span&&span class=&p&&)&/span&
&span class=&n&&evaluator&/span& &span class=&o&&=&/span& &span class=&n&&RegressionEvaluator&/span&&span class=&p&&(&/span&&span class=&n&&metricName&/span&&span class=&o&&=&/span&&span class=&s2&&&rmse&&/span&&span class=&p&&,&/span& &span class=&n&&labelCol&/span&&span class=&o&&=&/span&&span class=&s2&&&rating&&/span&&span class=&p&&,&/span&
&span class=&n&&predictionCol&/span&&span class=&o&&=&/span&&span class=&s2&&&prediction&&/span&&span class=&p&&)&/span&
&span class=&n&&rmse&/span& &span class=&o&&=&/span& &span class=&n&&evaluator&/span&&span class=&o&&.&/span&&span class=&n&&evaluate&/span&&span class=&p&&(&/span&&span class=&n&&predictions&/span&&span class=&p&&)&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s2&&&Root-mean-square error = &&/span& &span class=&o&&+&/span& &span class=&nb&&str&/span&&span class=&p&&(&/span&&span class=&n&&rmse&/span&&span class=&p&&))&/span&
&/code&&/pre&&/div&
协同过滤算法介绍:协同过滤常被用于推荐系统。这类技术目标在于填充“用户-商品”联系矩阵中的缺失项。Spark.ml目前支持基于模型的协同过滤,其中用户和商品以少量的潜在因子来描述,用以预测缺失项。Spark.ml使用交替最小二乘(ALS)算法来学习这些潜在…
&p&这一部分主要学习pandas中基于前面两种数据结构的基本操作。&/p&&p&设有DataFrame结果的数据a如下所示:&/p&&p&一、查看数据(查看对象的方法对于Series来说同样适用)&/p&&p&1.查看DataFrame前xx行或后xx行&br&a=DataFrame(data);&br&a.head(6)表示显示前6行数据,若head()中不带参数则会显示全部数据。&br&a.tail(6)表示显示后6行数据,若tail()中不带参数则也会显示全部数据。&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&kn&&import&/span& &span class=&nn&&pandas&/span& &span class=&kn&&as&/span& &span class=&nn&&pd&/span&
&span class=&kn&&import&/span& &span class=&nn&&numpy&/span& &span class=&kn&&as&/span& &span class=&nn&&np&/span&
&span class=&n&&a&/span&&span class=&o&&=&/span&&span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&DataFrame&/span&&span class=&p&&([[&/span&&span class=&mi&&4&/span&&span class=&p&&,&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span&&span class=&mi&&1&/span&&span class=&p&&],[&/span&&span class=&mi&&6&/span&&span class=&p&&,&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span&&span class=&mi&&0&/span&&span class=&p&&],[&/span&&span class=&mi&&6&/span&&span class=&p&&,&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span&&span class=&mi&&6&/span&&span class=&p&&]],&/span&&span class=&n&&index&/span&&span class=&o&&=&/span&&span class=&p&&[&/span&&span class=&s1&&'one'&/span&&span class=&p&&,&/span&&span class=&s1&&'two'&/span&&span class=&p&&,&/span&&span class=&s1&&'three'&/span&&span class=&p&&],&/span&&span class=&n&&columns&/span&&span class=&o&&=&/span&&span class=&p&&[&/span&&span class=&s1&&'a'&/span&&span class=&p&&,&/span&&span class=&s1&&'b'&/span&&span class=&p&&,&/span&&span class=&s1&&'c'&/span&&span class=&p&&])&/span&
&span class=&n&&a&/span&
&/code&&/pre&&/div&&figure&&img src=&/v2-35b71c8729eeb89dfa1de_b.png& data-rawwidth=&100& data-rawheight=&119& class=&content_image& width=&100&&&/figure&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&a&/span&&span class=&o&&.&/span&&span class=&n&&head&/span&&span class=&p&&(&/span&&span class=&mi&&2&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&figure&&img src=&/v2-abae2a147cfabad144beb534_b.png& data-rawwidth=&101& data-rawheight=&98& class=&content_image& width=&101&&&/figure&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&a&/span&&span class=&o&&.&/span&&span class=&n&&tail&/span&&span class=&p&&(&/span&&span class=&mi&&2&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&figure&&img src=&/v2-40e7f982d40f0e467aab91884d0edf96_b.png& data-rawwidth=&101& data-rawheight=&94& class=&content_image& width=&1

我要回帖

更多关于 python制作小游戏 的文章

 

随机推荐