《统计学习方法》第 2 版课件 + 算法实现代码

李航的《统计学习方法》(GitHub 地址)可以说是机器学习的入门宝典,许多机器学习培训班、互联网企业的面试、笔试题目,很多都参考这本书。该书从 2005 年开始写作一直到 2012 年完成,包含了众多主要的监督学习算法与模型。今年,《统计学习方法》第二版正式发布,通过 6 年时间的努力,在第一版的基础上又增加了无监督学习的主要算法与模型。

这里插入个图表,列举了各个章节所占篇幅,其中 SVM 是监督学习里面占用篇幅最大的,MCMC 是无监督里面篇幅占用最大的,另外 DT,HMM,CRF,SVD,PCA,LDA,PageRank 也占了相对较大的篇幅。
这里插入个图表,列举了各个章节所占篇幅,其中 SVM 是监督学习里面占用篇幅最大的,MCMC 是无监督里面篇幅占用最大的,另外 DT,HMM,CRF,SVD,PCA,LDA,PageRank 也占了相对较大的篇幅。

《统计学习方法》第二版的最新课件,是由清华大学深圳研究院的袁春教授制作的。

所有的课件都是 PPT 格式,总共包含 22 章。正好是《统计学习方法》第 2 版的完整内容。

其中,第 1 章至第 12 章主要是《统计学习方法》第一版的内容。主要介绍统计学习及监督学习概论、感知机、近邻法、朴素贝叶斯法、决策树、逻辑斯谛回归与最大熵模型、支持向量机、提升方法、EM 算法及其推广、隐马尔可夫模型、条件随机场、监督学习方法总结。

第 2 版增加的新内容包括:

  • 第 13 章 – 无监督学习概论
  • 第 14 章 – 聚类方法
  • 第 15 章 – 奇异值分解
  • 第 16 章 – 主成分分析
  • 第 17 章 – 潜在语义分析
  • 第 18 章 – 概率潜在语义分析
  • 第 19 章 – 马尔可夫链蒙特卡罗法
  • 第 20 章 – 潜在狄利克雷分配
  • 第 21 章 – PageRank 算法
  • 第 22 章 – 无监督学习方法总结
整个这本书里面各章节也不是完全独立的,这部分希望整理章节之间的联系以及适用的数据集。算法到底实现到什么程度,能跑什么数据集也是一方面。
整个这本书里面各章节也不是完全独立的,这部分希望整理章节之间的联系以及适用的数据集。算法到底实现到什么程度,能跑什么数据集也是一方面。

最后,Github 上有同学将第一版相关的机器学习算法用 Python 实现了一遍,致力于将李航博士《统计学习方法》一书中所有算法实现一遍。

GitHub地址项目 GitHub 地址

开源 Markdown 编辑器

Markdown 是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。Markdown 在文字爱好者和码农们那里非常受欢迎,今天和大家推荐另一款高颜值的、功能强大的开源 Markdown 编辑器 —— Notable,Notable 一款开源的高颜值、跨平台的 Markdown 编辑器。

Notable

Notable 支持 Linux、FreeBSD、MacOS、Windows7 等主流操作系统,实际上它与 VS Code 所使用的编辑器相同,因此内置了多光标,小地图和一流的语法高亮等功能。和其他编辑器的功能特性比较如下:

Click to Enlarge

GitHub地址项目 GitHub 地址

语音数据处理指南

随着企业开始进行人工智能技术的探索,三个特定的领域引起了很多关注:计算机视觉、自然语言应用和语音技术。世界知识产权局(WIPO)最近的一份报告发现,这三个领域的专利占了人工智能相关专利的大部分:计算机视觉占49%,自然语言处理(NLP)占14%,语音技术占13%。

企业里有很多非结构化和半结构化的文本数据,而很多公司已经拥有了 NLP 和文本分析的经验。虽然比较少的公司拥有收集和存储图像或视频的基础设施,但计算机视觉是许多公司开始探索的领域。深度学习和其他技术的兴起促使初创公司商业化了一些计算机视觉的应用,包括安防和合规、媒体和广告以及内容生成。

一些企业也在探索话音和语音的应用。自然语言和语音模型的最新进步提升了准确性,从而开辟出了一些新的应用。在企业语音应用方面,呼叫中心、销售和客户支持以及个人助理等应用处于领先地位。在消费者应用方面,语音搜索、智能音箱和数字助理正越来越普及。虽然远非完美,但目前这一代话音和语音应用已经足够得好,从而推动了语音应用的爆炸性增长。语音技术的潜力的一个早期线索是语音驱动的搜索的增长。Comscore 估计,到 2020 年,大约一半的在线搜索将使用语音。Gartner 建议企业重新设计其网站,以支持视觉和语音搜索。此外,从 2018年到 2019 年,智能音箱预计将增长 82% 以上。到今年年底,此类设备的安装数将超过 2 亿台。

音频内容数据也正在呈现爆炸式的增长。这就需要使用语音技术进行搜索和挖掘,从而能解锁这些新内容。例如,根据《纽约时报》最近的一篇文章,在美国“每个月中大概有三分之一的人会至少收听一次播客”。播客节目的增长并不仅限于美国,包括中国在内的世界各地的播客量都在增加。

语音和对话应用挑战性

在文本和 NLP 或计算机视觉领域里,程序员可以简单地开发出一个应用。但语音应用(不是简单的语音命令)对许多企业来说仍然具有挑战性。口语比书面文字有更多的“噪音”。例如,在阅读了许多播客脚本后,我们可以证明语音对话的脚本仍然需要大量的编辑工作。即使你可以获得最好的转录(语音到文本)技术,你也通常也会看到一个包含暂停、填充、重启、插话(在对话的场景里)和不合语法结构的句子的脚本数据。脚本还可能包含需要改进的段落,因为有人可能“在开脑洞”或难以准确地表达特定的观点。此外,由转录产生的脚本可能无有在正确的位置打标点或进行大写处理。因此,在许多应用中,脚本的后处理就需要人类编辑参与。

