万万没想到2017第二季7问道100级2017游戏展览女衣服叫什么

《万万没想到》第二季海报曝光 王大锤7月1日回归_网易娱乐
《万万没想到》第二季海报曝光 王大锤7月1日回归
用微信扫码二维码
分享至好友和朋友圈
由优酷出品、万合天宜联手打造的Mini剧《万万没想到》去年推出后火爆网络,被网友称为“网络第一神剧”。在经历近5个月的漫长等待,《万万没想到》第二季终于要回归了。目前剧组正在紧张的拍摄中,将于7月1日正式上线,《万万没想到》第二季概念海报和剧照也随之曝光。
《万万没想到》第二季7月1日回归 “最穷”剧组变“土豪”
Mini剧《万万没想到》讲述了一部闪耀古今的迷你神剧,一段皇家屌丝的惊叹人生,以夸张而幽默的方式描绘了屌丝代表王大锤意想不到的传奇故事。因其独树一帜的影片风格、穿越古今的无厘头剧情、吐槽式的台词,一经推出风靡网络。第一季累计播放量逼近8亿,艾瑞IVT数据显示《万万没想到》播放量连续两月蝉联榜首。《万万没想到》成为办公室人群的“周指活”,王大锤的扮演者白客也凭此剧晋身为新一代男神。《万万没想到》也从网络火到电视荧屏,贺岁番《小兵过年》登陆湖南卫视黄金档,成为首个从网络逆袭电视台的自制剧,《万万没想到》成为了去年影视剧里最耀眼的一颗新星。
经过漫长的等待与期盼,《万万没想到》第二季已全面启动,正在紧张的拍摄和制作,将于7月1日正式回归。据了解,第二季与上一季一样共15集。同时,第二季相较于上一季从资金和内容上均全面升级。“史上最穷剧组”的囧境网友都有目共睹,第一集中,演员王大锤拍摄一部低成本武侠剧,剧中的剑是塑料儿童玩具、为了节省成本同一个人演三个角色、特效直接用字幕代替,连王大锤最后无奈的吐槽道:“我再也不想跟这种穷比剧组合作了。”而第二季中,据说“最穷”摇身变“土豪”,全组在道具、特效甚至盒饭质量上都有了极大的提升。为了给观众呈现更好的内容与视觉效果,主创们用心良苦、苦思冥想,制作标准着力升级,其中还有不少的大场景,总之,第二季我们依旧诚意满满。
海报剧照首曝光 大锤造型显玄机
《万万没想到》第二季概念版海报首次曝光。曝光的海报以西游记为背景,不仅让人回想到第一季《大舌头悟空》中叫兽易小星扮演的“史上最胖版”唐僧,子墨饰演的大舌头、痞气十足的悟空和胆小的小妖精王大锤。而这张海报中,隐约可以看到子墨再次饰演的悟空手拿金箍棒做投射状,本煜双手端起箭弩,身旁立着游戏里常见“新手村”字样的木牌,而海报中却不见王大锤。占据三分之一海报的是头戴ok标志的半个额头,仔细观看下可以看出这正是《万万没想到》主角皇家屌丝王大锤。王大锤造型尽显玄机,再加上悟空与在新手村的本煜,故事剧情的万万没想到可见一斑。
随之曝光的还有三张剧照,一张王大锤一身古装扮相,手持锤子,经典面瘫表情再现,让人不禁想“你是猴子请来的逗比吗?”一张王大锤专心电脑,“宝洁小妹”用头发挑逗他,却换来一脸不耐烦,注定又是一出爱情悲剧。最后一张中,王大锤身穿金色盔甲、手持长刀、一脸愤怒,而站在他身旁的本煜头发花白、蓄长须,淡然的看向远方,身旁还站着一清新婉约的女子,不知王大锤有美人在身又遇到了怎样的传奇经历。
从曝光的三张剧照和海报来看,第二季中《万万没想到》各个角色更加多样化和丰富。据透露,本季中,王大锤在形象上完全颠覆想象,真正的万万没想到,剧情也更加精彩,更会有众多大腕级明星鼎力加盟。调动好你的神经,7月1日一起万万没想到吧!
本文来源:新华网
责任编辑:王晓易_NE0011
用微信扫码二维码
分享至好友和朋友圈
加载更多新闻
热门产品:   
:        
:         
热门影院:
阅读下一篇
用微信扫描二维码
分享至好友和朋友圈尴尬的私厨平台:多家平台下线 回家吃饭依然苦撑_新浪财经_新浪网
  尴尬的私厨平台
  尽管滴滴出行、Airbnb、共享单车等发展得红红火火,但同为共享经济模式的家厨共享平台却步履维艰。多家家厨共享平台下线,只有“回家吃饭”依然苦撑。近日,国家食药监总局发布网络餐饮管理新规,让很多媒体及业内人士直接将矛头指向了以家庭厨房共享经营的外卖平台。业内认为,在政策监管标准缺失和自身存在缺陷的情况下,“回家吃饭”等厨房共享平台遇到困难期,破解这些难题需要企业积极反馈,力促监管部门出台相关标准,进行统一管理和食材供应,保证食品安全,或能有转机。
  私厨平台再被限
  《网络餐饮服务监督管理办法(征求意见稿)》(以下简称《管理办法》)第八条明确规定,利用互联网提供餐饮服务的,应当具有实体店铺并依法取得食品经营许可证,不得超范围经营。如果违反第八条规定,网络餐饮服务经营者不具备实体店铺,未依法取得食品经营许可证,依照《食品安全法》第一百二十二条规定处罚。《食品安全法》第一百二十二条规定,违反《食品安全法》规定,将被处5万元以上10万元以下罚款。
  有业内人士认为,规定的出台,不仅对规范和限制外卖平台对商家的准入规则有了明确的界定,对于以家厨共享模式经营外卖业务的平台可以说是“致命”的。据了解,该消息一出,“邻食”、“丫米厨房”等很多共享厨房的客户端都已下线,在私厨分享领域目前仅剩下“回家吃饭”还在坚守。数据显示,回家吃饭目前App已拥有注册用户200万,注册家厨18万。
  “回家吃饭”方面在接受北京商报记者采访时表示,正密切关注《管理办法》的发布,同时也一直跟有关部门保持积极联系和沟通。目前仍然坚守的原因是,“回家吃饭”认为,家厨分享不是伪需求,需求和价值真实存在。餐饮市场足够大,丰富性和多样性有别于其他市场,是极度分散的。“回家吃饭”是创造增量市场,对于没时间做饭或者不会做饭的人来说,通过“回家吃饭”,就可以吃到“安心好味道”。
  北京商业经济学会常务副会长赖阳表示,共享厨房的模式能够满足一部分消费者的需求,目前的问题主要是没有可行的监管模式和标准。平台企业应该积极主动地向监管部门反馈并将运营中的经验和数据共享,帮助监管部门出台相关的监管措施。
  家厨共享问题多
  《管理办法》出台后,北京商报记者近日再度体验了在“回家吃饭”平台消费的整个过程。&网店名为“太辛苦”的一位“回家吃饭”商户告诉北京商报记者,他们夫妇两人年龄都在50岁左右,主要以分享为主,可以提供30个餐品,每月的订单量不到200单。“每天早晨都要早起去菜市场购买店铺里30多个餐品的蔬菜,买回的蔬菜也有剩下的情况,也增加了成本。”
  不过,消费者则担心是那些吃进嘴里的菜是否新鲜。一位消费者告诉北京商报记者,“家庭共享的厨师多为老人,但老人一般都比较节约,我就很担心他们舍不得把一些不新鲜的菜扔掉。”
  据了解,“回家吃饭”自成立以来就自建了一套约束机制:家厨要采用国家认证的品牌粮油;厨师身份证、健康证、银行卡三证统一;设置直播专区,所有家厨支持自取或堂食,卫生评级:食安小组进入厨房定期检查、临时抽检,数据监控:供应保障:食材源头把控,渠道可靠;硬件审核:厨房环境10级准入,上门实地拍摄;美味审核:专人实地认证、拍照、试吃等多项监管措施。
  但北京商报记者在平台上发现,有的商户并不提供自取,提供的照片也不是厨房的照片。在自取时,不让进入厨房,只把餐品从门口递出。一位商户告诉北京商报记者,“回家吃饭”对商家的监管频率为每月一次,所有食材的采购都是自行采购。“开始进入是门槛不高,不收费用,厨师年龄不能太大。需要提供健康证,厨房干净即可成为厨师。”
  有业内分析人士认为,“回家吃饭”相比于已经比较成熟的外卖平台而言,仍然不够稳定,平台上的商户都是私家厨房,分布过于分散,决定了“回家吃饭”对于商户的监管难度大。另外不同于正规餐饮商户,私厨难以通过批量采购等方式降低采购成本,且受限于家庭厨房产能,难以形成规模效应,因此对于上线平台的私厨而言,想赚钱的难度也很大。另外,“回家吃饭”虽然与外卖平台的模式并不相同,但是对于消费者而言功能差异并不大,因此“回家吃饭”与外卖平台之间其实存在着竞争关系,但“回家吃饭”的竞争优势明显较弱。
  “回家吃饭”相关负责人表示,公司业务主要集中在北京、上海、广州、深圳和杭州,并且目前没有扩大业务范围的计划。
  统一供应是良方
  家厨共享平台遭遇政策瓶颈,部分平台上商户的日子也不好过。有商户透露,原来一单物流费用是3元,现在是4元,虽然相比外卖并不高,但对散户来讲也是一个不小的负担。“一般我们都是一个人做饭,另一个人送,或让顾客自提,除非订餐较多,我们才会让快递给配送。”
  对于具体的利润,上述商户并未正面回答,但她表示,除去物流费用,平台从商家的抽成比例为10%,餐盒包装成本也近1元左右。这样算来一个30元的订单商户的收入只有20元左右。“减去人力成本、食材、燃料和各种调料的成本,也没有多少了。”商户表示。“我们每天也就几单的量,所以一个月下来挣不了多少钱。”采访当天,截至晚餐时段,该商户只卖出了4单。
  对于商户利润,“回家吃饭”方面表示:“刨除食材、物流等成本后,家厨获得的利润大概占到收入的1/3。”
  有业内人士认为,餐饮是消费的刚需,外卖的需求也趋于刚性,但共享厨房并不是一个刚需,加之从业人员年龄大、产能低,没有规模优势,成本高,竞争优势就不明显。
  即使如此,“回家吃饭”依认为,“家庭厨房共享”这种创新的餐饮商业模式是共享经济的一种形式,共享经济在我国经济体系里发挥着越来越大的作用,“回家吃饭”做的事情是有价值的,在切实改变许多人的生活,创造越来越大的社会价值。
  上述业内人士认为,要想摆脱这些难题,应该在政策层面监管的同时,制定可行的标准。“回家吃饭”方面在接受北京商报记者采访时也表示,愿协同政府、社会、行业一同努力,促成互联网餐饮新形态的监管,以大数据创统一、科学、高效的食品安全监管与评价体系,做到让食品安全管控随时随地、无缝衔接、不留死角。
  具体到操作层面,上述业内人士表示,回家吃饭等平台需要整合资源,为商户提供统一的食材和配送,提升共享厨房的产能,降低成本,这样才可能在餐饮业激烈的竞争中坚持下来。
  北京商报记者&徐慧&郭诗卉&李振兴
