• [分享交流] 机器学习第一部分:python库相关(含附件)
    作者|程哥应某些要求,发布第一部分内容,主要是python中机器学习相关的库函数,本人胶片水平有限,大家见谅~~机器学习python库相关.pdf( 预览 )
  • [技术干货] 机器学习的资料,有视频,文档和代码,大家充充电吧
           [hide]链接:https://pan.baidu.com/s/1eok5XNkaz0-M4hLtlHG7Cw提取码:6qi8链接:https://pan.baidu.com/s/1ZKJyE1DIyLzab_X4VDFa0w提取码:qjw4链接:https://pan.baidu.com/s/1BSZGTBzLAaLU5rv_DCaiVQ提取码:99mv链接:https://pan.baidu.com/s/1D5jB9x01jSqZJHbau_1NUA提取码:qacv链接:https://pan.baidu.com/s/1x7OKM3qaFAezCVUvDOLUrA提取码:wmq9链接:https://pan.baidu.com/s/12Hz6q31dOHHSZ3aioUr-wg提取码:as06链接:https://pan.baidu.com/s/1BBVjyRuqrytW6uQHbdsSRA提取码:hhzr链接:https://pan.baidu.com/s/1fV6-eukcob2gA4Jc67BpDg提取码:ndq9链接:https://pan.baidu.com/s/17l7mHA23LeAajTpkPbGMkw提取码:0w5h链接:https://pan.baidu.com/s/19lpHpyIPRo2TfEaVdJlZug提取码:u0pk链接:https://pan.baidu.com/s/1hyFJuZ4DIlDcQ9C3-OqzKw提取码:vunh链接:https://pan.baidu.com/s/1YxtEm9-sW8U5VztJQEv0SA提取码:1ctq链接:https://pan.baidu.com/s/1dHsQDaNPwpsW91yLq5yC3Q提取码:kd6i链接:https://pan.baidu.com/s/1aziQ5NMAhFA28RdxAXpTmA提取码:aegs链接:https://pan.baidu.com/s/110W_OL0d5gNE5Oq25zUiwg提取码:ilvw  [/hide]
  • [热门活动] 华为云机器学习服务于2018年6月15日00:00(北京时间)转商通知
    尊敬的华为云客户:华为云计划于2018/06/15 00:00:00将机器学习服务(Machine Learning Service)正式转商用。机器学习服务(Machine Learning Service),帮助用户通过机器学习技术快速发现数据规律和构建预测模型,并将其部署为预测分析解决方案。服务正式商用后,在公测期间(2018/06/15 00:00:00之前)创建专属版实例或者标准版实例可以继续使用。转商后按使用时长计费,收费价格请参考该服务的计费详情页。华为云在此提醒您,如果不再使用机器学习,请在上述时间前删除公测期间创建机器学习实例,避免产生不必要的费用,由此导致的损失将由您自行承担。更多关于机器学习的产品介绍,请您点击了解。如您在使用过程中有宝贵意见,欢迎您拨打华为云服务热线:4000-955-988与我们联系。感谢您对华为云的支持!来自:https://www.huaweicloud.com/notice/2018/20180608102202769.html
  • 分享:我的第一次数据科学家实习经历
    「数据科学家」可谓是近几年的一大热门职位,很多学习了数学、信息、计算机相关专业的同学都对它表示跃跃欲试。Admond Lee 学习了物理专业,曾参加瑞典欧洲核子研究中心(CERN)的物理夏令营,而今他也走上了数据科学家的道路。近期他撰文回忆了自己的数据科学家实习经历,编译如下。Admond Lee:在写本文时,正是我在 Quantum Invention 做数据科学家实习生的倒数第二天。此刻,我坐在笔记本电脑屏幕前,再回想起过去几个月的学习历程,非常艰辛但充满成就感。旅程总有终点,但问题长存––––你学到了什么?这就是你想要的吗?作为一个搞物理的人,请原谅我总是问正确的问题,以适当的回答来寻求真理。事实上,作为一个数据科学家,提出正确的问题毫无疑问是重要的(后面将会解释…)给你们大致介绍下,这篇文章主要分为三个部分(实习前、实习期间和实习后)来讲述我的实习旅程的经历。根据你的目前的学习阶段可跳转到任意部分。让旅程开始吧!谢谢您!当我在 Medium 上发表的第一篇文章时,我情绪高涨。因为其受到了非常多人的大力支持,甚至因其特色而发表在了 towardsdatascience.com 。这真的成为我继续与更多的人分享我的学习经验的动力,仅仅是因为学习乐趣,帮助他人变得更好!实习之前我仍然清楚地记得,在 2017 年 11 月我的期末考试结束后,我开始阅读课本,《统计机器学习入门—R语言的应用》。这是我在基本和统计层面上第一次接触到机器学习。一旦我掌握了这些概念,我就开始学习一门流行的课程,那就是吴恩达在慕课上教的《机器学习》课程。一开始课程内容并没有大家预想的那么容易,但是吴恩达却一直能抓住大家的注意力,尽管许多概念都很复杂,但都能被他简化以便于理解消化,似乎没有其他人能做到。我想这就是我真正学会机器学习的原因。我敢打赌,试一试你就会知道机器学习这个热门词汇并不像听起来那么复杂。同时,我还学习了人工智能的另一个重点领域––––深度学习。回顾一下,这个看似外来用语其究竟是什么含义,请看神经网络的解释以及神经网络可用来计算任何函数。好了,如果读完了推荐的文章之后,还像我一样,总是需要某种可视化以了解事物是如何工作的,那就请点击这里,按「播放」按钮,坐下来,放松,观察神经网络是如何用来做分类和回归的。很酷,不是吗?所有的阅读、学习和作业都为我 2017 年 12 月的实习做好了准备。实习期间我申请的 Quantum Invention 公司致力于利用其集成的移动性应用套件、企业物流与分析平台向消费者、企业和政府提供移动性情报。而我是第一个加入 R&D 和分析团队的数据科学家实习生。在接下来的几天里,我认识了许多同事,了解到各种行业术语,以及正在进行的令人兴奋的项目。实习过程中我最喜欢的一点是信任和自由,作为实习生我可以自由选择我感兴趣的项目并全力以赴!令我惊讶的是,我意识到我是第一个开始这个项目的人,因为以前没有人这么做过。当没有人做过某事时,就需要研究,这是我感激的地方,尽管带有不确定性和困难。为什么?仅仅因为我有机会体验从零开始进行数据科学工作的整个流程(如果不是全部)。请允许我列出我所经历过的这些工作流程,因为这些建立了我的数据科学基础。我希望你在某一天发现它有用。1. 了解商业问题所选择的项目是短期高速公路行驶时间预测。看起来似乎非常简单,然而就像我说的,问正确的问题对于数据科学家来说是非常重要的。在项目最终确定之前,提出了很多问题来真正理解真实的商业问题,包括数据来源、项目的最终目标(甚至在我离开之后)等。从本质上讲,我们的目标是预测未来几分钟在新加坡高速公路的行驶时间且要比当前的基线估计更准确。2. 采集数据在新项目的激励下,我开始从数据库和同事那里收集数据(基本上是在办公室四处走动,询问数据源的问题)。收集正确的数据类似于从各种不同的数据网站中提取数据然后进行数据预处理的情况。这是非常重要的,它能影响你在后期构建的模型的准确性。3. 数据预处理真实世界的数据是脏的。我们不能指望数据像 Kaggle 提供的那样格式整洁且没有噪声。因此,数据预处理(其他人可能称之为数据整理或数据清理)是非常重要的,以至于我不得不多次强调它有的重要性。它是最重要的一个阶段,因为它可以占据整个工作流的 40% 到 70% 的时间,只是为了清理数据以供你的模型使用。我喜欢数据科学的一件事是你必须对你自己诚实。当你不知道你还不知道什么的时候,你就会开始觉得数据预处理已经足够干净,并准备把它用在你的模型上,此时就存在着用错误数据试图建立正确模型的风险。换句话说,总是不断质疑自己,用你拥有的领域知识判断数据在技术上是否是正确的,请严格而仔细地检验数据,以检查在整个数据集中任何其他的离群值,缺失或不一致的数据。有一次,我喂给模型的数据是错误的,只是因为在预处理步骤中的一个简单错误,在犯了这个错误后我特别小心。4. 建立模型经过研究,我提出了支持向量回归(SVR)、多层感知器(MLP)、长短期记忆网络(LSTM)和状态空间神经网络(SSNN)四种模型并用在我的项目中。此处不详细展开,你可以在许多网站上找到每个模型的详细解释的资料。对于一个像我这种仍在学习慕客课程以及教科书的人看来,从头开始构建各种不同的模型是一个陡峭的学习路线。幸运的是,Scikit-learn 和 Keras(采用 Tensorflow 作为后端)算是我的一个救星,因为它们很容易让你快速学习模型原型且是采用 Python 实现的。此外,我还学会了如何优化模型及使用各种各样的技术微调每个模型的超参数。5. 模型的评价为了评估每个模型的性能,我主要使用以下的一些度量:[*]平均绝对误差(MAE) [*]均方误差(MSE) [*]决定系数(R2)在这个阶段,上述步骤 3 - 5 被重复(互换)直到确定最佳模型能够超过基线模型的估计精度。实习之后嗯,实习已经印证加强了我对数据科学的热情,我很感激我的实习工作,其确实为我将来工作带来了一些动力。在研究和开发阶段,与不同的利益相关者交谈所需的沟通技巧、用数据来解决商业问题的好奇心和热情等等方面都提高了我对此领域的兴趣。数据科学行业仍然很年轻,它的工作描述对我们这样的求职者来说可能显得模糊不清。不具备所有需要的技能是非常正常的,因为大多数工作描述是理想化的,以符合他们的最佳期望。当有疑问时,只要从慕课、书籍和文章(我现在还在做的)中学习基本原理,然后通过你自己的个人项目或实习来运用你所学到的东西。要有耐心。学习之旅需要时间。津津有味地去开始你的学习旅程吧。因为…旅程总有终点,但问题长存–––– 你学到了什么?这就是你想要的吗?
  • [热门活动] 世界读书日,华为云市场为你严选了这批书单
    书籍,是文化的重要载体;读书,是提升自我的重要方式。世界读书日来临之际,华为云市场为你严选了这批书单,和爱学习的你一起多读书,读好书,让阅读成为一种习惯。1、《深度学习》:作者:[美]Ian Goodfellow(伊恩·古德费洛)[加]Yoshua Bengio(约书亚·本吉奥) [加]AaronCourville(亚伦·库维尔)推荐理由:人工智能算法,机器学习奠基之作,AI圣经内容概述:深度学习是机器学习的一个分支,它能够使计算机通过层次概念来学习经验和理解世界。本书会介绍深度学习领域的许多主题,囊括了数学及相关概念的背景知识,包括线性代数、概率论、信息论、数值优化以及机器学习中的相关内容。同时,它还介绍了工业界中实践者用到的深度学习技术,包括深度前馈网络、正则化、优化算法、卷积网络、序列建模和实践方法等,并且调研了诸如自然语言处理、语音识别、计算机视觉、在线推荐系统、生物信息学以及视频游戏方面的应用。还提供了一些研究方向,涵盖的理论主题包括线性因子模型、自编码器、表示学习、结构化概率模型、蒙特卡罗方法、配分函数、近似推断以及深度生成模型2、《机器学习》作者:周志华推荐理由:人工智能领域中文的开山之作,回答了有关机器学习的六大疑问,深入浅出,外行也能读懂。内容概述:这是一本面向中文读者的机器学习教科书, 为了使尽可能多的读者通过本书对机器学习有所了解, 作者试图尽可能少地使用数学知识.然而, 少量的概率、统计、代数、优化、逻辑知识似乎不可避免. 因此, 本书更适合大学三年级以上的理工科本科生和研究生,以及具有类似背景的对机器学习感兴趣的人士.3、《浪潮之巅》作者:吴军推荐理由:来自谷歌的方法论 智能时代的行动指南4、《Python核心编程》作者:[美] Al Sweigart 斯维加特推荐理由:Python编程快速上手,让繁琐工作自动化,兼顾Python2和Python3 机器学习、数据处理、网络爬虫等热门编程语言,Python开发人员的案头常备5、《Java从入门到精通》作者:明日科技推荐理由:总时长32小时同步视频演示讲解,732个典型实例,369道面试真题,616项能力测试题目,了解学习之不足。6、《鸟哥的Linux私房菜》作者:鸟哥推荐理由:教你Linux从入门到精通。适用Linux系统应用和开发及Linux运维的人员,涵盖linux内核、Linux命令行、嵌入式linux linux shell技巧精粹。7、《PPT设计思维:教你又好又快搞定幻灯片》作者:邵云蛟推荐理由:内容是PPT的灵魂所在,设计如何为内容增色,书中的实用技能教你花式玩转“胶片”8、《华为区块链白皮书》推荐理由:该白皮书系统的介绍了区块链的兴起、核心技术及原理机制、国内外产业发展现状和典型应用场景,总结了华为历年来在区块链上的研究成果,对华为云区块链服务BCS进行了详细介绍。9、《时间简史》作者:史蒂芬·霍金推荐理由:致敬未来:时间只留简史,世间再无霍金。内容概述:如果在一个清澈的、无月的夜晚仰望星空,能看到的最亮的星体最可能是金星、火星、木星和土星这几颗行星,还有巨大数目的类似太阳但离开我们远得多的恒星。事实上,当地球绕着太阳公转时,某些固定的恒星相互之间的位置确实起了非常微小的变化——它们不是完全固定不动的!华为严选,为你严选更多软件和应用https://app.huaweicloud.com/selected/
  • [热门活动] 重磅惊喜!45万体验金人人有份,就在云容器引擎CCE训练营!
    本帖最后由 关羽夫人 于 2018-4-21 11:04 编辑司马懿问诸葛亮,依依东望你望的究竟是什么?原来望的就是——华为云 容器训练营。云容器引擎CCE自诞生以来就在使用说明、用户体验上狠下功夫,帮助中心、视频教程、云图说从未间断。然而所谓百闻不如一见,看教程哪有实践操作来得印象深刻。 4月23日,容器训练营正式上线,自己动手的机会来了!训练营提供初级、进阶案例,从创建集群到创建应用一应俱全,让想要体验容器的你快速玩转CCE。 看到这里,有些看过CCE教程的老朋友脑海中可能会闪过一条“温馨”提示: 14268 对,即便CCE是免费的,在使用过程中也会消耗基础设施费用。这条提示可以说是很贴心了,连充值按钮在哪儿都写得清清楚楚,看起来像诱惑程序猿的下班铃。 但是,今天的容器训练营不一样。 14267 容器训练营 完 全 免 费,我们的口号是“体验CCE,0元创集群”! 无论新老用户,只要是首次使用云容器引擎-训练营,都能领取150代金券,人人可享。 代金券使用无门槛,无需充值即可在训练营中0门槛体验CCE的高效快捷,亲身感受华为云容器技术的内在功力。 14269下面开始体验教程: 首先,您需要登录华为云控制台,并单击体验按钮,果断领取150元代金券,否则系统将判断您为土豪哦。 请戳链接https://console.huaweicloud.com/cce2.0/?region=cn-north-1#/app/guidance/list ,开始愉快创集群吧
  • [技术干货] 学习索引结构的一些案例——Jeff Dean在SystemML会议上发布的论文(上)
    本帖最后由 难易 于 2018-4-3 10:57 编辑作者:钟成 华为云PaaS领域专家,对kubernetes及etcd比较了解,从2014年开始设计实现PaaS平台及容器集群产品 摘要: 原文: https://www.arxiv-vanity.com/papers/1712.01208/ 视频:https://www.youtube.com/watch?v=PWv4ROEvqmk 本文是Google的Fellow,Jeff Dean,把机器学习应用到系统设计的论文,原文发布在SystemML会议上,我做了翻译。 学习索引结构的一些案例The Case for Learned Index StructuresTim Kraska1 MIT Cambridge, MA kraska@mit.edu   Alex Beutel Google, Inc. Mountain View, CA alexbeutel@google.com   Ed H. Chi Google, Inc. Mountain View, CA edchi@google.com   Jeffrey Dean Google, Inc. Mountain View, CA jeff@google.com   Neoklis Polyzotis Google, Inc. Mountain View, CA npolyzotis@google.com 0. 摘要 索引是模型:B树索引可以被看作是一个模型,用于将键(Key)映射到排序数组中的值记录(Value)位置,Hash索引作为模型将键(Key)映射到未排序数组的值记录(Value)位置,BitMap索引作为模型来指示值记录(Value)是否存在。 在这个探索性研究论文中,我们从这个前提开始,并假定所有现有的索引结构都可以用其他类型的模型取代,包括我们称为学习索引的深度学习模型。关键(Key)的想法是,模型可以学习查找键(Key)的排序顺序或结构,并使用这个信息来有效地预测值记录(Value)的位置或存在。 我们从理论上分析了在哪些条件下,学习索引优于传统索引结构,并描述了设计一个好的学习索引的主要挑战。 我们的初步结果表明,通过使用神经网络,学习索引能达到比高速缓存优化的B-Tree快70%的速度,并且节省几个数量级的内存,来索引几个真实世界的数据集。 更重要的是,我们相信通过深度学习模型取代数据管理系统的核心组件对于未来的系统设计有着深远的影响,而且这项工作只是提供了一些可能的一瞥。 1. 介绍 无论何时需要有效的数据访问,索引结构都是答案,并且存在各种各样的选择来满足各种访问模式的不同需求。 例如,B树是范围查找的最佳选择(例如,在特定时间范围内检索一段值记录(Value)); HashMap在单Key查找这个领域是无敌的; 而Bloom-filter通常用于检查值记录(Value)是否存在。 由于数据库和许多其他应用的索引非常重要,因此在过去的几十年里,它们已经得到了广泛的优化,以获得更高的内存、缓存和CPU效率[ 28,48,22,11]。 然而,所有这些索引仍然是通用数据结构,假设数据的最坏情况分布,并没有利用现实世界数据中存在的更常见模式。 例如,如果目标是建立高度特定的系统,用来存储和查询具有连续整数键(Key)(Key)的固定长度值记录(Value)(例如,键(Key)(Key)从1到100M),那么设计者就不会使用常规的B树索引,因为键(Key)(Key)本身可以用作偏移量来作查找或者范围查询,达到O(1)而不是O(long n)的时间复杂度。 而且,索引内存大小将从O(n) 减小到O(1) 。也许令人惊讶的是,对于其他数据结构,相同的优化仍然是可能的。 换句话说,了解确切的数据分布可以高度优化数据库系统使用的几乎所有索引。 当然,在大多数现实世界的用例中,数据并不完全遵循已知的模式,为每个用例构建专门解决方案的代价都太高了。 然而,我们认为机器学习为挖掘数据里面的模式和相关性提供了一个机会,从而能够以低工程成本,自动合成我们称为学习索引的索引结构。 在本文中,我们探讨了学习模型(包括神经网络)在多大程度上可以用来代替传统的B树到Bloom-filter的索引结构。 这似乎与直觉相反,因为机器学习并不提供传统的索引数据结构的输入输出,并且因为最强大的机器学习模型,神经网络的计算一般认为是非常昂贵的。 然而,我们认为,这些明显的障碍都不像它们看起来那么坑爹。 相反,我们使用学习模型的方式可能会带来巨大的好处,特别是在下一代硬件上。 就输入输出的语义来说,索引在很大程度上已经是学习模型,使得用神经网络等其他类型的模型取代它们变得非常简单。 例如,B树可以被看作是一个模型,它将一个键(Key)字作为输入并预测数据值记录(Value)的位置。 Bloom-Filter是一个二元分类器,它基于一个键(Key)来预测键(Key)是否存在于一个集合中。 显然,这就存在微妙但重要的差异。 例如,Bloom-filter可能有假阳性(false positives),但没有假阴性(false negatives)。然而,正如我们将在本文中展示的那样,可以通过新颖的学习技术和/或简单的辅助数据结构解决这些差异。 在性能方面,我们观察到每个CPU都具有强大的SIMD功能,并且我们推测许多笔记本电脑和手机很快将拥有图形处理单元(GPU)或张量处理单元(TPU)。 推测CPU-SIMD / GPU / TPU的功能将越来越强大,这是合理的,因为比通用指令集更容易扩展神经网络使用的有限的(并行)数学运算。 这样,今后执行神经网络的高成本在未来可能实际上可以忽略不计。例如,Nvidia和Google的TPU已经能够在单个指令周期中执行数千次(如果不是数万次)神经网络操作[ 3 ] 。 此外,有人表示,到2025年,GPU的性能将提高1000 倍 ,而CPU发展已经停滞,不**尔定律发展[ 5 ] 。通过用神经网络取代重分支的索引结构,数据库可以从这些硬件趋势中受益。 重要的是要指出,我们并不主张用学习索引结构来完全取代传统的索引结构。 相反,我们概述了一种建立索引的新方法,它补充了现有的工作,并且可以说为一个有数十年历史的领域开辟了一个全新的研究方向。 虽然我们专注于分析只读工作负载,但我们还概述了如何将这种想法扩展到对写入频繁工作负载的索引做加速。 此外,我们简要概述如何使用相同的原则来替换数据库及其他组件的操作,包括排序和联表(join)。 如果成功,这可能导致未来数据库的开发方式和现在彻底不同。 本文的其余部分概述如下:在下一节中,我们以B树为例介绍学习索引的总体思路。 在第4节中,我们将这个想法扩展到Hash索引,并在第5节中扩展到Bloom-Filters。 所有部分都包含单独的评估和列出未解决的挑战。最后在第6部分我们讨论相关的工作,并在第7部分结束。13575图1:为什么B树是模型 2. 范围索引 索引结构已经是模型,因为它们可以“预测”给定键(Key)的值的位置。 要看到这一点,请在主键(Key)已排序的分析内存数据库(即只读)中考虑一个B树索引,如图[1](a)所示。 在这种情况下,B-Tree提供从查找键(Key)到排序的值记录(Value)阵列内的位置的映射,并保证值记录(Value)位置大于等于查找到的位置。 请注意,必须对数据进行排序以允许范围请求。 还要注意,这个相同的一般概念适用于次级索引,其中底层将是对的列表,其中键(Key)是索引属性的值,指针是对值记录(Value)的引用。 出于效率的原因,通常不会对已排序值记录(Value)的每个关键(Key)字进行索引,而只是每个n个值记录(Value)的一个键(Key),即每页面的第一个键(Key)。 [2] 这有助于显着减少索引必须存储的键(Key)数量,而不会有任何显着的性能损失。 因此,B树是一个模型,在ML术语中是回归树:它将键(Key)映射到具有最小和最大误差的位置之间(最小误差0,最大误差页面大小)并保证可以在该地区找到该键(Key)锁对应的值记录(Value)(如果存在)。 因此,我们可以用其他类型的机器学习模型(包括深度学习模型)取代B树索引,只要它们也能够提供类似的有关最小误差和最大误差的有力保证。 乍一看,可能很难为其他类型的ML模型提供相同的错误保证,但它实际上非常简单。 B-Tree仅为存储的数据提供这种保证,而不是针对所有可能的数据。 对于新数据,B树需要重新平衡,或者在机器学习的术语里面叫重新训练,通过训练来提供相同的误差保证。 这就极大地简化了问题:最小误差和最大误差是经过训练的(即存储的)数据的最大误差。 也就是说,我们唯一需要做的就是对每个键(Key)执行训练,并记住一个位置的最好和最差的位置预测。 给定一个键(Key),该模型预测哪里能找到相应的值记录(Value); 如果键(Key)存在,则保证处于由最小和最大误差定义的预测范围内。 因此,我们能够用任何其他类型的回归模型(包括线性回归或神经网络)代替B树(见图[1](b))。 现在,我们需要解决其他技术挑战,然后才能使用学习好的索引替代B树。 例如,B树具有**和查找的有限成本,并且在利用缓存方面特别好。 此外,B树可以将键(Key)映射到未连续映射到内存或磁盘的页面。 此外,如果查找关键(Key)字不存在于集合中,某些模型可能会返回最小/最大错误范围之外的位置,如果它们不是单调递增的模型。所有这些都是有趣的挑战/研究问题,会在本节中与潜在解决方案一起详细解释。 同时,使用其他类型的模型,特别是深度学习模型作为索引可以提供巨大的好处。 最重要的是,它有可能把B树log n查找成本为一个常数。 例如,假定数据集具有1M个唯一键(Key),大小在1M和2M之间(因此1,000,009存储在第10个位置上)。 在这种情况下,一个简单的线性模型,由一个单一的乘法和加法组成,可以完美地预测任何键(Key)的位置,而B树会需要做一个log n操作。 机器学习,尤其是神经网络的优点在于,他们能够学习各种各样的数据分布/混合和其他数据特征和模式。 显然,挑战在于平衡模型的复杂性与准确性。2.1 我们可以承受模型有多复杂? 来做个估算吧 为了更好地理解模型的复杂性,需要知道同样的一段时间内,遍历B树可以执行多少操作,以及学习索引需要达到什么样的精度来超过B树的精度。 考虑一个B树索引100M值记录(Value),页面大小为100(译注:也就是单个节点的子节点数量,国内有翻译为阶的)。我们可以将每个B-Tree节点视为划分空间的一种方式,减少“误差”并缩小区域以查找数据。 因此,我们说B-Tree的页面大小为100,每个节点的查找精度为1/100 ,所以我们需要遍历log(100, N)个节点。 因此,第一个节点将查找空间从100 M缩小到100 M / 100 = 1 M ,第二个节点从1 M到1 M / 100 = 10 k等等,直到找到值记录(Value)为止。 同时,遍历单个B-Tree页面需要大约50个时钟周期(我们测量了对超过100个缓存驻留记录的二分查找与遍历查找具有大致相同的性能),并且非常难以并行化 [3]。 相比之下,现代CPU可以在每个周期执行8-16个SIMD操作。 因此,只要学习索引模型的 查找精度/运算数 超过 (1/100) / 50 * 8 = 400个算术运算,学习索引模型就会更快(译注:这里隐含了一个公式,查找速度 = 查找精度/运算数,也就是单位时间内的 查找概率)。 请注意,这个估算仍假定所有B数的页都在缓存中。 单个缓存未命中花费50-100个额外的周期,因此可以允许更复杂一些的模型。 此外,机器学习的快速发展正在彻底改变游戏。 它们允许在相同的时间内运行更复杂的模型,并从CPU中卸载计算(到GPU或TPU上)。 例如,NVIDIA最新的Tesla V100 GPU能够实现120 TeraFlops的低精度的深度学习算术运算(每个时钟周期≈60,000次运算) [ 7 ]。 假设整个学习索引都载入了GPU的内存(我们在3.6节中展示这是一个非常合理的假设),在30个时钟周期内,我们可以执行100万次神经网络操作。 当然,传输输入和从GPU获取结果的延迟仍然明显较高,大约为2微秒或数千个时钟周期,但这个问题并非不可克服,可以通过批处理方式,或者更加紧密的集成CPU/ GPU / TPU [ 4 ] 。 最后,可以预期,GPU / TPU每秒的浮点/整型操作的能力和数量将继续增加,而提高CPU执行if语句性能的进展基本上停滞不前[ 5 ]。 尽管我们认为GPU / TPU是实践中采用学习索引的主要原因,但本文中我们将重点放在有限的CPU能力上,以便更好地研究通过机器学习取代/增强索引的影响,排除硬件更改的因素。13576图2:作为CDF的索引2.2范围索引模型是CDF模型 正如本节开头所述,索引是一个模型,它将一个键(Key)字作为输入并预测值记录(Value)的位置。 而对于单点查询,值记录(Value)的顺序并不重要,对于范围查询,必须根据查找关键(Key)字对数据进行排序,以便可以有效地检索范围内(例如,时间范围内)的所有数据项。 这导致了一个有趣的观察:预测给定排序数组内键(Key)的位置的模型有效地近似于累积分布函数(CDF)。 我们可以建模数据的CDF来预测位置:13577 其中p是位置估计, F (Key)是小于或等于查找键(Key) 的数据出现的概率,也就是累积分布函数(CDF, estimated cumulative distribution function, 详见这篇),N是键(Key)的总数量(另见图[2])。 这个观察开辟了一套全新的有趣方向:首先,它意味着任何一种索引字面上都需要学习数据分布。 B树通过构建回归树来“学习”数据分布。 线性回归模型将通过最小化线性函数的(平方)误差来学习数据分布。 其次,估计数据集的分布是一个众所周知的问题,学习索引可以从之前数十年的研究中受益。 第三,学习CDF对优化其他类型的索引结构和潜在算法也起着关键作用,我们将在本文后面概述。2.3 第一个,粗糙的学习索引 为了更好地理解用学习索引取代传统B树有哪些技术要求,我们使用了200M Web服务器日志值记录,目标是使用Tensorflow [ 9 ]在时间戳上建立二级索引。 我们使用ReLU激活函数训练了每层32个神经元(即32个宽度)的双层全连接神经网络; 时间戳是输入要素,位置是标签。之后,我们使用Tensorflow和Python作为前端,测量随机选择的键的查找时间(排除一开始跑的一些数据)。 在这种情况下,我们实现了每秒≈1250次预测,即,使用Tensorflow执行模型需要≈80,000纳秒(ns),甚至没算搜索时间。 预测对全量遍历几乎没有什么帮助。 作为比较,B树遍历同样数据只需要≈300 ns, 小两个数量级,搜索键(Key)空间时,并且快2-3 倍 。 其原因是多方面的: [*]Tensorflow旨在有效地运行较大的模型,而不是小型模型,因此具有显着的调用开销,尤其是在Python作为前端时。 [*]一般来说,B树,或者一般意义上的决策树,使用少量的操作就能过拟合数据,因为它们使用简单的if语句递归地分割空间。 相比之下,其他模型可以更有效地估计CDF的总体形状,但在单个数据实例级别的精确定位上有障碍。 要看到这个,请再次看看图[2] 。 该图表明,从大的视图看,CDF 函数看起来非常平滑和规则。 但是,如果放大单个值记录(Value),越来越多的非规律显示出来; 一个众所周知的统计效应。 许多数据集恰恰具有这种行为:从大局看,数据分布显得非常平滑,而越放大越难接近CDF,由于个体层面上的“随机性”。 因此,像神经网络,多项式回归等模型可能需要更多的CPU和空间从整个数据集缩小到到数千项中选择单个(译注,这里也就是在上文中指的预测误差,min/max error),单个神经网络通常需要更多的空间和CPU时间为“最后一公里”减少从数千到数百的误差。 [*]典型的ML优化目标是最小化平均误差。 但是,对于索引,我们不仅需要猜测项目的最佳位置,而且还需要实际找到它,但前面讨论的最小和最大误差率更重要。 [*]B-树的缓存效率非常高,因为它们始终将顶层节点保存在缓存中,并在需要时访问其他页面。 但是,其他模型并不像缓存和操作高效。 例如,标准神经网络需要所有权重参数来做预测,这种预测需要大量的乘法和权重参数,必须从内存中读入到缓存(译注,这里和上面的缓存都是指CPU高速缓存)。 文章较长,特分成上下两篇发送,下篇请参看: 第二部分:学习索引结构的一些案例——Jeff Dean在SystemML会议上发布的论文(下)
  • [用户故事] 一个小白的华为云深度学习服务使用体验
    本帖最后由 云飞杨 于 2018-4-3 09:24 编辑0. 为什么要试用深度学习服务? 基本不用解释,tensorflow的威力大家都知道 1. 学习tensflow入门知识参考这篇文章《TensorFlow 如何入门?》,对线性代数方面有一定门槛,里面提了一种用anaconda安装tensflow的方法,待尝试2. 申请开通DLS服务深度学习服务主页:http://www.huaweicloud.com/product/dls.html 目前还在公测中,提工单申请开通公测,可能要等一段时间 3. 开始使用 对DLS有个最粗浅的认知为: 数据集 + 模型 --训练--> 可用服务 后面的操作都按照入门的文档来操作 文档地址 http://support.huaweicloud.com/usermanual-dls/dls_01_0004.html,后面按这个步骤走, 简单介绍一下这个案例,这个任务的输入为上千张的花的图片 使用预制模型对着几类图片做学习后,生成一个远程服务, 这个服务能对一张完全新的图片做判断,判定这个花是这几种的可能性有多高 准备工作 [*]数据集说明:介绍数据集来源和数据集格式的转换。 [*]上传数据集:将数据集导入至OBS桶。 [*]上传的flower_photos.tgz是原始文件,还需要做转换,这部分的细节没有描述,基本如下: 1. 下载并安装tensorflow,墙内可用地址为 http://www.tensorfly.cn/tfdoc/get_started/os_setup.html2. 从git上clone整个model库, git clone https://github.com/tensorflow/models.git ,对于我这种python经验比较差的人来说,需要看下怎么安装model https://stackoverflow.com/questions/1471994/what-is-setup-py然后编辑那个python并运行3. 上传OBS 最后上传完,OBS里面的数据是长这样的 业务操作 [*]预置模型fine-tuning:使用预置模型,利用新数据集,通过创建训练作业得到一个新模型。 这里的拷贝至OBS这个功能做的挺好,有效降低用户焦虑选择了最大规格的 计算节点 ,提交了作业,虽然参数什么的完全不懂,按照指导上的去做32核 | 248GB | 4*P100在使用32核/ 4*P100的最强机器下,跑了41分训练完毕 补充,深度学习的同事提供了一个使用NFS训练的方案,大大提升了训练速度,只用7分钟就能训练完毕,还未上线 [*]部署预测服务:使用已训练的新模型,通过创建预测作业部署预测服务。 [*]发起预测请求:如何使用样例Demo工程向预测服务发起预测请求。 使用Java,需要调整参数,最后把这个步骤做完,java需要用绝对路径来输入图片文件 这里就给出了结果,输入图片为dandelion,也就是蒲公英的可能性为0.999以上,其他的可能性都在-7次方以下的概率里面 4.总体感受 DLS服务已经基本具备了可用的能力,
  • [技术干货] 【大赛FAQ】|2018华为软件精英挑战赛
    什么是华为软件大赛?华为软件精英挑战赛是华为公司面向在校大学生举办的大型软件竞赛,从2015年至今已成功举办三届。在软件精英挑战赛的舞台上,我相信您可以充分展示软件设计与编程的能力、享受coding解决问题的乐趣、感受软件改变世界的魅力。 本次大赛为什么使用华为云DevCloud华为云DevCloud是云上一站式DevOps开发平台,集华为近三十年研发实践和前沿理念,他是华为面向中小型企业提供的,帮助企业应对市场挑战,持续提升开发效率与开发质量的云上开发平台。 随着云化、智能化发展的持续深入,未来的研发环境也将持续向云上迁移,以利用由云平台提供的强大的智能化服务,未来的开发将真正实训“云上开发,智能开发”。 l 云上开发:一切在云端,随时随地开发,如需求/任务/Bug云上协作、代码云上协同、编码环境在云端、进度、质量、结果随时随地查看等。l 智能开发:解放人力,让机器干活,如编码智能提示、代码智能检查与修改提示、结果智能判断与问题分析等。当然,这次大赛体验的相对比较简单,本次只会使用由华为软开服务提供的项目管理、代码托管服务,具体功能如下:1、 项目管理(ProjectMan)为敏捷开发团队提供简单高效的开发协作服务,包含多项目管理、敏捷迭代、需求管理、缺陷跟踪、文档管理、看板、报表统计分析等功能。详见:http://www.huaweicloud.com/product/projectman.html2、 代码托管(CodeHub)为软件开发者提供基于Git的在线代码托管服务,包括代码克隆/下载/提交/推送/比较/合并/分支等功能。详见:http://www.huaweicloud.com/product/codehub.html其它的服务也可以根据需要自行选择使用。 赛题的练习数据集和判题用例的训练数据集之间是什么关系赛题给出的练习数据集和判题用例的训练数据集,都是来源于同一个数据中心的真实数据,只是所截取的时间段不同。 判题用例相互之间的训练数据集,是相互独立的,不同训练数据集使用的模型或参数可能不同。 初、中、高级用例的难度区分点在哪里用例的难度区分主要从如下几个方面来设计:调整要求预测时间段的长度,比如1周或2周;调整预测起始时间,比如预测起始时间与训练数据集是连续的,或者从训练数据集结束时间点之后的某个时间点开始;调整要求预测的flavor种类,比如训练数据集中数量较多的flavor或者数量较少的flavor。 判题返回时间多长?正常一次判题不超过3分钟,当递交人数较多时可能会排队等待,等待时间会相应增长。如果超过10分钟仍然没有结果,可以联系大赛人员。 判题得分与用例的关系是什么递交答案后会返回得分,但不代表所有用例都通过。需要查看日志,确认是否没有异常用例。 判题返回日志文件包括什么每次递交记录中有日志文件可以下载,该文件主要包括两部分:l 编译日志编译成功与否,以及失败原因。l 每个用例的运行异常信息用例名称及其对应的异常信息。如果异常信息为空“”,则表示用例运行无异常,即成功;否则,会有对应的错误提示。注:不会提供运行的日志、异常信息,需要参赛者自行排查。 常见的编译失败情况是什么代码中引用了第三方库。SDK均是默认在Linux下运行,如果在Windows下编辑了sh等文件,常常会出现错误。为了避免这种错误,建议在Linux下通过dos2unix命令转化后再递交。 常见的运行失败情况是什么日志中常会看到提示用例异常为“answer exit abnormal Missing output file.” 这一般是程序运行中出现异常,运行失败。 除了程序运行异常外,也要考虑是否是在Windows下编辑了运行所用的sh等文件,需要进行格式转化后再递交。 CodeHub提交代码到Master分支时提示Permission Denied正常通过官网添加成员是不会存在这个问题的,出现此问题可能是团长手动添加用户到项目中,Master分支被保护。 如果要解除分支保护,(1)单击保护分支所在行(2)根据提示信息单击“确定”,解除对该分支的保护。详细可参考:http://support.huaweicloud.com/usermanual-codehub/zh-cn_topic_0088186236.html关注大赛微信公众号掌握大赛最新资讯 戳我报名: http://codecraft.devcloud.huaweicloud.com/ 赛题解读动画传送门: http://codecraft.devcloud.huaweicloud.com/home/detail 本主题由 小原1号 于 2
  • [下午茶时光] 【Day 36--2018/3/15】令霍金担忧的人工智能将如何影响企业的IT基础架构?
    本帖最后由 Sabrina 于 2018-3-15 16:07 编辑 12396 【下午茶时光——每日精选小知识陪你喝咖啡】 近期,由于知名科学家史蒂芬·霍金的逝世,使得霍金与其"人工智能威胁论"又再次引起了广泛的关注。无论你赞不赞成霍金的观点,人工智能确实逐渐在影响每一个人的生活;而对于企业来说,人工智能的发展又会产生什么样的影响呢?本期的下午茶时光就以企业IT的角度,来跟大家探讨人工智能在未来将会如何影响企业IT基础架构。 人工智能影响企业IT基础架构的7种方式 在过去几年中,人工智能(AI)技术已经得到一定发展,许多行业分析师认为,AI将在不久的将来对企业IT产生显著影响。 IDC预测,全球认知系统和人工智能支出将从2016年的80亿美元攀升至2020年的470亿美元。“软件开发人员和最终用户组织已经开始将认知/人工智能嵌入和部署到几乎各种企业的业务流程中,“IDC研究总监David Schubmehl表示。 他补充说:“对人工智能的认知和理解,这项技术能给企业带来的增长机会,将是大多数企业考虑人工智能的因素,而因为AI造成的数字化转型的中断将是致命的。” 在Gartner列出的2017年十大战略技术趋势中,前三个分别是AI和机器学习、智能应用程序和智能化项目,这三者都围绕着人工智能。 AI如何影响企业的IT基础架构? [*]资源需求增加 AI系统需要大量的计算能力,并且为了支持他们,企业需要可以访问具有多核处理器的服务器或云计算服务。 另外为了构建机器学习系统,企业需要大量的数据,这意味着需要更多的存储容量。 当然,组织还需要大量网络资源来支持这些计算和存储系统。 12401 [*]安全情报 安全解决方案产生大量的日志数据,IT管理人员已不能人工管理。 越来越多的安全分析、威胁情报和用户实体行为分析(UEBA)产品利用机器学习和高级算法,来识别和减轻攻击。 然而,黑帽子很快就会开始将AI整合到他们的代码中。 基于AI的网络攻击变得司空见惯可能只是时间问题。 12402 [*]智能监控 除了能够为网络安全提供帮助,AI还可以帮助监控网络和其他基础架构。基于AI的全栈监控,可以集成机器学习和大数据分析功能,为IT专业人员提供智能监控功能,使他们更轻松地完成工作。 12403 [*]自动帮助支持 人们已经习惯了Cortana和Siri等智能助手,客户服务聊天室也变得越来越普遍。很快,AI将可以接管这些自助帮助的职责,可以帮助减轻一些IT负担,为他们所服务的组织提供支持。 12404 [*]智能存储 一些存储专家期望AI也能进行存储管理。机器学习工具可以学习IO模式和数据生命周期,允许存储解决方案做出与存储优化和分层相关的更明智的决策。 也许有一天,AI甚至可以预测存储解决方案会发生故障,给用户有时间备份数据,并在硬件出现问题之前更换硬件。 12405 [*]AI用于基础设施管理 一些专家设想了一个未来,AI不仅可以保护、管理和解决有关网络的问题,而且还可以积极地管理和维护这些系统。 这种自动化水平有时被称为自驱动基础设施或AI定义的基础设施。诸如软件定义的数据中心和编排工具(如Kubernetes )的趋势正在使这种设想成为可能。12408 [*]对人的影响 当然,在关于AI的讨论中,人们都会怀疑机器人是否会最终接管他们的工作,特别是一些IT基础架构管理职位。 5月份,Gartner发布了这样的预测:“AI将最终取代IT组织的许多常规功能,特别是在运营方面,例如系统管理、帮助台、项目管理和应用程序支持。” 然而,许多专家认为,尽管AI会改变人类正在进行的工作的性质,但它不会减少人类的工作岗位。Gartner补充说:“一些工作职位将会消失,但AI会改善人才技能短缺的情况,整个IT组织可以越来越重视创新工作。” 12407 本文转载自《IT168》宁飞虹
  • 智能过滤不良信息,助您建设更安全绿色的网络环境!
    本帖最后由 数峰科技 于 2018-1-12 16:10 编辑不良信息过滤是基于识别不良信息的技术,包括**图片、暴恐图片、政治敏感信息等的智能识别和过滤。KANKAN AI使用上千万社交媒体数据大规模深度学习,训练出能精准识别**、暴恐等违规图像、视频、在线视频流的人工智能模型。而广告识别过滤也是通过图像识别技术,识别广告图片中的字符内容、二维码等信息,辅助人工过滤各类诈骗、微商等小广告图片,做到净化互联网UGC类平台、产品。KANKAN AI自研的高效图像处理引擎大大降低了运算成本,能以极低的成本为企业提供**图像过滤服务。 8832 KANKAN AI还可以进行直播视频的智能鉴黄,我们的不良信息过滤系统使用SAAS对外提供服务,第三方直播平台接入成本低.对直播内容抽样截屏送检即可。 8834 选择我们的理由:①精度高:KANKAN AI不良信息识别模型训练样本都是基于社交网络,与用户使用场景最贴近,从数峰自有与客户测试结果上表明数峰在不良信息的识别精度上遥遥领先友商。②适应性强:KANKAN AI特有的再训练机制,能随着客户的使用稳步不断的提升对某特定领域的识别精度,强大的硬件能力能做到2天更新一次模型版本,迅速适应用户场景。③成本低:KANKAN AI独有的图像处理算法,与异构计算平台相辅相成,大量减少残差网络性能开销。 华为云市场产品链接:https://app.huaweicloud.com/product/00301-55010-0--0KANKAN AI开放平台:www.datapeak.com.cn
  • 大数据告诉你:2018年该学习什么技术
    前几天,数据科学家Julia Silge在Stack Overflow官方博客上分享了一组分析数据,他在文中揭示了快速增长的技术,快速衰落的技术,稳步增长的技术。我们从中可以看到,2018年你学习什么技术最值钱! 文中数据来源于Stack Overflow 的提问标签,且相同的标签提问次数都不少于10000次。 7875快速增长的技术 7876走向灭亡的技术 很明显的看出Swift 和 Angular式增长最快的语言,背后原因是因为Swift背后亲爹Apple大力加持,和苹果独有的生态体系,作为Objective C的替代者,它的增长毋庸置疑。Angular则代表了前端框架的流行趋势,面对快速发展的时代,适应需求才能活得长一些。Android Studio 是谷歌推出的开发 IDE,增长势头也很快。在 人工智能概念大行其道的今天,TensorFlow 几乎成为了机器学习和深度神经网络的工业标准,涨势喜人。 哪些技术有明显的下降呢?JavaScript 框架 Backbone.js 差不多已经走到了生命的尽头,用于 iPhone 开发的游戏引擎 Cocos2d 也渐渐淡出开发者的视野。 Silverlight 和 Flex 技术因为浏览器的背离,基本上已经属于历史遗产,这说明即使有大厂(Adobe 和 微软)背书,如果脱离了主战场,也是说完就完,不带走一片云彩。ORM 技术变得沉寂还是挺让人奇怪的,不过就我近几年在的互联网公司里技术应用,ORM 使用的确实很少了,也可能是技术成熟导致没什么人问问题了吧。 7877稳步增长的技术 有哪些稳步增长的技术呢?当然是前端大丰收了,Angular 居首,JavaScript 的生态系统成员 TypeScript 和 Meteor 紧随其后。Pandas 是 Python 的一个开源数据分析库,它提供的数据结构DataFrame 极大的简化了数据分析过程中一些繁琐操作,由于数据科学和机器学习的风生水起,Pandas 同样水涨船高。其他一些技术则在行业内有广泛的应用,比如搜索引擎 Elasticsearch,游戏引擎 Unity,亚马逊的 Web Service 服务,机器学习框架等等。 那么在2018年学习什么更符合趋势呢? 1、希望就业的同学来说,学习Java还是首选。它的需求还很庞大,企业服务端和安卓手机的不断增长让Java保持巨大增量。除了Java外,还有python,swift,Go, Javascript,c++也很值得关注。Python和JavaScript目前风头正劲,无需多言。随着Go的成熟,越来越多的企业也正是尝试Go,来构建项目。C++在硬件和科研方面还是主流。Swift正在全面取代Objective C,成为Apple的当家语言。 2、随着技术的成熟,物联网在2018年会有大的发展。万物互联不再是梦想,这里面包含的技术有蓝牙技术,WiFi技术,自动控制...... 将万物数字化连在一起的时候,这里面的想象力很大很大! 3、人工智能方面,在2018年会更加渗透到生活的方方面面。更多的企业会应用这项技术来推动自己的业务增长。
  • 大佬 Python 对阵新秀 Julia ,谁能问鼎机器学习和数据科学?
    本帖最后由 码小玩 于 2017-12-28 11:03 编辑在数据科学领域,你最常用的编程语言是哪种?对此,不同职业背景下的开发者答案各尽不同,一般来说,Python 和 R 语言是需要重点掌握的,但是如今有一枝独秀悄然而至,其创作理念是像 Python 一样通用、像 R 语言一样适用于统计、像 Perl 一样适用于字符串处理、像线性代数 Matlab 一样强大、像 Shell 一样擅长粘合程序,且可以像 C 语言一样高效,它的名字叫做——Julia。如今,在面对 Python 俨然已成为数据科学和机器学习领域的中流砥柱的窘境之下,Julia 以何种优势与之抗衡,接下来,本文将带你一探究竟。 7859 在 Python 涵盖的众多领域中,数据分析应当是应用最广同时最为重要的。Python 通过加载大量的库、工具和应用程序,使得科学计算和数据分析工作变得快速便捷。 Julia 语言(https://julialang.org/) 专门针对科学计算、机器学习、数据挖掘、大规模线性代数、分布式和并行计算,在 Julia 的使用者眼里,Python 不够快也不够方便。此消彼长,当它擅长某一项工作时,肯定会忽略其他部分。 Julia 语言简介 Julia 由一个四人组成的团队于 2009 年创建,在 2012 年正式对外发布,旨在解决用于科学计算和数据处理的编程语言(比如 Python)和应用程序的缺陷。团队成员追求完美和极致,他们表示: 我们需要一个开放源码且拥有自由许可证的语言。我们希望兼具 C 语言的速度与 Ruby 的动态性。我们希望编程语言具有同像性,既有 Lisp 这样真正的宏,又有 Matlab 这样带有明显的、为人熟知的数学符号。我们希望它像 Python 一样可以用于一般编程,又像 R 语言一样适用于统计学,能够像 Perl 那样自然地用于字符串处理,就可以像 Matlab 那样强力支持线性代数,此外还能像 shell 一样做程序的粘合剂。它能够让初学者轻松入门,又能给资深开发者提供高级特性。我们希望它具有很强的交互性,同时又属于编译型语言。 为了实现这些想法,Julia 遵循了如下策略: 为了更快的速度,定义为编译型语言,而不是解释型。Julia 使用 LLVM 编译器框架进行即时编译(JIT)。在某些情况下,Julia 可以接近甚至达到 C 语言的速度。 采用直接但有用的语法。Julia 语法的简洁程度可以与 Python 媲美,虽然简洁,但是表现力很强。 动态类型。你可以指定变量的类型,如“无符号的32位整数”。但是,你也可以创建类型的层次结构以允许处理特定类型变量,例如编写一个接受整数的函数,通常不指定整数长度。最后如果在特定的上下文中不需要,你可以不用完全输入。 可以调用 Python、C 和 Fortran 编写的库。Julia 可以直接调用 C 语言和 Fortran 编写的外部库。也可以通过 PyCall 库与 Python 代码进行交互,此外, Python 和 Julia 之间的数据可以共享。 元编程。Julia 程序可以生成其他的 Julia 程序,甚至可以修改自己的代码,就像 Lisp 这样的语言一样。 Julia 相比 Python 的优势 Julia 从一开始就是为科学和数值计算而设计的。因此,Julia 在此领域具有众多优点也就不足为奇。它的优点如下: 速度更快。Julia 的 JIT 编译和类型声明意味着它可以比“纯粹的”、未被优化的 Python 快几个数量级。虽然 Python 可以通过 PyPy 或者 Cython 等方式进行速度优化,但 Julia 从设计之初就具有天然的速度优势。 友好的数学语法。Julia 的主要目标受众是科学计算语言和 Matlab、R、Mathematica、Octave 等环境的用户。Julia 的数学运算语法看起来更像计算机世界之外的普通数学公式,它使得非程序员很容易掌握。 自动内存管理。像 Python 一样,Julia 不需要用户太多关注分配和释放内存的细节,它提供了一些针对垃圾回收的手动控制方法。这样的好处在于,假设你从 Python 转投 Julia,你依然可以享有 Python 一样的便利。 并行性。只有充分利用机器上可用的全部资源(特别是多核),数学和科学计算领域才能够蓬勃发展。Python 和 Julia 都支持并行运算。但是,在并行计算方面,Julia 的语法比 Python 更简单,这样就降低了并行运算的使用门槛,使其能够得到更广泛的应用。 Python 相比 Julia 的优势 Python 是一种易于学习的通用计算语言,已经发展成为科学计算领域的主力军。Python 之所以能够在数据科学领域占据重要地位,得益于它的下列优势: Julia 数组索引从 1 开始。Julia 的这个特性表面上看问题不大,但是我们不能排除它潜在的风险。在大多数语言中,包括 Python 和 C 语言,数组的第一个元素通常用 0 来访问,例如,string[0] 表示 Python 字符串中的第一个字符。但是 Julia 则使用 1 作为数组中的第一个元素,它这样做的原因是为了迎合一些数学和科学应用(比如Mathematica)的用户。虽然默认情况下 Julia 采用1索引,但是可以通过其他手段(https://docs.julialang.org/en/latest/devdocs/offset-arrays/) 让其支持 0 索引,毕竟用 1 作为第一个元素索引的方式违背程序员的编程习惯。 Julia 还很年轻。Julia 语言自2009年以来一直处在开发阶段,并且一路上增减了多种功能。尽管开发者一直宣称开发接近尾声(https://github.com/JuliaLang/julia/milestone/4),但实际上它仍然没有发布1.0版本。 Python 拥有更丰富的第三方软件包。Python 数量庞大且实用的第三方软件包是它能够吸引大量开发者的杀手锏。而年轻的 Julia 语言的生态系统稍显薄弱,它使用了很多现有的 C 和 Python 库,但是开发 Julia 自己软件包的任务依然迫在眉睫。 Python 具有庞大的社区优势。如果编程语言没有一个强大、活跃的社区支持,那么它的根基是不扎实的。Python 现在正拥有着一个强大的社区。虽然 Julia 的社区发展迅猛,但是和 Python 社区的规模相比依然不值一提。 总结 一个是经过 8 年开发的新秀 Julia,一个是圈内公认的标榜 Python,两种编程语言在数据科学领域各有千秋,综合以上的优劣对比,你会更倾向选择哪种编程语言入门呢?
  • 华为软件开发云新手训练营:配置管理
    本帖最后由 DevCloud 于 2017-9-22 14:46 编辑
  • 华为软件开发云新手训练营:CloudIDE
    本帖最后由 DevCloud 于 2017-9-22 14:47 编辑
总条数:5193 到第
上滑加载中