在计算机视觉(现在是 NLP )中,我们已经处于数据至少与算法同等重要的阶段。具体而言,预先训练的模型已经在计算机视觉和 NLP 的若干任务中提供了最好的性能。那么语音领域怎么样?“一个模型能满足所有的”语音模型没能出现的原因有下述几个:

  • 存在各种声学环境和背景噪音:室内或室外、在汽车里、在仓库里或在家庭等。
  • 可能需要支持多种语言(英语、西班牙语、中文普通话等),特别是在说话人在对话过程中使用(或混用)多种语言的情况下。
  • 应用类型(如搜索、个人助理等)会影响对话流程和词汇表。
  • 根据应用的复杂程度,需要针对特定领域和主题来调整语言模型和词汇。这一点对于文本和自然语言应用也成立。

构建语音应用

尽管存在挑战,但正如前面我们所指出的那样,语音技术和语音应用已经出现了相当多的让人激动的内容。虽然我们尚未达到可以使用通用解决方案为各种语音应用“供电”的阶段,同时也没有能够跨多个领域的语音智能助理。

然而,已经有一些很好的基础模块可以被用来组装有趣的语音应用。为了帮助正在探索使用语音技术的公司,我们整理了以下指南:

  • 集中你的注意力。正如我们所指出的那样,当前一代语音技术无法实现“一个模型能满足所有的”场景。因此最好将重点放在特定任务、某种语言和某个领域。
  • 理解应用想要实现的目标,然后再去看所需要的技术类型。如果你能知道应用的 KPI,那么就可以使用这些 KPI 来找到为特定应用领域实现这些度量标准所需要的语言模型。
  • 在“真实数据和真实场景”里进行实验。如果你计划开始使用现成的模型和服务,请注意“真实数据和真实场景”的重要性。在许多情况下,初始测试数据并不能代表用户与想部署的系统进行交互的方式。
  • 获取每个特定任务的标记样本。例如,识别英语中的“cat”和中文普通话中的“猫”将需要不同的模型和不同的标记数据。
  • 制定数据采集策略以保证收集到合适的数据。确保构建的系统可以随着收集到更多的数据而持续学习,以及制定一个支持持续改进的迭代流程。
  • 语音应用的用户关心的是结果。语音模型只有在推导出洞察力并使用这些洞察力而采取行动时才有意义。例如,如果用户要求智能音箱播放特定的歌曲,那么对该用户唯一重要的就是音箱能播放那首歌曲。
  • 自动化工作流程。理想情况下,所需的字典和语音模型可以在没有太多干预(来自机器学习或语音技术专家)的情况下进行更新。
  • 语音应用是复杂的端到端系统,因此要尽可能地进行优化。单单一个语音识别系统就是由我们在前一篇文章中描述的多个模块所组成。训练和再训练模型的代价可能很高。根据应用和场景,延迟和持续连接也是重要的考虑因素。

从 NLU 到 SLU

我们仍处于企业级语音应用的早期阶段。在过去的12个月中,我们看到预训练的自然语言模型取得了快速进展,这些模型在多个 NLP 基准测试中创造了新记录。开发人员开始采用这些语言模型,并针对特定领域和应用对它们进行微调。

对 AI 应用来说,语音数据又增加了另一层的复杂性,它超越了自然语言理解(NLU)。口语理解(SLU)需要能够从口语中提取含义。虽然 SLU 还没有被用于语言或语音应用,但好消息是,已经可以使用现有的 SLU 模型构建简单、特定用途的语音应用。为了找到正确的应用场合,企业需要了解当前技术和算法的局限性。

与此同时,我们将会一步一步地进行。正如 Alan Nichol 在一篇关注基于文本的应用的博文中指出的那样,“聊天机器人只是实现真正的 AI 助手和自动组织的第一步。”同样地,今天的语音应用揭开了即将发生的事情的一角。

特征选择工具

特征选择(Feature Selection)是查找和选择数据集中最有用特征的过程,是机器学习流程中的一大关键步骤。不必要的特征会降低训练速度、降低模型可解释性,并且最重要的是还会降低其在测试集上的泛化表现。目前存在一些专用型的特征选择方法,我常常要一遍又一遍地将它们应用于机器学习问题,这实在让人心累。所以,这里用 Python 构建了一个特征选择类并开放在了 GitHub 上。这个 Feature Selector 包含一些最常用的特征选择方法:

  1. 具有高缺失值百分比的特征
  2. 共线性(高度相关的)特征
  3. 在基于树的模型中重要度为零的特征
  4. 重要度较低的特征
  5. 具有单个唯一值(Unique Value)的特征

GitHub地址项目 GitHub 地址

数据分析技能全流程知识细节

进入一个全新的领域之前,最好能够对这个领域的知识体系、技能模型有全面的了解,这样你能知道哪些是应该学习,哪些是暂时不用学的,知道什么样的路径适合自己的状况。

基于数据分析这个技能,DC 学院 —— 准备了一份『超级技能地图』,帮你快速认识数据分析的技能模块,以及不同的分支下,有哪些必备的技能,以及有哪些好用的资源。

这一张图,可以帮助你快速认识数据分析这个领域,即便你从未接触过相关的内容,也可以很清晰地建立数据分析知识框架。