责任编辑:刘金磊 SF113&figure&&img src=&https://pic2.zhimg.com/v2-4f9abc50ca1_b.jpg& data-rawwidth=&920& data-rawheight=&536& class=&origin_image zh-lightbox-thumb& width=&920& data-original=&https://pic2.zhimg.com/v2-4f9abc50ca1_r.jpg&&&/figure&&p&选自Medium&/p&&p&&b&作者:Oren Dar&/b&&/p&&p&&b&机器之心编译&/b&&/p&&p&&b&参与:刘晓坤、李泽南、路雪&/b&&/p&&blockquote&在学习过深度学习的基础知识之后,参与实践是继续提高自己的最好途径。本文将带你进入全球最大机器学习竞赛社区 Kaggle,教你如何选择自己适合的项目,构建自己的模型,提交自己的第一份成绩单。&/blockquote&&p&本文将介绍数据科学领域大家都非常关心的一件事。事先完成一门机器学习 MOOC 课程并对 Python 有一些基础知识有助于理解文本,但没有也没关系。本文并不会向大家展示令人印象深刻的成果,而是回顾基础知识,试图帮助初学者找到方向。&/p&&p&&br&&/p&&p&文章结构: &/p&&ul&&li&介绍&/li&&li&Kaggle 综述&/li&&li&建立自己的环境&/li&&li&预测房价竞赛简介&/li&&li&加载和检查数据&/li&&li&我们的模型:决策树介绍、偏差-方差权衡、随机森林&/li&&li&预处理数据&/li&&li&整合并提交结果&/li&&/ul&&p&&br&&/p&&p&&b&介绍&/b&&/p&&p&目前,我们能在网上找到很多高质量的免费机器学习教程,如 MOOC。一年以前,我在 Udacity 接触了「机器学习入门」课程,我认为它对于新手来说非常友好。在这里,我学到了机器学习基础概念、很多流行算法,以及 scikit-learn 的 API。在完成课程以后,我非常希望学到更多,但陷入了短暂的迷茫。&/p&&p&在做完一番研究后,我认为下一步最优的选择是进军 Kaggle,它是谷歌旗下的一个预测模型竞赛平台。没什么比自己动手进行实践更好了!&/p&&p&初次尝试 Kaggle 竞赛是很紧张刺激的,很多时候也伴随着沮丧(得到好成绩之后这种感觉似乎还加深了!),本文将着重介绍如何入门并开始你的第一场 Kaggle 竞赛,在这个过程中尽快成长。&/p&&p&&br&&/p&&p&&b&Kaggle 综述&/b&&/p&&figure&&img src=&http://pic4.zhimg.com/v2-db878cdee4f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&891& data-rawheight=&434& class=&origin_image zh-lightbox-thumb& width=&891& data-original=&http://pic4.zhimg.com/v2-db878cdee4f_r.jpg&&&/figure&&p&&i&房价竞赛登录页面。&/i&&/p&&p&(如果你已经熟悉 Kaggle 网站了,本段可以跳过)&/p&&p&&br&&/p&&p&Kaggle 上有两个最适合新手的竞赛(某种程度上已成为 Kaggle 的「入门教程」):&/p&&ul&&li&Titanic(预测生存:一种二元分类问题):&a href=&http://link.zhihu.com/?target=https%3A//www.kaggle.com/c/titanic& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&kaggle.com/c/titanic&/span&&span class=&invisible&&&/span&&/a&&/li&&li&房价(预测价格:回归问题):&a href=&http://link.zhihu.com/?target=https%3A//www.kaggle.com/c/house-prices-advanced-regression-techniques& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&kaggle.com/c/house-pric&/span&&span class=&invisible&&es-advanced-regression-techniques&/span&&span class=&ellipsis&&&/span&&/a&&/li&&/ul&&p&我强烈建议你两项都尝试一下,本文主要介绍后者。不过,其中需要的知识大部分是通用的,所以你完全可以看完本文,然后尝试其他 Kaggle 竞赛或者数据科学问题,所以选择挑战其他竞赛也没有问题!&/p&&p&在每个竞赛的「Overview」(概览)选项卡上,你可以看到关于比赛及其数据集的一些信息、提交有效结果的评估标准(每个竞赛都略有不同),以及该竞赛的 FAQ。&/p&&p&在「Data」(数据)选项卡上,你可以看到数据的简要说明。我们需要的是这三个文件:train.csv、test.csv 和 data_description.txt(这是至关重要的,因为其中包含数据的详细描述),请将它们放在你可以快速访问的文件夹里。&/p&&p&「Discussions」(讨论)选项卡就像竞赛的专属论坛——不过不要低估它!在流行的竞赛中,这些讨论中经常包含非常有价值的信息,因为竞赛条款有时会要求参与者必须在讨论版上公开他们所使用的任何信息。例如,数据泄露是很难避免和处理的,偶尔也会发生在竞赛中。一方面,充分利用数据才能得到更高的分数赢得竞赛;但另一方面,结合了数据泄露的模型通常对于实践来说是无用的,所以也不被竞赛支持——因为它们使用了「非法」信息。勤奋的参与者经常会在讨论版上分享数据泄露以帮助竞赛环境变得更好。此外,Kaggle 的成员也会经常在其上分享一些信息,努力维护这个社区。在排行榜上名列前茅的参与者有时也会在其中分享自己的成功经验(通常会在竞赛结束前后)。&/p&&p&「Kernel」选项卡基本上是「讨论」版块的应用、代码版,我认为这是对于初学者而言最重要的一个版块。任何人都可以在其中分享自己的脚本或笔记,链接任何数据集与竞赛,形式可以是文档、注释、可视化和输出,每个人都可以观看、投票、复制这些内容,甚至也可以在浏览器上直接运行它们!我刚才提到的两个竞赛(Titanic、房价竞赛)都形成了有趣、漂亮、成功的 Kernel,强烈推荐进行过自己的尝试之后浏览这个版块。Kaggle 正在不断提升 Kernel 的功能,现在甚至有一个「仅限 Kernel」、奖金为 10 万美元的竞赛。不过,Kernel 中的讨论往往是硬核的,缺乏有关概念的解释,或者说预先认为你已具备相关知识,所以有时了解起来会有些许困难。&/p&&p&&br&&/p&&p&&b&建立自己的环境&/b&&/p&&p&我强烈推荐使用 Python3.6 在 Jupyter Notebook 环境中处理任何数据科学相关的工作(其中最流行的发行版称为「Anaconda」,包括 Python、Jupyter Notebook 和很多有用的库)。然后你就可以通过在终端(或者 Anaconda GUI)输入 Jupyter Notebook 随时启动该环境。除此之外,本文展示的内容也可以在 Kaggle 网站上的私人 Kernel 上完成(完全在浏览器上工作),这和 Jupyter Notebook 是等价的。&/p&&p&在开始之前,先介绍使用 Jupyter Notebook 的几个基本要点:&/p&&ul&&li&你可以输入任意的方法名,然后按 Tab 键查看所有可能选项;&/li&&li&类似地,选择任意方法,按 Shift-Tab 键几次可以在你的 notebook 中打开它的相关文档;&/li&&li&在任意语句之前输入%time 并执行该 cell,可以输出所需执行时间;&/li&&li&类似地,在任意语句之前输入%prun 并执行该 cell,可以令其在 Python 的代码分析器中运行,并输出结果。&/li&&/ul&&p&可以在这里查看更多有用的命令:&a href=&http://link.zhihu.com/?target=http%3A//ipython.readthedocs.io/en/stable/interactive/magics.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&ipython.readthedocs.io/&/span&&span class=&invisible&&en/stable/interactive/magics.html&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&br&&/p&&p&&b&预测房价竞赛指南&/b& &/p&&p&&br&&/p&&p&&b&目标概览&/b&&/p&&p&这是一个监督学习问题,意味着训练集中包含一系列的观察数据(行)和相关的多种信息(列)。其中一列是我们感兴趣并能够预测的信息,通常称其为目标变量或者因变量,在分类问题中称为标签、类。在我们的案例中,目标变量是房价。其它的列通常称为独立变量或特征。我们还有一个测试集,也包含一系列的观察数据,其中的列与训练集相同,除了目标变量,因为我们的目标就是预测目标变量的值。因此,完美情况下,我们要建立一个模型,该模型可以学习训练集中因变量和独立变量之间的关系,然后使用学习到的知识在测试集中尽可能准确地预测因变量(目标变量)的值。由于目标变量(房价)是连续的,可以取任意的值,因此这个问题属于回归问题。&/p&&p&&br&&/p&&p&&b&加载和检查数据&/b& &/p&&p&现在我们已经成功启动了 Jupyter Notebook,首先要做的事情就是加载数据到 Pandas DataFrame 中。Pandas 可以处理 Python 中所有数据分析相关的工作,是很强大和流行的库,DataFrame 是它用于保存数据的对象名称。&/p&&figure&&img src=&http://pic3.zhimg.com/v2-de6af95fe979e77fe18410d6_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&887& data-rawheight=&468& class=&origin_image zh-lightbox-thumb& width=&887& data-original=&http://pic3.zhimg.com/v2-de6af95fe979e77fe18410d6_r.jpg&&&/figure&&p&&i&按 Shift-Tab 几次,打开文档。&/i&&/p&&p&&br&&/p&&p&最后一行使用了 Python 3.6 的字符串格式将从 Kaggle 下载的 CSV 文件(『comma-separated-values』,一种常用格式,可使用任何标准软件打开,例如 Excel)加载到 Pandas DataFrame 中。我们之后将频繁使用 read_csv,因此建议先浏览它的文档(这是一个好习惯)。加载数据并查看 DataFrame,可以发现数据集中的第一列是 Id,代表数据集中该行的索引,而不是真实观察值。因此,我修改了代码,加上 index_col=『Id』作为参数,从而在加载数据到 DataFrame 的时候,确保 Pandas 将其作为索引而不是列,并在它之前添加一个新的索引列。&/p&&p&现在,我们来看看训练集的样子。&/p&&figure&&img src=&http://pic3.zhimg.com/v2-102fcbe1d2ed8be03644e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&890& data-rawheight=&505& class=&origin_image zh-lightbox-thumb& width=&890& data-original=&http://pic3.zhimg.com/v2-102fcbe1d2ed8be03644e_r.jpg&&&/figure&&p&&i&训练集的数据结构&/i&&/p&&p&训练集总共有 80 列(除 Id 以外),其中 79 列是独立变量,1 列是因变量。因此,测试集应该只有 79 列(独立变量)。大多数的数字和字符串都没有什么意义,其中 Alley 列甚至全都是『NaN』,即值的丢失。别担心,我们之后会处理这个问题。下一步是考虑需要使用的模型。我们先讨论一下决策树(有时在应用到回归问题的时候称为回归树)。&/p&&p&&br&&/p&&p&&b&如何构建我们的模型&/b&&/p&&p&&br&&/p&&p&&b&决策树介绍&/b&&/p&&p&其基本思想是很简单的,当学习(拟合)训练数据的时候,回归树搜索所有独立变量和每个独立变量的所有值,以寻找能将数据最佳地分割为两组的变量和值(从数学角度来说,树总是选择能最小化两个节点的加权平均方差的分割),然后计算分数(最好是选定指标上的分数),以及每个组因变量的平均值。接着回归树递归地重复该过程,直到无法进一步分割(除非设置了具体的 max_depth,如下图所示)。树最后一级的每个节点都被称为『叶』,每一个都和因变量(在该叶相关的所有观察数据)的平均值相关。&/p&&p&旁注:这是一个『贪婪』算法的很好示例,在每一次分割中,算法检查了所有选项,然后选择了在该点的最佳选项,以期望最终得到全局最佳结果。当树拟合了训练数据之后,使用任何观察数据预测因变量的值时,只需要遍历树,直到抵达一个叶节点。&/p&&figure&&img src=&http://pic4.zhimg.com/v2-a41d42bdca1dafb9da519eaf276f6b43_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&875& data-rawheight=&594& class=&origin_image zh-lightbox-thumb& width=&875& data-original=&http://pic4.zhimg.com/v2-a41d42bdca1dafb9da519eaf276f6b43_r.jpg&&&/figure&&p&&i&我们数据集的可视化示例,其中 max_depth 设为 3。&/i&&/p&&p&&br&&/p&&p&在树的每个节点,第一个元素是节点的分割规则(独立变量及其变量值),第二个元素是在该节点的所有观察数据的均方差(MSE),第三个元素是该节点的观察数据的数量(samples),即这一组的规模。最后一个元素 value 是目标变量(房价)的自然对数。该过程和贪婪算法类似,在每个节点局部地进行最佳分割,确实可以随着树的扩展减少均方差的值,并且每个叶节点都有一个相关的「SalePrice」值。&/p&&p&&br&&/p&&p&&b&偏差-方差权衡&/b& &/p&&p&我们回忆一下监督学习的目标。一方面,我们希望模型可以通过拟合训练数据捕捉独立变量和因变量的关系,从而使其可以做出准确的预测。然而,模型还需要对(未见过的)测试数据进行预测。因此,我们还希望模型捕捉变量之间的普遍关系,从而可以进行泛化。该过程称为『偏差-方差权衡』。&/p&&figure&&img src=&http://pic4.zhimg.com/v2-efd427be84b364be7c912f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&900& data-rawheight=&375& class=&origin_image zh-lightbox-thumb& width=&900& data-original=&http://pic4.zhimg.com/v2-efd427be84b364be7c912f_r.jpg&&&/figure&&p&&br&&/p&&p&如果模型没有充分拟合训练数据,它将会有高偏差(通常称为欠拟合),因此它的训练误差较大。然而,如果模型过于拟合训练数据,它会捕捉到变量之间的特殊关系(偶然的),导致高方差(通常称为过拟合),因此它的测试误差较大。所以,我们需要在偏差和方差之间进行权衡。&/p&&p&&br&&/p&&p&&b&决策树过拟合&/b&&/p&&p&假定我们将一个回归树拟合到训练数据中。这个树将是什么结构?实际上,它将持续分割直到每个叶节点只有一个观察数据(无法再继续分离)。换种说法,回归树将为训练集的每一个观察数据建立一个独特路径,并根据观察数据在路径末端的叶节点上给出因变量的值。&/p&&p&如果将训练集中因变量的值删除,并用训练过的树预测因变量的值,结果如何?可以猜到,它将表现得很完美,达到基本 100% 的准确率和 0 均方差。因为它已经学习了训练集中每个观察数据的相关因变量值。&/p&&p&然而,如果我打算让树预测未见过的观察数据的因变量值,它将表现得很糟糕,因为任何未见过的观察数据都会在原来的树构建一个独特的叶节点。这正是一个过拟合的例子。可以通过调整树的参数减少过拟合,例如,限制树的 max_depth,但实际上还有更好的方法。&/p&&p&&br&&/p&&p&&b&解决方案:随机森林&/b&&/p&&p&在机器学习中,我们通常会设计「元学习」以结合小模型的多个预测而生成更好的最终预测,这种方法一般可称为集成学习。特别的,当我们结合一些决策树为单个集成模型,我们可以将其称之为「Bootstrap Aggregating」或简单地称之为「Bagging」。通过这种方法构建的「元模型」是一种较为通用的解决方案,因此随机森林可以适用于广泛的任务。&/p&&p&随机森林简单而高效,当我们用这种方法拟合一个数据集时,就会像上文所述的那样构建许多决策树,只不过每个决策树是在数据的随机子集中构建,且在每一次分割中只考虑独立变量「特征」的随机子集。然后为了生成新的观察值,随机森林会简单地平均所有树的预测,并将其作为最终的预测返回。&/p&&p&现在我们所做的的就是构建许多弱分类器或弱决策树,然后取它们的平均值,为什么要这样做呢?&/p&&p&简单的回答就是它们确实工作地非常好,如果读者对随机森林的统计解释感兴趣的话,可以阅读更多的技术细节。但我不擅长于统计,但我会尽可能地给出一个基本的解释:bootstrap 采样和特征子集可以使不同的决策树尽可能地去相关(即使它们仍然基于相同的数据集和特征集),这种去相关能允许每一棵树在数据中发现一些不同的关系。这也就使它们的均方差要比任何单颗树都少的多,因此减少过拟合后它们能在总体上获得更好的预测和泛化结果。&/p&&p&简单来说,对于未见的观察结果,每个决策树预测该观察结果结束时所处叶节点的因变量值,即特定树空间中最类似的训练集观察结果。每棵树都是在不同的数据上构建的不同树,因此每棵树用不同的方式定义相似性,预测不同的值。因此对于给定未见观察结果,所有树的平均预测基本上就是训练集中与之类似的观察结果的值的平均值。&/p&&p&此特性的影响之一是:尽管随机森林在测试集与训练集相似度较高时(值属于同样的范围)非常擅长预测,但当测试集与训练集存在根本区别时(不同范围的值),随机森林的预测性能很差,比如时序问题(训练集和测试集不属于同样的时间段)。&/p&&p&不过我们的案例中测试集和训练集具备同样范围的值,因此这对我们没有太大影响。&/p&&p&&br&&/p&&p&&b&回到比赛&/b&&/p&&p&&br&&/p&&p&&b&预处理数据&/b&&/p&&p&我们在让随机森林运行起来之前还有一件事要做:随机森林虽然理论上可以应对分类特征(非数据形式:字符串)和数据缺失,scikit-learn 实现却并不支持这两种情况。所以我们需要使用 pd.interpolate() 来填充缺失的值,然后使用 pd.get_dummies() 的『One-Hot Encoding』来将分类特征转换为数字特征。这个方法非常简单,让我们假设一个分类变量有 n 个可能值。该列被分为 n 个列,每一列对应一个原始值(相当于对每个原始值的『is_value?』)。每个观察值(以前有一个分类变量的字符串值),现在在旧字符串值对应的列上有一个 1,而其他所有列上为 0。&/p&&p&我们现在准备构建一个模型,使用数据进行训练,并用它来预测测试集,然后将结果提交到 Kaggle 上。&/p&&p&&br&&/p&&p&&b&整合结果并提交&/b&&/p&&p&这就是我们的模型提交 Kaggle 所需的所有代码——大约 20 行!我们运行这些代码,随后继续向 Kaggle 提交结果——得分为 0.14978,目前排行约为 63%。对于五分钟的代码编写来说,结果不错!在这里我们可以看到随机森林的力量。&/p&&div class=&highlight&&&pre&&code class=&language-python3&&&span&&/span&&span class=&kn&&import&/span& &span class=&nn&&pandas&/span& &span class=&k&&as&/span& &span class=&nn&&pd&/span&
&span class=&kn&&from&/span& &span class=&nn&&sklearn.ensemble&/span& &span class=&k&&import&/span& &span class=&n&&RandomForestRegressor&/span&
&span class=&n&&PATH&/span& &span class=&o&&=&/span& &span class=&s2&&&Oren/Kaggle/Housing Prices/&&/span& &span class=&c1&&#where you put the files&/span&
&span class=&n&&df_train&/span& &span class=&o&&=&/span& &span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&read_csv&/span&&span class=&p&&(&/span&&span class=&n&&f&/span&&span class=&s1&&'&/span&&span class=&si&&{PATH}&/span&&span class=&s1&&train.csv'&/span&&span class=&p&&,&/span& &span class=&n&&index_col&/span&&span class=&o&&=&/span&&span class=&s1&&'Id'&/span&&span class=&p&&)&/span&
&span class=&n&&df_test&/span& &span class=&o&&=&/span& &span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&read_csv&/span&&span class=&p&&(&/span&&span class=&n&&f&/span&&span class=&s1&&'&/span&&span class=&si&&{PATH}&/span&&span class=&s1&&test.csv'&/span&&span class=&p&&,&/span& &span class=&n&&index_col&/span&&span class=&o&&=&/span&&span class=&s1&&'Id'&/span&&span class=&p&&)&/span&
&span class=&n&&target&/span& &span class=&o&&=&/span& &span class=&n&&df_train&/span&&span class=&p&&[&/span&&span class=&s1&&'SalePrice'&/span&&span class=&p&&]&/span& &span class=&c1&&#target variable&/span&
&span class=&n&&df_train&/span& &span class=&o&&=&/span& &span class=&n&&df_train&/span&&span class=&o&&.&/span&&span class=&n&&drop&/span&&span class=&p&&(&/span&&span class=&s1&&'SalePrice'&/span&&span class=&p&&,&/span& &span class=&n&&axis&/span&&span class=&o&&=&/span&&span class=&mi&&1&/span&&span class=&p&&)&/span&
&span class=&n&&df_train&/span&&span class=&p&&[&/span&&span class=&s1&&'training_set'&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&kc&&True&/span&
&span class=&n&&df_test&/span&&span class=&p&&[&/span&&span class=&s1&&'training_set'&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&kc&&False&/span&
&span class=&n&&df_full&/span& &span class=&o&&=&/span& &span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&concat&/span&&span class=&p&&([&/span&&span class=&n&&df_train&/span&&span class=&p&&,&/span& &span class=&n&&df_test&/span&&span class=&p&&])&/span&
&span class=&n&&df_full&/span& &span class=&o&&=&/span& &span class=&n&&df_full&/span&&span class=&o&&.&/span&&span class=&n&&interpolate&/span&&span class=&p&&()&/span&
&span class=&n&&df_full&/span& &span class=&o&&=&/span& &span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&get_dummies&/span&&span class=&p&&(&/span&&span class=&n&&df_full&/span&&span class=&p&&)&/span&
&span class=&n&&df_train&/span& &span class=&o&&=&/span& &span class=&n&&df_full&/span&&span class=&p&&[&/span&&span class=&n&&df_full&/span&&span class=&p&&[&/span&&span class=&s1&&'training_set'&/span&&span class=&p&&]&/span&&span class=&o&&==&/span&&span class=&kc&&True&/span&&span class=&p&&]&/span&
&span class=&n&&df_train&/span& &span class=&o&&=&/span& &span class=&n&&df_train&/span&&span class=&o&&.&/span&&span class=&n&&drop&/span&&span class=&p&&(&/span&&span class=&s1&&'training_set'&/span&&span class=&p&&,&/span& &span class=&n&&axis&/span&&span class=&o&&=&/span&&span class=&mi&&1&/span&&span class=&p&&)&/span&
&span class=&n&&df_test&/span& &span class=&o&&=&/span& &span class=&n&&df_full&/span&&span class=&p&&[&/span&&span class=&n&&df_full&/span&&span class=&p&&[&/span&&span class=&s1&&'training_set'&/span&&span class=&p&&]&/span&&span class=&o&&==&/span&&span class=&kc&&False&/span&&span class=&p&&]&/span&
&span class=&n&&df_test&/span& &span class=&o&&=&/span& &span class=&n&&df_test&/span&&span class=&o&&.&/span&&span class=&n&&drop&/span&&span class=&p&&(&/span&&span class=&s1&&'training_set'&/span&&span class=&p&&,&/span& &span class=&n&&axis&/span&&span class=&o&&=&/span&&span class=&mi&&1&/span&&span class=&p&&)&/span&
&span class=&n&&rf&/span& &span class=&o&&=&/span& &span class=&n&&RandomForestRegressor&/span&&span class=&p&&(&/span&&span class=&n&&n_estimators&/span&&span class=&o&&=&/span&&span class=&mi&&100&/span&&span class=&p&&,&/span& &span class=&n&&n_jobs&/span&&span class=&o&&=-&/span&&span class=&mi&&1&/span&&span class=&p&&)&/span&
&span class=&n&&rf&/span&&span class=&o&&.&/span&&span class=&n&&fit&/span&&span class=&p&&(&/span&&span class=&n&&df_train&/span&&span class=&p&&,&/span& &span class=&n&&target&/span&&span class=&p&&)&/span&
&span class=&n&&preds&/span& &span class=&o&&=&/span& &span class=&n&&rf&/span&&span class=&o&&.&/span&&span class=&n&&predict&/span&&span class=&p&&(&/span&&span class=&n&&df_test&/span&&span class=&p&&)&/span&
&span class=&n&&my_submission&/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=&s1&&'Id'&/span&&span class=&p&&:&/span& &span class=&n&&df_test&/span&&span class=&o&&.&/span&&span class=&n&&index&/span&&span class=&p&&,&/span& &span class=&s1&&'SalePrice'&/span&&span class=&p&&:&/span& &span class=&n&&preds&/span&&span class=&p&&})&/span&
&span class=&n&&my_submission&/span&&span class=&o&&.&/span&&span class=&n&&to_csv&/span&&span class=&p&&(&/span&&span class=&n&&f&/span&&span class=&s1&&'&/span&&span class=&si&&{PATH}&/span&&span class=&s1&&submission.csv'&/span&&span class=&p&&,&/span& &span class=&n&&index&/span&&span class=&o&&=&/span&&span class=&kc&&False&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&&br&&/p&&p&&b&说明&/b&&/p&&p&在将训练集和测试集分别加载进 DataFrame 之后,我保存了目标变量,并在 DataFrame 中删除它(因为我只想保留 DataFrame 中的独立变量和特征)。随后,我在训练集和测试集中添加了一个新的临时列('training_set'),以便我们可以将它们连接在一起(将它们放在同一个 DataFrame 中),然后再将它们分开。我们继续整合它们,填充缺失的数值,并通过独热编码(One-Hot Encoding)将分类特征转换为数字特征。&/p&&p&正如之前所述的,随机森林(以及其他大多数算法)都会在训练集和测试集有差不多数值的情况下工作良好,所以在修改内容的时候我希望对两个数据集进行同样的修改。否则,interpolate 可能会在训练集和测试集上填入不同的数值,而 get_dummies 可能会以两种不同的方式对相同的分类特征进行编码,从而导致性能下降。随后我在将其分开,去掉临时列,构建一个有 100 个树的随机森林(通常,树越多结果越好,但这也意味着训练时间的增加),使用计算机的所有 CPU 核心(n_jobs=-1),使用训练集进行拟合,用拟合的随机森林来预测测试集的目标变量,把结果和它们各自的 Id 放在一个 DataFrame 中,并保存到 一个 CSV 文件中。随后登陆 Kaggle 页面提交 CSV 文件,大功告成!&/p&&figure&&img src=&http://pic1.zhimg.com/v2-18cc987d5f379a82f22318_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&73& data-rawheight=&24& class=&content_image& width=&73&&&/figure&&p&&br&&/p&&p&&i&原文地址:&a href=&http://link.zhihu.com/?target=https%3A//towardsdatascience.com/machine-learning-zero-to-hero-everything-you-need-in-order-to-compete-on-kaggle-for-the-first-time-cf1& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&towardsdatascience.com/&/span&&span class=&invisible&&machine-learning-zero-to-hero-everything-you-need-in-order-to-compete-on-kaggle-for-the-first-time-cf1&/span&&span class=&ellipsis&&&/span&&/a&&/i&&/p&&p&&br&&/p&&p&&b&本文为机器之心编译,转载请联系本公众号获得授权。&/b&&/p&
选自Medium作者:Oren Dar机器之心编译参与:刘晓坤、李泽南、路雪在学习过深度学习的基础知识之后,参与实践是继续提高自己的最好途径。本文将带你进入全球最大机器学习竞赛社区 Kaggle,教你如何选择自己适合的项目,构建自己的模型,提交自己的第一份成…
&figure&&img src=&https://pic1.zhimg.com/v2-930a1cec7_b.jpg& data-rawwidth=&1280& data-rawheight=&853& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-930a1cec7_r.jpg&&&/figure&&p&长达150米的仓库两侧,密密麻麻的放着超过20000台隆隆作响的机器。&/p&&p&灯光昏暗,只有LED灯在不断的闪烁着绿光。&/p&&p&巨大的噪音中,还有鼓风机和空调的声音,是他们确保了仓库不会变成一个桑拿房。&/p&&p&然而,闷热烦躁的气氛却怎么也挥之不去。&/p&&p&这就是我的工作环境,我是一名比特币矿工。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-d5e0deed062a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1000& data-rawheight=&645& class=&origin_image zh-lightbox-thumb& width=&1000& data-original=&https://pic1.zhimg.com/v2-d5e0deed062a_r.jpg&&&/figure&&p&算力巢矿场,图片来源:比特大陆官网 &/p&&p&&br&&/p&&h2&壹&/h2&&blockquote&&i&“The Times 03/Jan/2009 Chancellor on brinkof second bailout for banks”&/i&&br&&br&&i&—— 日“中本聪”在其“挖出”比特币创世区块时写下的话语,这也是同一天泰晤士报的头版标题。&/i&&/blockquote&&p&从一所学习计算机维修的专科学校毕业后,我曾跟随O2O的大潮去不同人的家里修过电脑。到了2016年底,公司烧完了融来的钱,我也就失业了。&/p&&p&当时的境地有些窘迫,不过一个朋友给我介绍这份矿工工作的时候,我还是差点以为自己听错了。&/p&&p&家乡的发小有人去矿上打工,但作为一个父老乡亲眼中已经走出山窝窝的大学生,我觉得自己还没到需要出卖体力换取生存的境地。&/p&&p&不过朋友很快就解释清楚,此矿工非彼矿工,其实要干的还是修电脑的活,只不过工作地点在遥远的内蒙古鄂尔多斯。&/p&&p&去就去吧,在大城市我也没法扎根,更何况新工作开的工资居然比北京的还高。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-1081cdd00bfc1dd32c885fc804ed6aa7_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&721& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic4.zhimg.com/v2-1081cdd00bfc1dd32c885fc804ed6aa7_r.jpg&&&/figure&&p&鄂尔多斯的比特币矿场,图片来源:华尔街见闻&/p&&p&第一次走进被同事称之为“矿场”,其实是仓库机房的工作地点时,我被巨大的轰鸣声吓的倒退了三步。&/p&&p&负责带我的组长说,我的工作就是每天巡视一遍整个仓库的机器,用手中的笔记本电脑对每一台机器进行测试。如果发现问题,就按照操作手册上说的步骤执行——重启-重新连接线路板-卸下机器交给技术部门。&/p&&p&听起来任务很简单。工作时间是三班倒,每个月一次轮换,这也不是什么问题,毕竟在鄂尔多斯这个地方,就算让我按正常的工作时间休息,也没有什么能做的。&/p&&p&不过在上了第一天班后,我冲出仓库后干的第一件事情是在淘宝上买了副耳机,后来拿了几个月工资后,又换了一副降噪的。&/p&&p&仓库里的噪音实在太大,不带耳机的话,回家睡觉的时候仍然耳鸣的像是躺在机器旁边。&/p&&p&&br&&/p&&h2&贰&/h2&&blockquote&&i&“时间就是金钱”&/i&&br&&br&&i&——贴在矿场墙上的标语&/i&&/blockquote&&p&开始的时候,我并不知道为什么这个地方叫做矿场。&/p&&p&有次休息的时候,看到同事神神秘秘的围成一圈,在对着一个屏幕念叨着什么。我凑上去一看,是一张弯弯曲曲的折线图,最上面写着几个英文字母——Bitcoin。&/p&&p&同事告诉我,这些字母翻译成中文叫比特币,而这个机房就是用来挖比特币的地方,所以被形象的称为挖矿的矿场。&/p&&p&可一个虚拟的东西,为什么会用挖这个词呢?我仍然百思不得其解。&/p&&p&同事也解释不清,让我去问组长。戴着黑框眼镜,看起来就像一个技术宅男的组长应该已经给很多人解释过,他很耐心的给我讲了这背后的原理:&/p&&p&“其实比起挖矿,获取比特币更像是美国和澳洲都有过的淘金热。&/p&&p&挖矿给人的感觉是一份付出一份收获,但在河水里淘金不一样。除了纯粹的体力劳动之外,还需要足够的耐心和很好的运气。&/p&&p&挖比特币就是这么一种感觉。&/p&&p&更确切地说,我们的挖矿是参加一场每十分钟举办一次的“饥饿游戏”,全世界的矿工都会参与,而游戏的奖品就是比特币。&/p&&p&之所以你看到现在的矿场规模这么大,是因为拿到奖品的难度在与日俱增。&/p&&p&这背后有很多原因,&b&比如参加的矿工越来越多,&/b&像我们这里的矿场,现在光中国就有百八十个,而新建的矿场大多在冰岛和俄罗斯这样荒无人烟的地方。&/p&&p&但同时,&b&单场游戏的奖品却越来越少。&/b&这是“中本聪”在创造比特币的时候就强制规定的。2012年之前,每场游戏可以产生50个奖励。之后每四年就会减半,也就是说,2017年的现在,每场游戏只会产生12.5个奖励了。而且,这游戏还有明确的结束时间,当比特币数量达到2100万枚的时候就会彻底结束。估摸下来,应该也就是2050年前后。&/p&&p&这还不算,&b&每次游戏的难度也在不断加大。&/b&怎么说?因为这游戏从本质上讲就是猜数字&i&(编者按:确切的说,挖比特币的本质是重复计算随机字符串的哈希值,并检查结果字符串是否满足头部有足够的零,但文中的组长说它是猜数字也没有错)&/i&。为了控制发行速度,正确答案的数字正在变得越来越复杂。矿工们以前可能猜十次就能猜中的数字,现在猜一千次都未必对。&/p&&p&所以我们矿场的墙上要贴上“时间就是金钱”,因为时间在这里,真的就是金钱——越早尝试,就越可能拿到新的比特币。&b&”&/b&&/p&&p&说到这里,组长突然停下来看着我。&/p&&p&我还在努力消化他刚才的那些话,突然反应过来,他是在嫌我浪费工作时间了。&/p&&p&回到岗位上我才想到,其实还有一个最重要的问题没问——拿到比特币这个奖品又如何?为什么我们要参加这样一场游戏呢?&/p&&p&&br&&/p&&h2&叁&/h2&&blockquote&&i&“我很气,毕业了,换显卡,结果全缺货,剩下的都是死贵死贵的1080ti什么的!”&/i&&br&&br&&i&——2017年7月,天猫上一家显卡专卖店的匿名评论&/i&&/blockquote&&p&关于这个问题,在不久后我自己就找到了答案,因为同事教会了我看比特币的价格图。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-f72c3b0d49a1f24e92e8148fb0baffaf_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&349& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic1.zhimg.com/v2-f72c3b0d49a1f24e92e8148fb0baffaf_r.jpg&&&/figure&&p&资料来源:&a href=&https://link.zhihu.com/?target=http%3A//Coinbase.com& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&Coinbase.com&/span&&span class=&invisible&&&/span&&/a&&/p&&p&那时还是2017年年初,一个比特币大概值1000美元,也就是6000多人民币。显然,一场每10分钟就派出70万奖金的游戏,确实没有不参加的理由。&/p&&p&而且我很快就知道了这场游戏的诀窍——那就是没有诀窍。&/p&&p&所谓的挖矿算法,也就是猜数字的方法,其实是固定而简单的,并不存在什么可以改进的地方。&/p&&p&所以赢得游戏的方法只有一个,那就是寻找在单位时间内能执行最多次算法的硬件。另外,1+1=2,谁拥有这样的硬件数量最多,谁就最有可能赢得游戏。&/p&&p&从同事那里我也知道了,整个比特币的挖矿史其实就是挖矿硬件的迭代史。&/p&&p&创世年代的时候,大家都用普通电脑的CPU挖矿,那是一个美好的、个人就能挖矿的时代。&/p&&p&到2010年,有人发现AMD出产的GPU芯片有一个特定的计算部件,可以加速猜数字的关键步骤,于是多个GPU组装成的“GPU矿机”迅速淘汰了普通电脑矿机——这也是近几年来为什么显卡和其他电脑硬件不同,价格经常不降反升,而且还老缺货。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-bce812d7b3620bda34f38b0a7aa03249_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&500& data-rawheight=&331& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic3.zhimg.com/v2-bce812d7b3620bda34f38b0a7aa03249_r.jpg&&&/figure&&p&当年的GPU矿机代表显卡——铭瑄R7 260X终结者,图片来源:中关村在线&/p&&p&再到2011年年末,FPGA(现场可编程逻辑门阵列)矿机横空出世,因为它剔除了GPU中不必要的图像计算硬件单元,所以效率大幅提升。&/p&&p&也就是在那时候,出现了第一个矿场Eligius。不过,当年的矿场还只处于萌芽期,矿工依然主要指的是全世界默默挖矿的个人电脑们。&/p&&p&而我现在每天维护的矿机,已经是第四代,也就是ASIC芯片机。比起FPGA来说,ASIC芯片牺牲了灵活性,造出来就是为了猜数字挖矿,所以效率再次有了质的飞跃。&/p&&p&&b&如果做个简单的比较,CPU的挖矿速度是1,那么GPU大概就是10,FPGA矿机的速度虽然只是8,但消耗的电能比GPU小40倍,而ASIC的挖矿速度是2000,功耗则与GPU相当。&/b&&/p&&p&这样也就很容易理解,为什么ASIC芯片一问世,就迅速将其他三类矿机赶出了市场。&/p&&p&另外,到了这个阶段,矿场已经成为挖矿的主力。因为一台主流的ASIC芯片矿机,如蚂蚁矿机S9,要卖到10000多块钱。而这时候想要挖到比特币,已经至少要上百台S9日夜不停的运转。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-c2cc2efcf5_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&551& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic1.zhimg.com/v2-c2cc2efcf5_r.jpg&&&/figure&&p&图片来源:比特大陆官网&/p&&p&排名前三的矿场迅速成为中国选手的竞技场。前些年中国在IT领域积累起来的强大供应链和制造能力,在此时发挥得淋漓尽致。&/p&&p&以比特大陆为例,因为设计出了比特币挖矿专用的ASIC芯片,于是这家公司迅速成为世界矿机界的领头羊。这两年他家的矿机销量在数十万台以上,每台矿机要用上百颗ASIC芯片,例如一台蚂蚁矿机S9就要使用189个ASIC芯片。&i&(编者按:根据媒体报道,2017年12月份,比特大陆向台积电发出的10nm晶圆订单已经超过中国芯片业霸主华为海思。)&/i&&/p&&p&我之前在北京的时候还看到过比特大陆的招聘广告。出来做分享的技术总监清一色的清华北大毕业,俨然是中国芯片设计行业一颗冉冉升起的技术新星。&/p&&p&听说2017年上半年,这家公司的净利润已经超过10亿人民币,那么在比特币继续暴涨的下半年,利润水平应该更加惊人吧。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-965c1c09dba572f248aae4e6de6a4fb5_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&1126& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic3.zhimg.com/v2-965c1c09dba572f248aae4e6de6a4fb5_r.jpg&&&/figure&&p&比特大陆有大量每日更新的招聘信息,图片来源:比特大陆公司官网&/p&&p&&br&&/p&&h2&肆&/h2&&blockquote&&i&“比特币10年内将涨至10万美元。”&/i&&br&&i&——成功预测2017年比特币价格走势的盛宝银行(Saxo Bank)分析师范·彼得森最新预言&/i&&/blockquote&&p&时间过得很快,转眼我已经在这个矿场工作了半年。&/p&&p&就在庆幸冬去春来,再也不用在东北的寒冬夜里瑟瑟发抖的时候,组长通知我们,矿场要搬家了。&/p&&p&身边的老员工都对此非常淡定,转身就开始收拾行李,留下我们一帮新人一脸懵逼不知道发生了什么。&/p&&p&后来我们才知道,像候鸟般迁徙是矿场的惯例,冬天在新疆内蒙古一带,夏天就会去四川。&/p&&p&可是几万台机器的搬家可不是件容易的事情,更何况还是横跨大半个中国,这又是为什么呢?&/p&&p&直到看到四川的矿场新家我才顿然醒悟。&/p&&p&新的工作地点就在一个水电站边上,江水在窗外奔流不息。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-2ab6ddbfae335f07a02a0c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&338& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic1.zhimg.com/v2-2ab6ddbfae335f07a02a0c_r.jpg&&&/figure&&p&大渡河边的矿场,图片来源:新浪&/p&&p&&b&对于矿场而言,收益=生产的比特币×币价-矿机成本-电费-维护费及人工成本-矿场折旧费。&/b&&/p&&p&万万没想到的是,开支的大头并不是我觉得很贵的矿机,当然也不会是我们这些廉价的人力成本,而是电费。&/p&&p&事实上,早在鄂尔多斯的时候,我就觉得整个矿场像是一个用电的黑洞。&/p&&p&组长曾经在闲聊时提过,我们矿场一个小时要烧掉40兆瓦电,相当于12000个家庭的用电量。尽管当地政府给了很多优惠,但每年还是要缴纳上亿元的电费。&/p&&p&而这还是一个电力过剩,曾经被称为“鬼城”的地方。&/p&&p&还有比那里电费更便宜的地方吗?&/p&&p&有,那就是夏天丰水季节的四川。&/p&&p&沿着301国道开向四川康定的时候,一路上经过的水电站大大小小不下几十个。汹涌的江水给水电站带来了源源不断的电力,在夏天,这些电根本来不及传输出去,国家电网不得不强制要求一些水电站做二休五。&/p&&p&然而当比特币矿场如雨后春笋般出现之后,这种电站闲置的情况就不复存在了。&/p&&p&我们矿场的新址是一排整齐的蓝色塑钢大棚,依山而建,每个大棚里都有几千台矿机。水电站的发电7x24小时支持了矿机的运转,财大气粗的矿场主往往会包下整个水电站,为的就是确保自家矿机的电力供应。&/p&&p&尽管夏天的山区里只有二十多度,但每当打开大棚的门,一股热浪还是会扑面而来——几千台矿机24小时不间断运转产生的热能,可比那些普通机房大多了。&/p&&p&大棚里都配有风冷和水冷系统,硕大的风扇不断地将热浪吹向水冷墙。与其说是墙,不如说是铁丝组成的帘幕,冷水自上而下流动,被热气流吹的瞬间蒸发,同时也带走了热量。&/p&&p&这样可以保证室内的温度在多少度呢?&/p&&p&35度。&/p&&p&因此到了四川之后,矿机的损坏频率大大提高,我几乎每天都会发现几台矿机的电路板被烤出黄斑,无法修理只能更换。&/p&&p&但组长和我们说,这样依然是值得的。因为丰水季节的水电站电费边际成本接近于零,矿场直接用承包的方式买下一个电站的电力,一个月只需要四五百万人民币,远比在鄂尔多斯的时候便宜。&/p&&p&那到了枯水季节呢?我好奇的问。&/p&&p&组长叹了口气,因为这两个季节水电站的产电量可以差五到十倍,所以电价会在枯水季节往上翻好几倍。这也是为什么一到夏末秋初,矿场们就会不畏严寒向新疆和内蒙古等地迁徙。&/p&&p&不过我也观察到,无论是水电站的负责人,还是当地政府,对矿场都是非常欢迎的。因为我们无污染,绿色环保,没有工业废弃物或者污水排放,而且现款现货,是非常理想的招商引资对象。&/p&&p&同时,政府官员还可以对外宣称自己引入的是新经济产业,大数据和互联网产业的结合——准确来讲,这种说法并没有什么问题。&/p&&p&&br&&/p&&h2&伍&/h2&&blockquote&&i&“虚拟货币‘挖矿’产业属伪金融创新。”&/i&&br&&br&&i&——鄂尔多斯市互金整治办《关于引导我区虚拟货币“挖矿”企业有序退出的通知》&/i&&/blockquote&&p&我的矿工生涯在2018年年初戛然而止。&/p&&p&去年底,矿场老板把迁徙地定在了新疆。没有想到,就在刚刚过完新年的1月4日,新疆互金办发文,要求各地政府部门排查当地比特币矿场情况。&/p&&p&尽管没有说要直接取缔,但当地政府还是防患于未然的取消了之前以招商引资为由给我们的电价优惠——国家电网标准价是一度电 0.4 元左右,而之前给矿场的优惠价是一度电 0.2 元— 0.3 元之间。&/p&&p&翻了一倍的电价让矿场利润骤减,而比特币价格也结束了单边上涨的趋势。尽管我们的莱特币矿机还在赚钱,但老板还是决定见好就收,结束了这项政策风险越来越大的生意。&/p&&p&他说,越来越多的矿场在北欧、俄罗斯乃至近邻朝鲜拔地而起,那里政策风险更小,电费更低,而当地政府出于各种目的的考虑,更支持挖矿行业的发展。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-bd51fa1f6cf9_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1060& data-rawheight=&665& class=&origin_image zh-lightbox-thumb& width=&1060& data-original=&https://pic2.zhimg.com/v2-bd51fa1f6cf9_r.jpg&&&/figure&&p&Kcminer在瑞典的巨无霸矿场,当地电费折合人民币不到3毛钱,图片来源:比特币大陆&/p&&p&而在中国,从最早禁止比特币交易,到封停ICO和交易所,再到各地摸底限矿,来自监管的强大压力,让这些在牛市中挣得盆满钵满的“挖矿人”噤若寒蝉。&/p&&p&至于我身边的同事,大多因为买卖各种数字货币赚了些钱,此时就作鸟兽散——有的去了别的矿场,有的干脆彻底投身币圈做职业投资。&/p&&p&我因为进入行业太晚,买币更晚,所以并没有靠这个发财致富。但长期的矿场工作让我落下了耳鸣的毛病,医生说,如果你再在这样的环境下工作两年,听力就会永久受损了。&/p&&p&但这也不是我离开矿场的关键理由。&/p&&p&&b&事实上,是我意识到,在这里上班根本连矿工都算不上。&/b&我不懂哈希值,不懂默克尔根,区块链和数字签名只有一个懵懂的概念。我和这个号称“互联网时代的黄金”的比特币之间的联系,只有维修不完的矿机。&/p&&p&中本聪设想的那个“去中心化”、“人人平等”、“算力民主”的世界并没有到来,站在矿机外的我,和掌控算力的人,差距只在越扩越大。&/p&&p&我准备报名明年的研究生考试,重新进入校园学习知识。我要去做真正的极客,而不是一个擦灰的矿工。&/p&&p&只是,都说人间一天币圈一年。等我毕业的时候,不知这个圈子会是今夕何夕。&/p&&p&&br&&/p&&p&封面来源:&a href=&https://link.zhihu.com/?target=http%3A//Pixabay.com& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&Pixabay.com&/span&&span class=&invisible&&&/span&&/a&&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-4f58074caa9cd5babda5b0b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&696& data-rawheight=&642& class=&origin_image zh-lightbox-thumb& width=&696& data-original=&https://pic3.zhimg.com/v2-4f58074caa9cd5babda5b0b_r.jpg&&&/figure&&p&&/p&
长达150米的仓库两侧,密密麻麻的放着超过20000台隆隆作响的机器。灯光昏暗,只有LED灯在不断的闪烁着绿光。巨大的噪音中,还有鼓风机和空调的声音,是他们确保了仓库不会变成一个桑拿房。然而,闷热烦躁的气氛却怎么也挥之不去。这就是我的工作环境,我是…
&figure&&img src=&https://pic1.zhimg.com/v2-c3b00b20cffa72d4a9a1_b.jpg& data-rawwidth=&1024& data-rawheight=&768& class=&origin_image zh-lightbox-thumb& width=&1024& data-original=&https://pic1.zhimg.com/v2-c3b00b20cffa72d4a9a1_r.jpg&&&/figure&&p&版权声明:本文出自程世东的知乎,原创文章,转载请注明出处:&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&TensorFlow实战——个性化推荐&/a&。&/p&&p&请安装TensorFlow1.0,Python3.5&/p&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/chengstone/movie_recommender& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&项目地址&/a&: &a href=&http://link.zhihu.com/?target=https%3A//github.com/chengstone/movie_recommender& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&chengstone/movie_recommender&/a&&/p&&p&本项目使用文本卷积神经网络,并使用&u&&code&&a href=&http://link.zhihu.com/?target=https%3A//grouplens.org/datasets/movielens/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&MovieLens&/a&&/code&&/u&数据集完成电影推荐的任务。&/p&&p&推荐系统在日常的网络应用中无处不在,比如网上购物、网上买书、新闻app、社交网络、音乐网站、电影网站等等等等,有人的地方就有推荐。根据个人的喜好,相同喜好人群的习惯等信息进行个性化的内容推荐。比如打开新闻类的app,因为有了个性化的内容,每个人看到的新闻首页都是不一样的。&/p&&p&这当然是很有用的,在信息爆炸的今天,获取信息的途径和方式多种多样,人们花费时间最多的不再是去哪获取信息,而是要在众多的信息中寻找自己感兴趣的,这就是信息超载问题。为了解决这个问题,推荐系统应运而生。&/p&&p&协同过滤是推荐系统应用较广泛的技术,该方法搜集用户的历史记录、个人喜好等信息,计算与其他用户的相似度,利用相似用户的评价来预测目标用户对特定项目的喜好程度。优点是会给用户推荐未浏览过的项目,缺点呢,对于新用户来说,没有任何与商品的交互记录和个人喜好等信息,存在冷启动问题,导致模型无法找到相似的用户或商品。&/p&&p&为了解决冷启动的问题,通常的做法是对于刚注册的用户,要求用户先选择自己感兴趣的话题、群组、商品、性格、喜欢的音乐类型等信息,比如豆瓣FM:&/p&&figure&&img src=&http://pic3.zhimg.com/v2-0aed0ec830a5e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&300& data-rawheight=&533& class=&content_image& width=&300&&&/figure&&h2&&b&先来看看数据&/b&&/h2&&p&本项目使用的是MovieLens 1M &a href=&http://link.zhihu.com/?target=http%3A//files.grouplens.org/datasets/movielens/ml-1m.zip& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据集&/a&,包含6000个用户在近4000部电影上的1亿条评论。&/p&&p&数据集分为三个文件:用户数据users.dat,电影数据movies.dat和评分数据ratings.dat。&/p&&h2&&b&用户数据&/b&&/h2&&p&分别有用户ID、性别、年龄、职业ID和邮编等字段。&/p&&p&数据中的格式:UserID::Gender::Age::Occupation::Zip-code&/p&&ul&&li&Gender is denoted by a &M& for male and &F& for female&/li&&li&Age is chosen from the following ranges:&/li&&ul&&li&1: &Under 18&&/li&&li&18: &18-24&&/li&&li&25: &25-34&&/li&&li&35: &35-44&&/li&&li&45: &45-49&&/li&&li&50: &50-55&&/li&&li&56: &56+&&/li&&/ul&&li&Occupation is chosen from the following choices:&/li&&ul&&li&0: &other& or not specified&/li&&li&1: &academic/educator&&/li&&li&2: &artist&&/li&&li&3: &clerical/admin&&/li&&li&4: &college/grad student&&/li&&li&5: &customer service&&/li&&li&6: &doctor/health care&&/li&&li&7: &executive/managerial&&/li&&li&8: &farmer&&/li&&li&9: &homemaker&&/li&&li&10: &K-12 student&&/li&&li&11: &lawyer&&/li&&li&12: &programmer&&/li&&li&13: &retired&&/li&&li&14: &sales/marketing&&/li&&li&15: &scientist&&/li&&li&16: &self-employed&&/li&&li&17: &technician/engineer&&/li&&li&18: &tradesman/craftsman&&/li&&li&19: &unemployed&&/li&&li&20: &writer&&/li&&/ul&&/ul&&figure&&img src=&http://pic2.zhimg.com/v2-c4a7acc04b899_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&694& data-rawheight=&338& class=&origin_image zh-lightbox-thumb& width=&694& data-original=&http://pic2.zhimg.com/v2-c4a7acc04b899_r.jpg&&&/figure&&p&可以看出UserID、Gender、Age和Occupation都是类别字段,其中邮编字段是我们不使用的。&/p&&h2&&b&电影数据&/b&&/h2&&p&分别有电影ID、电影名和电影风格等字段。&/p&&p&数据中的格式:MovieID::Title::Genres&/p&&ul&&li&Titles are identical to titles provided by the IMDB (including year of release)&/li&&li&Genres are pipe-separated and are selected from the following genres:&/li&&ul&&li&Action&/li&&li&Adventure&/li&&li&Animation&/li&&li&Children's&/li&&li&Comedy&/li&&li&Crime&/li&&li&Documentary&/li&&li&Drama&/li&&li&Fantasy&/li&&li&Film-Noir&/li&&li&Horror&/li&&li&Musical&/li&&li&Mystery&/li&&li&Romance&/li&&li&Sci-Fi&/li&&li&Thriller&/li&&li&War&/li&&li&Western&/li&&/ul&&/ul&&figure&&img src=&http://pic1.zhimg.com/v2-0f74a01bcb4d9204dcaca0_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&906& data-rawheight=&334& class=&origin_image zh-lightbox-thumb& width=&906& data-original=&http://pic1.zhimg.com/v2-0f74a01bcb4d9204dcaca0_r.jpg&&&/figure&&p&MovieID是类别字段,Title是文本,Genres也是类别字段&/p&&h2&&b&评分数据&/b&&/h2&&p&分别有用户ID、电影ID、评分和时间戳等字段。&/p&&p&数据中的格式:UserID::MovieID::Rating::Timestamp&/p&&ul&&li&UserIDs range between 1 and 6040 &/li&&li&MovieIDs range between 1 and 3952&/li&&li&Ratings are made on a 5-star scale (whole-star ratings only)&/li&&li&Timestamp is represented in seconds since the epoch as returned by time(2)&/li&&li&Each user has at least 20 ratings&/li&&/ul&&figure&&img src=&http://pic4.zhimg.com/v2-a942da1430ead1eb148f4f58d0b9fb67_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&562& data-rawheight=&328& class=&origin_image zh-lightbox-thumb& width=&562& data-original=&http://pic4.zhimg.com/v2-a942da1430ead1eb148f4f58d0b9fb67_r.jpg&&&/figure&&p&评分字段Rating就是我们要学习的targets,时间戳字段我们不使用。&/p&&h2&&b&说说数据预处理&/b&&/h2&&ul&&li&UserID、Occupation和MovieID不用变。&/li&&li&Gender字段:需要将‘F’和‘M’转换成0和1。&/li&&li&Age字段:要转成7个连续数字0~6。&/li&&li&Genres字段:是分类字段,要转成数字。首先将Genres中的类别转成字符串到数字的字典,然后再将每个电影的Genres字段转成数字列表,因为有些电影是多个Genres的组合。&/li&&li&Title字段:处理方式跟Genres字段一样,首先创建文本到数字的字典,然后将Title中的描述转成数字的列表。另外Title中的年份也需要去掉。&/li&&li&Genres和Title字段需要将长度统一,这样在神经网络中方便处理。空白部分用‘& PAD &’对应的数字填充。&/li&&/ul&&p&数据预处理的代码请参见&a href=&http://link.zhihu.com/?target=https%3A//github.com/chengstone/movie_recommender& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&项目&/a&。&/p&&h2&&b&模型设计&/b&&/h2&&figure&&img src=&http://pic2.zhimg.com/v2-c3b00b20cffa72d4a9a1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1024& data-rawheight=&768& class=&origin_image zh-lightbox-thumb& width=&1024& data-original=&http://pic2.zhimg.com/v2-c3b00b20cffa72d4a9a1_r.jpg&&&/figure&&p&通过研究数据集中的字段类型,我们发现有一些是类别字段,通常的处理是将这些字段转成one hot编码,但是像UserID、MovieID这样的字段就会变成非常的稀疏,输入的维度急剧膨胀,这是我们不愿意见到的,毕竟我这小笔记本不像大厂动辄能处理数以亿计维度的输入:)&/p&&p&所以在预处理数据时将这些字段转成了数字,我们用这个数字当做嵌入矩阵的索引,在网络的第一层使用了嵌入层,维度是(N,32)和(N,16)。&/p&&p&电影类型的处理要多一步,有时一个电影有多个电影类型,这样从嵌入矩阵索引出来是一个(n,32)的矩阵,因为有多个类型嘛,我们要将这个矩阵求和,变成(1,32)的向量。&/p&&p&电影名的处理比较特殊,没有使用循环神经网络,而是用了文本卷积网络,下文会进行说明。&/p&&p&从嵌入层索引出特征以后,将各特征传入全连接层,将输出再次传入全连接层,最终分别得到(1,200)的用户特征和电影特征两个特征向量。&/p&&p&我们的目的就是要训练出用户特征和电影特征,在实现推荐功能时使用。得到这两个特征以后,就可以选择任意的方式来拟合评分了。我使用了两种方式,一个是上图中画出的将两个特征做向量乘法,将结果与真实评分做回归,采用MSE优化损失。因为本质上这是一个回归问题,另一种方式是,将两个特征作为输入,再次传入全连接层,输出一个值,将输出值回归到真实评分,采用MSE优化损失。&/p&&p&实际上第二个方式的MSE loss在0.8附近,第一个方式在1附近,5次迭代的结果。&/p&&h2&&b&文本卷积网络&/b&&/h2&&p&网络看起来像下面这样&/p&&figure&&img src=&http://pic3.zhimg.com/v2-3abea_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1928& data-rawheight=&778& class=&origin_image zh-lightbox-thumb& width=&1928& data-original=&http://pic3.zhimg.com/v2-3abea_r.jpg&&&/figure&&p&图片来自Kim Yoon的论文:&u&&code&&a href=&http://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Convolutional Neural Networks for Sentence Classification&/a&&/code&&/u&&/p&&p&将卷积神经网络用于文本的文章建议你阅读&u&&code&&a href=&http://link.zhihu.com/?target=http%3A//www.wildml.com/2015/11/understanding-convolutional-neural-networks-for-nlp/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Understanding Convolutional Neural Networks for NLP&/a&&/code&&/u&&/p&&p&网络的第一层是词嵌入层,由每一个单词的嵌入向量组成的嵌入矩阵。下一层使用多个不同尺寸(窗口大小)的卷积核在嵌入矩阵上做卷积,窗口大小指的是每次卷积覆盖几个单词。这里跟对图像做卷积不太一样,图像的卷积通常用2x2、3x3、5x5之类的尺寸,而文本卷积要覆盖整个单词的嵌入向量,所以尺寸是(单词数,向量维度),比如每次滑动3个,4个或者5个单词。第三层网络是max pooling得到一个长向量,最后使用dropout做正则化,最终得到了电影Title的特征。&/p&&h2&核心代码讲解&/h2&&p&全部代码请参见&a href=&http://link.zhihu.com/?target=https%3A//github.com/chengstone/movie_recommender& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&项目&/a&。&/p&&div class=&highlight&&&pre&&code class=&language-python3&&&span&&/span&&span class=&c1&&#嵌入矩阵的维度&/span&
&span class=&n&&embed_dim&/span& &span class=&o&&=&/span& &span class=&mi&&32&/span&
&span class=&c1&&#用户ID个数&/span&
&span class=&n&&uid_max&/span& &span class=&o&&=&/span& &span class=&nb&&max&/span&&span class=&p&&(&/span&&span class=&n&&features&/span&&span class=&o&&.&/span&&span class=&n&&take&/span&&span class=&p&&(&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span&&span class=&mi&&1&/span&&span class=&p&&))&/span& &span class=&o&&+&/span& &span class=&mi&&1&/span& &span class=&c1&&# 6040&/span&
&span class=&c1&&#性别个数&/span&
&span class=&n&&gender_max&/span& &span class=&o&&=&/span& &span class=&nb&&max&/span&&span class=&p&&(&/span&&span class=&n&&features&/span&&span class=&o&&.&/span&&span class=&n&&take&/span&&span class=&p&&(&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span&&span class=&mi&&1&/span&&span class=&p&&))&/span& &span class=&o&&+&/span& &span class=&mi&&1&/span& &span class=&c1&&# 1 + 1 = 2&/span&
&span class=&c1&&#年龄类别个数&/span&
&span class=&n&&age_max&/span& &span class=&o&&=&/span& &span class=&nb&&max&/span&&span class=&p&&(&/span&&span class=&n&&features&/span&&span class=&o&&.&/span&&span class=&n&&take&/span&&span class=&p&&(&/span&&span class=&mi&&3&/span&&span class=&p&&,&/span&&span class=&mi&&1&/span&&span class=&p&&))&/span& &span class=&o&&+&/span& &span class=&mi&&1&/span& &span class=&c1&&# 6 + 1 = 7&/span&
&span class=&c1&&#职业个数&/span&
&span class=&n&&job_max&/span& &span class=&o&&=&/span& &span class=&nb&&max&/span&&span class=&p&&(&/span&&span class=&n&&features&/span&&span class=&o&&.&/span&&span class=&n&&take&/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=&o&&+&/span& &span class=&mi&&1&/span&&span class=&c1&&# 20 + 1 = 21&/span&
&span class=&c1&&#电影ID个数&/span&
&span class=&n&&movie_id_max&/span& &span class=&o&&=&/span& &span class=&nb&&max&/span&&span class=&p&&(&/span&&span class=&n&&features&/span&&span class=&o&&.&/span&&span class=&n&&take&/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=&o&&+&/span& &span class=&mi&&1&/span& &span class=&c1&&# 3952&/span&
&span class=&c1&&#电影类型个数&/span&
&span class=&n&&movie_categories_max&/span& &span class=&o&&=&/span& &span class=&nb&&max&/span&&span class=&p&&(&/span&&span class=&n&&genres2int&/span&&span class=&o&&.&/span&&span class=&n&&values&/span&&span class=&p&&())&/span& &span class=&o&&+&/span& &span class=&mi&&1&/span& &span class=&c1&&# 18 + 1 = 19&/span&
&span class=&c1&&#电影名单词个数&/span&
&span class=&n&&movie_title_max&/span& &span class=&o&&=&/span& &span class=&nb&&len&/span&&span class=&p&&(&/span&&span class=&n&&title_set&/span&&span class=&p&&)&/span& &span class=&c1&&# 5216&/span&
&span class=&c1&&#对电影类型嵌入向量做加和操作的标志,考虑过使用mean做平均,但是没实现mean&/span&
&span class=&n&&combiner&/span& &span class=&o&&=&/span& &span class=&s2&&&sum&&/span&
&span class=&c1&&#电影名长度&/span&
&span class=&n&&sentences_size&/span& &span class=&o&&=&/span& &span class=&n&&title_count&/span& &span class=&c1&&# = 15&/span&
&span class=&c1&&#文本卷积滑动窗口,分别滑动2, 3, 4, 5个单词&/span&
&span class=&n&&window_sizes&/span& &span class=&o&&=&/span& &span class=&p&&{&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&mi&&3&/span&&span class=&p&&,&/span& &span class=&mi&&4&/span&&span class=&p&&,&/span& &span class=&mi&&5&/span&&span class=&p&&}&/span&
&span class=&c1&&#文本卷积核数量&/span&
&span class=&n&&filter_num&/span& &span class=&o&&=&/span& &span class=&mi&&8&/span&
&span class=&c1&&#电影ID转下标的字典,数据集中电影ID跟下标不一致,比如第5行的数据电影ID不一定是5&/span&
&span class=&n&&movieid2idx&/span& &span class=&o&&=&/span& &span class=&p&&{&/span&&span class=&n&&val&/span&&span class=&p&&[&/span&&span class=&mi&&0&/span&&span class=&p&&]:&/span&&span class=&n&&i&/span& &span class=&k&&for&/span& &span class=&n&&i&/span&&span class=&p&&,&/span& &span class=&n&&val&/span& &span class=&ow&&in&/span& &span class=&nb&&enumerate&/span&&span class=&p&&(&/span&&span class=&n&&movies&/span&&span class=&o&&.&/span&&span class=&n&&values&/span&&span class=&p&&)}&/span&
&/code&&/pre&&/div&&p&&b&超参&/b&&/p&&div class=&highlight&&&pre&&code class=&language-python3&&&span&&/span&&span class=&c1&&# Number of Epochs&/span&
&span class=&n&&num_epochs&/span& &span class=&o&&=&/span& &span class=&mi&&5&/span&
&span class=&c1&&# Batch Size&/span&
&span class=&n&&batch_size&/span& &span class=&o&&=&/span& &span class=&mi&&256&/span&
&span class=&n&&dropout_keep&/span& &span class=&o&&=&/span& &span class=&mf&&0.5&/span&
&span class=&c1&&# Learning Rate&/span&
&span class=&n&&learning_rate&/span& &span class=&o&&=&/span& &span class=&mf&&0.0001&/span&
&span class=&c1&&# Show stats for every n number of batches&/span&
&span class=&n&&show_every_n_batches&/span& &span class=&o&&=&/span& &span class=&mi&&20&/span&
&span class=&n&&save_dir&/span& &span class=&o&&=&/span& &span class=&s1&&'./save'&/span&
&/code&&/pre&&/div&&p&&b&输入&/b&&/p&&p&定义输入的占位符&/p&&div class=&highlight&&&pre&&code class=&language-python3&&&span&&/span&&span class=&k&&def&/span& &span class=&nf&&get_inputs&/span&&span class=&p&&():&/span&
&span class=&n&&uid&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&placeholder&/span&&span class=&p&&(&/span&&span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&int32&/span&&span class=&p&&,&/span& &span class=&p&&[&/span&&span class=&kc&&None&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&],&/span& &span class=&n&&name&/span&&span class=&o&&=&/span&&span class=&s2&&&uid&&/span&&span class=&p&&)&/span&
&span class=&n&&user_gender&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&placeholder&/span&&span class=&p&&(&/span&&span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&int32&/span&&span class=&p&&,&/span& &span class=&p&&[&/span&&span class=&kc&&None&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&],&/span& &span class=&n&&name&/span&&span class=&o&&=&/span&&span class=&s2&&&user_gender&&/span&&span class=&p&&)&/span&
&span class=&n&&user_age&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&placeholder&/span&&span class=&p&&(&/span&&span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&int32&/span&&span class=&p&&,&/span& &span class=&p&&[&/span&&span class=&kc&&None&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&],&/span& &span class=&n&&name&/span&&span class=&o&&=&/span&&span class=&s2&&&user_age&&/span&&span class=&p&&)&/span&
&span class=&n&&user_job&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&placeholder&/span&&span class=&p&&(&/span&&span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&int32&/span&&span class=&p&&,&/span& &span class=&p&&[&/span&&span class=&kc&&None&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&],&/span& &span class=&n&&name&/span&&span class=&o&&=&/span&&span class=&s2&&&user_job&&/span&&span class=&p&&)&/span&
&span class=&n&&movie_id&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&placeholder&/span&&span class=&p&&(&/span&&span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&int32&/span&&span class=&p&&,&/span& &span class=&p&&[&/span&&span class=&kc&&None&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&],&/span& &span class=&n&&name&/span&&span class=&o&&=&/span&&span class=&s2&&&movie_id&&/span&&span class=&p&&)&/span&
&span class=&n&&movie_categories&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&placeholder&/span&&span class=&p&&(&/span&&span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&int32&/span&&span class=&p&&,&/span& &span class=&p&&[&/span&&span class=&kc&&None&/span&&span class=&p&&,&/span& &span class=&mi&&18&/span&&span class=&p&&],&/span& &span class=&n&&name&/span&&span class=&o&&=&/span&&span class=&s2&&&movie_categories&&/span&&span class=&p&&)&/span&
&span class=&n&&movie_titles&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&placeholder&/span&&span class=&p&&(&/span&&span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&int32&/span&&span class=&p&&,&/span& &span class=&p&&[&/span&&span class=&kc&&None&/span&&span class=&p&&,&/span& &span class=&mi&&15&/span&&span class=&p&&],&/span& &span class=&n&&name&/span&&span class=&o&&=&/span&&span class=&s2&&&movie_titles&&/span&&span class=&p&&)&/span&
&span class=&n&&targets&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&placeholder&/span&&span class=&p&&(&/span&&span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&int32&/span&&span class=&p&&,&/span& &span class=&p&&[&/span&&span class=&kc&&None&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&],&/span& &span class=&n&&name&/span&&span class=&o&&=&/span&&span class=&s2&&&targets&&/span&&span class=&p&&)&/span&
&span class=&n&&LearningRate&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&placeholder&/span&&span class=&p&&(&/span&&span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&float32&/span&&span class=&p&&,&/span& &span class=&n&&name&/span& &span class=&o&&=&/span& &span class=&s2&&&LearningRate&&/span&&span class=&p&&)&/span&
&span class=&n&&dropout_keep_prob&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&placeholder&/span&&span class=&p&&(&/span&&span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&float32&/span&&span class=&p&&,&/span& &span class=&n&&name&/span& &span class=&o&&=&/span& &span class=&s2&&&dropout_keep_prob&&/span&&span class=&p&&)&/span&
&span class=&k&&return&/span& &span class=&n&&uid&/span&&span class=&p&&,&/span& &span class=&n&&user_gender&/span&&span class=&p&&,&/span& &span class=&n&&user_age&/span&&span class=&p&&,&/span& &span class=&n&&user_job&/span&&span class=&p&&,&/span& &span class=&n&&movie_id&/span&&span class=&p&&,&/span& &span class=&n&&movie_categories&/span&&span class=&p&&,&/span& &span class=&n&&movie_titles&/span&&span class=&p&&,&/span& &span class=&n&&targets&/span&&span class=&p&&,&/span& &span class=&n&&LearningRate&/span&&span class=&p&&,&/span& &span class=&n&&dropout_keep_prob&/span&
&/code&&/pre&&/div&&h2&&b&构建神经网络&/b&&/h2&&p&&b&定义User的嵌入矩阵&/b&&/p&&div class=&highlight&&&pre&&code class=&language-python3&&&span&&/span&&span class=&k&&def&/span& &span class=&nf&&get_user_embedding&/span&&span class=&p&&(&/span&&span class=&n&&uid&/span&&sp}

我要回帖

更多关于 游戏人生第二季2017 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信