这是数据分析小白必备的数据分析技能图,因为包含了 Python 数据分析全方位的技能体系,比如数据获取、SQL 数据库、Python、统计学、数据分析核心模块、可视化、报告撰写等等都有详细拆解。

高效的学习路径是什么?就是按这样的顺序循序渐进,你会知道每个部分需要完成的目标是什么,需要学习哪些知识点,哪些知识是暂时不必要的。

1. 数据获取

一般数据获取有内部和外部两种渠道,内部数据可以通过企业数据库提取,需要掌握 SQL 相关的技能。

外部数据则可以通过公开数据集和爬取网络数据实现,需要了解相关的数据开放站点,以及掌握必要的 Python 爬虫技能。

数据获取
数据获取

2. SQL 数据库

SQL 技能是数据分析师职位必备的技能之一,需要你对企业的数据库进行管理,能够正常地存储和提取数据。当然 SQL 需要掌握的技能并不难,了解基本的语法,掌握基本的增删改查就可以满足常规的需求了。

SQL 数据库
SQL 数据库

3. 数据分析必备统计学

如果说数据分析需要什么数学基础,那统计学应该是设计最多的了,但不需要非常深入,因为大多数数据分析用到的无非是统计量、数据分布等基础知识。

数据分析必备统计学
数据分析必备统计学

4. 数据分析必备 Python 基础

利用 Python 进行数据分析,那 Python 的基础就非常重要了,这意味着你后续是否能够正常地用 Python 代码来实现你的分析想法。

基本的编程规范、数据结构、自定义函数 、控制语句(条件语句、循环语句)、文件读写和模块使用都是需要重点掌握的点。

数据分析必备 Python 基础
数据分析必备 Python 基础

5. 数据分析核心工具

在 Python 数据分析的体系内,Numpy / Pandas / Matplotlib 三个核心库是绕不过去的。也是这三个工具,能够让你实现数据清洗、科学计算、数据分析、数据可视化等核心的工作。

掌握这些,你就完全可以去实现描述型数据分析、探索型数据分析,再加上 Sklearn,你可以去实现预测型数据分析,一个完整的数据分析项目,也不过云云。

数据分析核心工具
数据分析核心工具

6. 数据报告撰写

数据报告撰写虽然看起来像是文档整理类的工作,但也是非常重要的,因为直接决定了你最终的输出成果。

对于如何撰写一份优秀的数据报告,问题拆解的逻辑、数据指标的选取、用户受众需求的分析、图形化的呈现形式都是非常重要的点。

数据报告撰写
数据报告撰写

微软研究院新版书籍《数据科学基础》PDF 下载

随着大数据、深度学习在学术界和工业界的普及,人们越来越认识到数据对于科研和应用的重要性。虽然现在相关的工具和框架大大降低了构建数据应用的门槛,数据科学基础对应用的构建依然起着核心的作用。本文介绍微软研究院新版书籍《数据科学基础》。

计算机科学学科从 60 年代兴起,当时人们聚焦于编程语言、编译器、操作系统和相关的数学理论。70年代左右,算法被加入作为计算机科学理论中重要的一员。随着计算机的普及,自然科学、商业等领域有着更强的发现、收集和存储数据的能力。如何理解和应用这些数据成为了现在的一个刚需。互联网和社交网络成为人们日常生活一部分的事实,反映了数据理论的机遇与挑战。

微软研究院的新版书籍《Foundations of Data Science》(《数据科学基础》)详细介绍了许多重要的数据科学理论基础。这些理论基础例如奇异值分解(SVD)、马尔科夫链、随机游走等是支撑现在广泛使用在数据应用中的算法的支柱,如推荐系统、语音识别、图神经网络等。《数据科学基础》提纲及下载链接如下:

  • 简介
  • 高维空间
  • 最佳拟合子空间和奇异值分解(SVD)
  • 随机游走和马尔科夫链
  • 机器学习
  • 面向海量数据问题的算法:流式、概述和采样
  • 聚类
  • 随机图
  • 主题模型、非负矩阵分解、隐马尔科夫模型和图模型
  • 其他主题
  • 小波

Foundations of Data Science

2019 年中国人工智能基础数据服务白皮书

人工智能基础数据服务:指为 AI 算法训练及优化提供的数据采集、清洗、信息抽取、标注等服务,以采集和标注为主。《2019 年中国人工智能基础数据服务白皮书》由艾瑞和百度数据众包联合发布,报告主要分析中国人工智能基础数据服务的现状以及未来发展方向,重点讨论人工智能基础数据服务的价值、发展背景、产业链、市场空间和应用场景。

在经历了一段时期的野蛮生长之后,人工智能基础数据服务行业进入成长期,行业格局逐渐清晰。人工智能基础数据服务方的上游是数据生产和外包提供者,下游是 AI 算法研发单位,人工智能基础数据服务方通过数据处理能力和项目管理能力为其提供整体的数据资源服务,不过 AI 算法研发单位和 AI 中台也可提供一些数据处理工具,产业上下游普遍存在交叉。

2018 年中国人工智能基础数据服务市场规模为 25.86 亿元,其中数据资源定制服务占比 86%,预计 2025年市场规模将突破 113 亿元。市场供给方主要由人工智能基础数据服务供应商和算法研发单位自建或直接获取外包标注团队的形式组成,其中供应商是行业主要支撑力量。

数据安全、采标能力、数据质量、管理能力、服务能力等仍是需求方的痛点,需要人工智能基础服务商有明确具体的安全管理流程、能够深入理解算法标注需求、可提供精力集中且高质量的服务、能够积极配合、快速响应需求方的要求。

随着算法需求越来越旺盛,依赖人工标注不能满足市场需求,因此增强数据处理平台持续学习能力,由机器持续学习人工标注,提升预标注和自动标注能力对人工的替代率将成趋势。远期,越来越多的长尾、小概率事件所产生的数据需求增强,机器模拟或机器生成数据会是解决这一问题的良好途径,及早研发相应技术也将成为 AI 基础数据服务商未来的护城河。

谷歌发布用于保护数据隐私的开发工具

无论你是城市规划师还是小型企业 CEO 或者是一名软件开发者,利用好数据可以让你更好地为客户提供服务,但是如果没有强有力的隐私保护,你也可能因此失去用户的信任。差分隐私是数据分析的一种手段,旨在提供一种当从统计数据库查询时,最大化数据查询的准确性,同时最大限度减少识别其记录的机会。例如,如果您是一名健康研究人员,您可能想要比较不同医院的患者住院的平均时间,以确定在护理方面是否存在差异。差别隐私是一种高度可靠的分析方法,可以在确保个人隐私的前提下做数据分析。

近日,谷歌开源了其差异隐私平台,该技术已经用于谷歌内部的一些核心应用,谷歌表示开源该技术是为了满足开发人员的需求而设计的。除了可以自由访问,它还希望它易于部署和使用。

以下是该库的一些功能特性:

  • 统计功能:这个版本支持大多数常见的数据科学操作。开发人员可以使用该库计算计数、和、平均值、中位数和百分位数等运算。
  • 严格的测试:正确区分隐私是一项挑战。除了一个广泛的测试组件,它还包括一个可扩展的“随机差异隐私模型检查器库”,以此避免发生错误。
  • 快速入门:开源发行版的真正用途在于回答“我可以使用这个吗?”这也是为什么谷歌加入了一个 PostgreSQL 扩展和一些常用操作指南的原因。此外,谷歌特地在一篇技术论文中描述了该库使用方法的细节
  • 模块化:谷歌设计的这个开源库可以扩展到其他功能,比如附加机制、聚合功能或隐私预算管理。

自从我们在 2014 年发布 RAPPOR 以帮助改进 Chrome 以来,谷歌一直致力于研究和开发实用的差异私有技术,例如出行软件 Project Fi 中可以了解一天中的业务繁忙程度、特定餐厅的菜肴在 Google 地图中的受欢迎程度等。今年,宣布了几项开源隐私技术 —— Tensorflow Privacy,Tensorflow Federated,,Private Join and Compute,涵盖的领域从医学到政府再到商业等。

GitHub地址项目 GitHub 地址

解读 2019 中国大数据与实体经济融合发展白皮书

在第二届数字中国建设峰会大数据分论坛大数据分论坛上,中国信息通信研究院总工程师余晓晖发布了《中国大数据与实体经济融合发展白皮书( 2019 年)》。

该白皮书对大数据与实体经济融合发展情况进行了全景展现,报告显示我国大数据融合发展已具备技术、产业、应用和政策基础,大数据在制造业、农业、服务业等实体经济各领域应用不断深入,给经济社会带来的益处和价值日益显现。

此外,白皮书还对大数据与实体经济融合发展机遇与挑战进行了深入分析,对推动我国大数据与实体经济融合创新发展提出了政策建议。

白皮书
白皮书

当前,世界经济正在加速向以数字生产力为标志的新阶段迈进,大数据是信息社会的重要战略资源,与实体经济各领域的渗透融合已成为我国经济实现高质量发展的重要驱动力。

1 . 白皮书前言(节选)

当前,以互联网、大数据、人工智能为代表的新一代信息技术日新月异,给各国经济社会发展、国家管理、社会治理、人民生活带来重大而深远的影响。

近年来,我国大数据产业保持良好发展势头,大数据与实体经济各领域渗透融合全面展开,融合范围日益宽广,融合深度逐步加深,融合强度不断加大,融合载体不断完善,融合生态加速构建,新技术、新产业、新业态、新模式不断涌现,战略引领、规划指导、标准规范、政策支持、产业创新的良性互动局面加快形成。

中国信息通信研究院结合我国大数据与实体经济融合的发展趋势,从融合发展的意义、融合发展的基础、融合发展的成效以及未来发展的重点任务四个方面对我国大数据与实体经济融合发展分析总结,形成白皮书,勾画了我国大数据与实体经济融合发展的全景,望为社会各界深入了解大数据与实体经济各领域渗透融合的最新情况和发展机遇提供有价值的参考。

2.  白皮书目录

一、大数据与实体经济融合是新时代发展的内在要求

  1. 大数据与实体经济融合是建设现代化经济体系的必由之路
  2. 大数据与实体经济融合是推动国家治理现代化的必然选择
  3. 大数据与实体经济融合是满足人民美好生活需要的重要举措

二、大数据与实体经济融合发展具备基础

  1.  技术基础不断强化
  2.  产业基础日益坚实
  3.  应用基础加快构筑
  4.  政策环境持续完善

三、大数据与实体经济融合发展成效初显

  1. 大数据与实体经济融合走向纵深
  2. 数据推动制造业转型升级提速
  3. 大数据促进数字农业建设稳步推进
  4. 大数据助力服务业新兴业态蓬勃发展
  5. 大数据支撑公共服务智慧高效

四、努力开创大数据与实体经济融合发展的新局面

  1. 大数据与实体经济融合发展机遇与挑战并存
  2. 新思路、新举措力促大数据与实体经济融合创新发展

以下为白皮书解读 PPT :

解读
解读
大数据与实体经济融合是新时代发展的内在要求
大数据与实体经济融合是新时代发展的内在要求
大数据与实体经济融合发展具备基础
大数据与实体经济融合发展具备基础
技术基础不断强化
技术基础不断强化
产业基础日益坚实1/2
产业基础日益坚实1/2
产业基础日益坚实2/2
产业基础日益坚实2/2
应用基础加快构筑
应用基础加快构筑
政策环境持续完善
政策环境持续完善
大数据与实体经济融合发展成效初显
大数据与实体经济融合发展成效初显
与实体经济融合走向纵深
与实体经济融合走向纵深
数字化转型
数字化转型
促进数字农业建设稳步推进
促进数字农业建设稳步推进
数据推动制造业转型升级提速
数据推动制造业转型升级提速
助力服务业新兴业态蓬勃发展1/2
助力服务业新兴业态蓬勃发展1/2
助力服务业新兴业态蓬勃发展2/2
助力服务业新兴业态蓬勃发展2/2
支撑公共服务智慧高效
支撑公共服务智慧高效
努力开创大数据与实体经济融合发展的新局面
努力开创大数据与实体经济融合发展的新局面
机遇与挑战并存
机遇与挑战并存
新思路新与举措1/4
新思路新与举措1/4
新思路新与举措2/4
新思路新与举措2/4
新思路新与举措3/4
新思路新与举措3/4
新思路新与举措4/4
新思路新与举措4/4

GitHub 超 2.7 万星,最全 Python 入门算法

Github 上超过 2.7 万星标;最全算法及 Python 实现

该项目的算法包括排序:

搜索等经典算法,描述较为详细,对算法原理本身、应用场景以及实现过程的可视化等。

我们讨论机器学习的时候,其实很多时候都是在讨论算法。今天就向大家推荐一个好资源,用 Python 实现所有算法。该项目在 Github 上已经获得了超过 2.7 万星标,可以说非常受欢迎了。

该项目主要包括两方面内容:

  • 算法的基本原理讲解,
  • 以及 Python 代码实现,并给出了算法实现过程的动图,非常直观易懂。

项目地址:

GitHub地址项目 GitHub 地址

1. 冒泡算法

冒泡算法
冒泡算法

代码实现:

https://www.toptal.com/developers/sorting-algorithms/bubble-sort

2. 桶排序算法

桶排序算法
桶排序算法

桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。

3. 鸡尾酒排序算法

鸡尾酒排序算法
鸡尾酒排序算法

鸡尾酒排序,也叫双向冒泡排序(Bidirectional Bubble Sort)等。这是冒泡排序的一种变体。不同之处在于,冒泡排序是从低到高比较序列里的每个元素,而鸡尾酒排序从两个方向(低到高、高到低)来回排序,效率更高。

代码实现:

https://en.wikipedia.org/wiki/Cocktail_shaker_sort

4. 插入排序

插入排序
插入排序

插入排序(英语:Insertion Sort )是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用 in-place 排序,因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

代码实现:

https://www.toptal.com/developers/sorting-algorithms/insertion-sort

5. 归并排序

归并排序
归并排序

归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。

代码实现:

https://www.toptal.com/developers/sorting-algorithms/merge-sort

6. 快速排序

快速排序
快速排序

快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),简称快排,一种排序算法,最早由东尼·霍尔提出,用作按顺序放置数组元素的系统方法。

代码实现:

https://www.toptal.com/developers/sorting-algorithms/quick-sort

7. 堆排序

堆排序(英语:Heapsort )是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子节点的键值或索引总是小于(或者大于)它的父节点。

代码实现:

https://www.toptal.com/developers/sorting-algorithms/heap-sort

8. 基数排序

基数排序(英语:Radix sort )是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。基数排序的发明可以追溯到1887年赫尔曼·何乐礼在打孔卡片制表机( Tabulation Machine )上的贡献。

9. 选择排序

选择排序
选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

代码实现:

https://www.toptal.com/developers/sorting-algorithms/selection-sort

10. 希尔排序

希尔排序
希尔排序

希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:

插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率

但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位

代码实现:

https://www.toptal.com/developers/sorting-algorithms/shell-sort

11. 拓扑排序

在计算机科学领域,有向图的拓扑排序是其顶点的线性排序,使得对于从顶点 u 到顶点 v 的每个有向边uv ,u 在排序中都在 v 之前。例如,图形的顶点可以表示要执行的任务,并且边可以表示一个任务必须在另一个任务之前执行的约束; 在这个应用中,拓扑排序只是一个有效的任务顺序。 如果且仅当图形没有定向循环,即如果它是有向无环图(DAG),则拓扑排序是可能的。任何 DAG 具有至少一个拓扑排序,并且已知这些算法用于在线性时间内构建任何 DAG 的拓扑排序。

搜索算法

12. 线性搜索

线性搜索
线性搜索

线性搜索或顺序搜索是一种寻找某一特定值的搜索算法,指按一定的顺序检查数组中每一个元素,直到找到所要寻找的特定值为止。是最简单的一种搜索算法。

13. 二分搜索算法

二分搜索算法
二分搜索算法

二分搜索(英语:binary search ),也称折半搜索(英语:half-interval search ),对数搜索(英语:logarithmic search ),是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。

14. 插值搜索算法

插值查找( Interpolation Search )是根据要查找的关键字 key 与顺序表中最大、最小记录的关键字比较后的查找方法,它假设输入数组是线性增加的(这个假设的精确度会影响算法的效率,但不会影响算法的正确性)。

15. 跳跃搜索算法

跳跃搜索算法( Jump Search )跟二分查找算法类似,它也是针对有序序列的查找,只是它是通过查找比较少的元素找到目标。当然它需要通过固定的跳跃间隔,这样它相比二分查找效率提高了很多。

16. 快速选择

快速选择
快速选择

快速选择(英语:Quickselect )是一种从无序列表找到第k小元素的选择算法。它从原理上来说与快速排序有关。与快速排序一样都由托尼·霍尔提出的,因而也被称为霍尔选择算法。它在实际应用是一种高效的算法,具有很好的平均时间复杂度,然而最坏时间复杂度则不理想。快速选择及其变种是实际应用中最常使用的高效选择算法。与快速排序一样,快速选择一般是以原地算法的方式实现,除了选出第k小的元素,数据也得到了部分地排序。

17. 禁忌搜索

禁忌搜索( Tabu Search,TS,又称禁忌搜寻法)是一种现代启发式算法,由美国科罗拉多大学教授 Fred Glover 在 1986 年左右提出的,是一个用来跳脱局部最优解的搜索方法。其先创立一个初始化的方案;基于此,算法“移动”到一相邻的方案。经过许多连续的移动过程,提高解的质量。

加密算法

18. 凯撒密码

凯撒密码(英语:Caesar cipher ),或称凯撒加密、凯撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是 3 的时候,所有的字母 A 将被替换成 D ,B 变成 E ,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。

19. 维吉尼亚密码

维吉尼亚密码(又译维热纳尔密码)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。维吉尼亚密码曾多次被发明。该方法最早记录在吉奥万·巴蒂斯塔·贝拉索( Giovan Battista Bellaso )于 1553 年所著的书《吉奥万·巴蒂斯塔·贝拉索先生的密码》(意大利语:La cifra del. Sig. Giovan Battista Bellaso )中。然而,后来在 19 世纪时被误传为是法国外交官布莱斯·德·维吉尼亚(Blaise De Vigenère )所创造,因此现在被称为“维吉尼亚密码”。

20. 置换密码

又名取代加密法,是密码学中按规律将文字加密的一种方式。置换密码中可以用不同字母数为一单元,例如每一个或两个字母为一单元,然后再作加密。密文接收者解密时需用原加密方式解码才可取得原文本。由于拼音文字中字的组成为有限的字母,以英语为例只有 26 个字母,组成可能的单元数较少,因此使用置换密码相对较为容易,而且亦可使用简单机械进行加密;相反,非拼音文字如中文则因单元数非常大难以使用一般加密方式,必需建立密码本,然后逐字替换。更何况某些非拼音文字中字字皆由不同大小的字根来组字,较难转换,因此使用置换密码的示例比较少。

21. RSA 加密算法

RSA 加密算法是一种非对称加密算法。在公开密钥加密和电子商业中 RSA 被广泛使用。RSA 是 1977 年由罗纳德·李维斯特( Ron Rivest )、阿迪·萨莫尔( Adi Shamir )和伦纳德·阿德曼( Leonard Adleman )一起提出的。当时他们三人都在麻省理工学院工作。RSA 就是他们三人姓氏开头字母拼在一起组成的。对极大整数做因数分解的难度决定了 RSA 算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA 算法愈可靠。假如有人找到一种快速因数分解的算法的话,那么用 RSA 加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的 RSA 钥匙才可能被强力方式解破。到当前为止,世界上还没有任何可靠的攻击 RSA 算法的方式。只要其钥匙的长度足够长,用 RSA 加密的信息实际上是不能被解破的。

22. ROT13 算法

ROT13(回转 13 位,rotate by 13 places ,有时中间加了个连字符称作 ROT-13 )是一种简易的替换式密码。它是一种在英文网络论坛用作隐藏八卦(spoiler)、妙句、谜题解答以及某些脏话的工具,目的是逃过版主或管理员的匆匆一瞥。ROT13 被描述成“杂志字谜上下颠倒解答的 Usenet 点对点体”。(Usenet equivalent of a magazine printing the answer to a quiz upside down.)ROT13  也是过去在古罗马开发的凯撒加密的一种变体。

23. 异或密码

异或密码是密码学中一种简单的加密算法,异或运算符常作为更为复杂的加密算法的组成部分。对于其本身来说,如果使用不断重复的密钥,利用频率分析就可以破解这种简单的异或密码。如果消息的内容被猜出或知道,密钥就会泄露。异或密码值得使用的原因主要是其易于实现,而且计算成本小。简单重复异或加密有时用于不需要特别安全的情况下来隐藏信息。

数据科学、神经网络、机器学习完全图解

这是一份非常详实的备忘单,涉及具体内容包括:

  1. 神经网络基础知识
  2. 神经网络图谱
  3. 机器学习基础知识
  4. 著名 Python 库 Scikit-Learn
  5. Scikit-Learn 算法
  6. 机器学习算法选择指南
  7. TensorFlow
  8. Python 基础
  9. PySpark 基础
  10. Numpy 基础
  11. Bokeh
  12. Keras
  13. Pandas
  14. 使用 Pandas 进行Data Wrangling
  15. 使用 dplyr 和 tidyr 进行 Data Wrangling
  16. SciPi
  17. MatPlotLib
  18. 使用 ggplot 进行数据可视化
  19. Big-O
神经网络 Cheat Sheet
神经网络 Cheat Sheet

第一部分:神经网络

神经网络基础知识
神经网络基础知识

神经网络基础知识

人工神经网络(ANN),俗称神经网络,是一种基于生物神经网络结构和功能的计算模型。 它就像一个人工神经系统,用于接收,处理和传输计算机科学方面的信息。

神经网络
神经网络

基本上,神经网络中有 3 个不同的层:

  • 输入层(所有输入都通过该层输入模型)
  • 隐藏层(可以有多个隐藏层用于处理从输入层接收的输入)
  • 输出层(处理后的数据在输出层可用)

神经网络图谱

神经网络图谱
神经网络图谱

图形数据可以与很多学习任务一起使用,在元素之间包含很多丰富的关联数据。例如,物理系统建模、预测蛋白质界面,以及疾病分类,都需要模型从图形输入中学习。图形推理模型还可用于学习非结构性数据,如文本和图像,以及对提取结构的推理

第二部分:机器学习

机器学习 Cheat Sheet
机器学习

用 Emoji 解释机器学习

用 Emoji 解释机器学习
用 Emoji 解释机器学习

Scikit-Learn 基础

Scikit-learn 是由 Python 第三方提供的非常强大的机器学习库,它包含了从数据预处理到训练模型的各个方面,回归和聚类算法,包括支持向量机,是一种简单有效的数据挖掘和数据分析工具。在实战使用scikit-learn 中可以极大的节省代码时间和代码量。它基于 NumPy,SciPy 和 matplotlib 之上,采用 BSD许可证。

Scikit-Learn 基础
Scikit-Learn 基础

Scikit-Learn 算法

这张流程图非常清晰直观的给出了 Scikit-Learn 算法的使用指南。

Scikit-Learn 算法
Scikit-Learn 算法

针对 Azure Machine Learning Studios 的 Scikit-Learn 算法

针对 Azure Machine Learning Studios 的 Scikit-Learn 算法
针对 Azure Machine Learning Studios 的 Scikit-Learn 算法

第三部分:Python 数据科学

Python
Python

TensorFlow

 

 

 

TensorFlow
Python 基础

 

Python 基础
Python 基础

PySpark RDD 基础

Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎,通过 Scala 语言实现,拥有 Hadoop MapReduce 所具有的优点,不同的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。PySpark 是 Spark  为 Python 开发者提供的  API。

NumPy基础

NumPy 是 Python 语言的一个扩展程序库。支持高端大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,前身 Numeric,主要用于数组计算。它实现了在 Python 中使用向量和数学矩阵、以及许多用 C 语言实现的底层函数,并且速度得到了极大提升。

NumPy基础
NumPy基础

Bokeh

Bokeh 是一个交互式可视化库,面向现代 Web 浏览器。目标是提供优雅、简洁的多功能图形构造,并通过非常大或流数据集的高性能交互来扩展此功能。Bokeh 可以实现快速轻松地创建交互式图表、仪表板和数据应用程序。

Bokeh
Bokeh

Keras

Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK , 或者 Theano 作为后端运行。Keras 的开发重点是支持快速的实验。能够以最小的时延把你的想法转换为实验结果,是做好研究的关键。

Keras
Keras

Pandas

pandas 是一个为 Python 编程语言编写的软件库,用于数据操作和分析,基于 NumPy,纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas 提供了大量快速便捷地处理数据的函数和方法。

Pandas
Pandas

使用 Pandas 进行 Data Wrangling

使用 Pandas 进行 Data Wrangling

使用Pandas进行Data Wrangling
使用 Pandas进行 Data Wrangling

使用 ddyr 和 tidyr 进行 Data  Wrangling

为什么使用 tidyr 和 dplyr 呢?因为虽然 R 中存在许多基本数据处理功能,但都有点复杂并且缺乏一致的编码,导致可读性很差的嵌套功能以及臃肿的代码。使用 ddyr 和 tidyr 可以获得:

  • 更高效的代码
  • 更容易记住的语法
  • 更好的语法可读性
使用ddyr和tidyr进行Data Wrangling
使用 ddyr和 tidyr进行 Data Wrangling

Scipy 线性代数

SciPy 是一个开源的 Python 算法库和数学工具包。 SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。 与其功能相类似的软件还有 MATLAB、GNU Octave 和 Scilab。

Scipy线性代数
Scipy 线性代数

Matplotlib

Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面。 它为利用通用的图形用户界面工具包,如 Tkinter, wxPython, Qt 或 GTK+ 向应用程序嵌入式绘图提供了应用程序接口(API)。

Matplotlib
Matplotlib

使用 ggplot2 进行数据可视化

使用ggplot2进行数据可视化
使用 ggplot2 进行数据可视化

Big-O

大 O 符号(英语:Big O notation),又稱為漸進符號,是用于描述函数渐近行为的数学符号。 更确切地说,它是用另一个(通常更简单的)函数来描述一个函数数量级的渐近上界。 … 阶)的大 O,最初是一个大写希腊字母 “Ο” (omicron),现今用的是大写拉丁字母 “O”。

Big-O
Big-O

PDF下载(或点击阅读原文链接):
https://cheatsheets.becominghumanai.com/

参考链接:
https://becominghuman.ai/cheat-sheets-for-ai-neural-networks-machine-learning-deep-learning-big-data-science-pdf-f22dc900d2d7

 

 

 

 

 

 

《工业大数据白皮书》2019版

近日,由中国电子技术标准化研究院、全国信息技术标准化技术委员会大数据标准工作组主编,工业大数据产业应用联盟联合主编,联想集团等多家联盟成员企业参编的《工业大数据白皮书(2019版)》发布。

工业大数据白皮书(2019版)》基于工业大数据技术、产业发展现状,重点围绕『工业数据管理』这一热点议题,提炼了当前工业领域数据管理的重要方法,完善了工业大数据标准体系,为推动工业大数据落地应用和战略部署提供标准化支撑。

LaTeX 代码数学神器

这是一个帮你快速把数学公式图片转成 LaTeX 代码的工具,名为 Snip,可以免费下载使用。操作非常简单!下载工具之后,只需要一个快捷键,把数学公式截图下来,它就能给你LaTeX代码,你也可以直接在任务栏中修改代码,然后复制、粘贴,写出自己的公式。而且,这一工具不仅仅适用于用电脑打出来的公式,你自己手写的公式,也可以识别出来。

Convert images to LaTeX
Convert images to LaTeX

更好的是,这个工具适用于 Mac、Windows、Ubuntu 系统,适用于所有支持 LaTeX 的编辑器。

 

埃森哲:大数据分析方法论

当前,越来越多的应用涉及到大数据,而这些大数据的属性,包括数量、速度、多样性等等都呈现出不断增长的复杂性,因此,大数据分析方法在这一领域也就显得尤为重要,可以说是决定最终信息是否有价值的决定性因素。全球最大的管理咨询公司「埃森哲」的此前发布了一份 PPT,讲述大数据分析方法,看看他们具体是如何进行的。

由于此报告发布已经有一段时间,里面所提及的各种数据分析工具未必是最好的选择。诸如:SAS / SPSS / MATLAB 均为严谨高效的数据统计商业应用型工具,好比数据库中的 ORACLE,然而, R 与 Python 显然更匹配基础科学人才培养目标。同时,数据科学与大数据在各细分领域并发性爆发,充分展现了开源生态圈协同开发模式的强大优势与趋势。同时标志着『半成品化』应用工具时代的到来。最后,R 与 Python 逐步成为贯穿数据科学与大数据,机器学习,深度学习,新一代人工智能,乃至区块链技术一脉相承的语言工具,纯数据以外,更多的对象被纳入统计范围内。

尽管如此,从全面解读数据分析方法论的角度而言,此份报告仍然不失为一份有价值的参考材料。

《埃森哲:大数据分析方法论》。下载

面向数据科学与新一代人工智能的 K8S

数据科学家和软件工程师有许多相同的关注点:可重复的实验(比如可重复的构建);可移植和可复制的环境(如在开发、过渡和生产环境中具有相同的设置);凭证管理;跟踪和监控生产环境中的指标;灵活的路由;轻松扩展。不难看出,应用程序开发人员使用 Kubernetes 所做的事情与数据科学家可能想做的事之间有一些类似之处:

  • 可重复的批处理作业,如 CI/CD 管道,类似于机器学习管道,多个协同阶段在其中以可重复的方式一起处理数据、提取特征、训练、测试和部署模型;
  • 描述服务之间连接的声明性配置有助于创建跨平台的可重复学习管道和模型;
  • 微服务架构支持在管道中对机器学习模型进行简单地调试,并帮助数据科学家和他们团队中的其他成员进行协作。

数据科学家与应用程序开发人员面临许多相同的挑战,但他们也面临一些独特的挑战,这些挑战与数据科学家的工作方式以及机器学习模型比传统服务更难测试和监控这一事实有关。我们将重点讨论一个与工作流相关的问题。

大多数数据科学家使用交互式笔记本(interactive notebooks)工作,这是一个笔记本环境,通常由 Project Jupyter 开发,提供一种交互式 迭代编程环境,用户可以在其中混合说明性本文和代码、运行并更改代码、检查其输出。

这些特性使得该环境对探索性分析非常灵活。然而,它们并不是用于协作或发布的理想软件工件——想象一下,如果软件开发人员发布工作的主要方式是将来自交互式 REPL 脚本发布到 pastebin 服务。

与同事分享交互式笔记本就像分享实体笔记本一样——里面有一些很好的信息,但是必须仔细查找才能找到。由于笔记本的脆弱性和对环境的依赖性,同事在运行笔记本时可能会看到不同的输出——甚至更糟:它可能会崩溃。

数据科学家可能不想成为 Kubernetes 专家——这很好!Kubernetes 的优点之一就是构建更高级工具的强大框架。

Binder 服务 就是其中一个工具,采用一个 Jupyter 笔记本的 Git 存储库,构建容器镜像来提供服务,然后在路由公开的 Kubernetes 集群中启动镜像,这样就可以从公网访问。由于笔记本的一大缺点是其正确性和功能可能依赖于其环境,因此,如果有一个高级工具可用来构建不可变环境为 Kubernetes 上的笔记本提供服务的话,就可以避免许多让人头疼的事。

你可以使用托管的 Binder 服务或 运行自己的 Binder 实例,但是,如果你想在这个过程中获得更大的灵活性,你还可以使用 Source-To-Image(S2I)工作流和工具,以及 Graham Dumpleton 提供的 Jupyter S2I 镜像 上线自己的笔记本服务。事实上,对于基础设施专家或打包专家来说,Source-To-Image 工作流是构建可供主题专家使用的高级工具的良好起点。例如,Seldon 项目 使用 S2I 来简化模型服务发布——只要向构建器提供一个模型对象,它将构建一个容器并将其作为服务公开。

Source-To-Image 工作流的一个优点是,它支持在构建映像之前对源存储库进行任意操作和转换。有个例子可以说明这个工作流有多强大,我们 创建了一个 S2I 构建器镜像,该镜像以一个 Jupyter 笔记本作为输入,该笔记本展示了如何训练模型。然后,它处理这个笔记本以确定它的依赖关系,并提取 Python 脚本来训练和序列化模型。有了这些,构建器就会安装必要的依赖项并运行脚本来训练模型。构建器的最终输出是一个 REST Web 服务,它为由笔记本构建的模型提供服务。你可以看下 notebook-to-model-service S2I 的运行 视频。同样,这不是数据科学家必须开发的工具,但是,创建这样的工具是 Kubernetes 专家和打包专家与数据科学家合作的绝佳机会。