月度归档:2019年05月

Deep Learning Specialization on Coursera

Gilbert Strang教授的MIT公开课:数据分析、信号处理和机器学习中的矩阵方法

线性代数的相关课程里,我最推崇的还是MIT Gilbert Strang教授的线性代数课程,关于这方面资源的介绍,可以参考我们之前那篇文章:那些值得推荐和收藏的线性代数学习资源

最近发现他依然活跃在教学一线,在MIT 2018春季学期开设了一门的相关课程:Matrix Methods in Data Analysis, Signal Processing, and Machine Learning

这门课程可以翻译为“数据分析、信号处理和机器学习中的矩阵方法”,课程主页的配图特别能说明问题:

以下是该课程资源链接,感兴趣的同学可以参考:

课程主页:https://ocw.mit.edu/courses/mathematics/18-065-matrix-methods-in-data-analysis-signal-processing-and-machine-learning-spring-2018/
课程官方视频:https://www.youtube.com/playlist?list=PLUl4u3cNGP63oMNUHXqIUcrkS2PivhN3k
爱可可老师B站搬运链接:https://www.bilibili.com/video/av53055190/

OpenResty完全开发指南:构建百万级别并发的Web应用

推荐一门有意思的课程:OpenResty 从入门到实战

对服务端工程师来说,如果你的工作中涉及 Nginx、高性能、高并发、动态控制、性能测试、分析等,那么,不论你使用什么开发语言和平台,OpenResty 都是不可多得的高性能开发利器。

但我发现,有不少人没接触过 OpenResty,是时候打开服务端新世界的大门了。

作为一个兼具开发效率和性能的服务端开发平台,OpenResty 并不像其他开发语言一样从零开始搭建,而是基于成熟的开源组件—— Nginx 和 LuaJIT。

其核心是基于 Nginx 的一个 C 模块(lua-nginx-module),这个模块将 LuaJIT 嵌入到 Nginx 服务器中,并对外提供一套完整的 Lua API,透明地支持非阻塞 I/O,提供了轻量级线程、定时器等高级抽象。

围绕这个模块,OpenResty 构建了一套完备的测试框架、调试技术和由 Lua 实现的周边功能库。

你可以用 Lua 进行字符串和数值运算、查询数据库、发送 HTTP 请求、执行定时任务、调用外部命令等,还可以用 FFI 的方式调用外部 C 函数。

这基本上满足了服务端开发所需要的全部功能,所以,OpenResty 的适用范围早已超出了反向代理和负载均衡。

这就意味着,掌握了 OpenResty,就能同时拥有脚本语言的开发效率和迭代速度,以及 Nginx C 模块的高并发和高性能优势。

通过丰富的 lua-resty 库,OpenResty 逐渐摆脱了 Nginx 的影子,形成了自己的生态体系,在 API 网关、软 WAF 等领域被广泛使用。

据我了解,OpenResty 现在是已经是全球排名第五的 Web 服务器了,我们常用的 12306 的余票查询功能、京东的商品详情页,这些高流量的背后,都是 OpenResty 在默默地提供服务。

说到这里,特别想为你推荐一个人——温铭。

他是 OpenResty 软件基金会主席,《OpenResty 最佳实践》作者,前 360 开源技术委员会委员。

他在互联网安全公司有 10 多年的工作经验,之前一直从事高性能服务端的开发和架构,负责开发过云查杀、反钓鱼和企业安全产品。

后来得知,温铭也是为一个新系统做技术选型时偶然了解到 OpenResty 的,那时他还是个 Pythoner,不喜欢 Nginx C 模块的艰涩,还想享受它的高性能。

鱼与熊掌都想兼得, 怎么办呢?OpenResty 满足了他的需求。

但是,目前市面上的 OpenResty 学习资料非常少,官方只提供了 API 文档,并没有入门和进阶的文档,网上找的资料也不够系统。

可以说,大部分的 OpenResty 使用者都是摸着石头过河,过程相当痛苦(他自己就是其中之一)。

所以,他在极客时间开了个课专门讲 OpenResty,目的很明确:帮你快速入门,建立 OpenResty 完整知识体系,进而真正掌握这款开发利器。

像他自己说的那样:写出正确的 OpenResty 代码和写出高性能的优质 OpenResty 代码之间,相差十万八千里。

而跨越这个巨大鸿沟的零件,就散落在 OpenResty 开源项目的源码、文档、issue、PR、幻灯片、邮件列表中,需要你把它们串联起来,形成一个完整的学习路径和知识图谱。

提前要了几篇专栏的文章,结合目录,我大致梳理了一下,如果用一句话概括这个专栏,我觉得是:“从实战中来,到实战中去”:

专栏中的不少代码,都取自开源 OpenResty 的测试案例和实际的开源项目,让你在入门之初,就了解真实的使用场景。

文章中还穿插了多个视频,内容都取自真实开源项目的功能点和 PR。通过视频,可以更加直观地看到,刚学到的知识点是怎样在实际中应用的。

最后的实战部分,看着也挺带劲,哥们会带你用 OpenResty 从零搭建一个微服务 API 网关,如果你想独立搭建一个更简单、更高性能的 API 网关,这部分内容可别错过。

从实际的开源项目中学习,再到实际的开源项目中去实战,将实战融入完整的知识体系,这逻辑没毛病,要是学完没有收获,直接来找我。

另外,我看哥们还挺走心,专门列了几个学习 OpenResty 的重点,会在专栏里着重讲解那种,有好几个特别「戳」我,这回跟着好好补补课:

同步非阻塞的编程模式

不同阶段的作用

LuaJIT 和 Lua 的不同之处

OpenResty API 和周边库

协程和 cosocket

单元测试框架和性能测试工具

火焰图和周边工具链

性能优化

关于学习这个课需要什么基础,直接引用温铭原话,他比我总结得好:

OpenResty 是在 Nginx 和 LuaJIT 的基础上搭建的,所以 Nginx 和 LuaJIT 的基础知识还是需要的。

但你只要了解很少的 Nginx 知识,就可以学习 OpenResty 了。

少到什么程度呢?涉及到的 Nginx 的知识,我只用一节课就介绍完了。所以,即使你从没接触过 Nginx 也没关系。

要知道,OpenResty 并不等同于 Nginx,OpenResty 这个项目存在的目的之一,就是让你感知不到 Nginx 的存在。

从编程语言的角度看,Lua 是一种很容易理解的语言,你只要能看懂它的代码,并不需要独立写出复杂的 Lua 代码,就可以完成专栏的学习了,我会用少数几节课带你入门 Lua,达到 OpenResty 的使用水准。

哥们写的有点长,我总结就一句:

放心学,学得会,能用着。

给 Java 新手的入门指南:零基础学 Java

极客时间新课 零基础学 Java:PayPal 技术专家手把手带你入门 Java,快速掌握 Java 编程技巧 http://gk.link/a/103ol

作为最受欢迎的编程语言之一,Java 已经走过了20多个年头。从已经落寞的诺基亚到现在火热的电商系统,我们都能看到 Java 语言的身影。虽然这几十年来,也都陆续有众多其它语言出现,但它们在普及程度上仍然无法与 Java 相提并论。

所以,我也认为,在未来十年,Java 仍将会是最受欢迎的编程语言。如果你想成为一名合格的后端工程师,并且想入职知名的互联网公司,那我推荐你深入学习 Java。原因如下:

薪水高。Java 工程师的月薪普遍在 10k-50k 之间,相比于一般职位,可谓“高薪”。

工作岗位较多。包括阿里巴巴、京东、去哪儿网、亚马逊在内的知名公司都在使用 Java 语言。

生态非常成熟。Java 不仅仅只是一种主流编程语言,它同时也代表着一整个活跃的生态系统。你在大数据、微服务、云计算等热门领域都能看到它的身影。

可以说,学好了 Java,不愁没有用武之地,未来的开发之路会非常宽广。

对于初学者而言,一开始很容易被各种编程语言的抽象概念吓倒。比如常量、字符类、对象、封装、继承、等等,虽然字都认识,但就是搞不明白什么意思,有时候如果过于关注某个概念的字面含义,反而更容易跑偏。

另外,好不容易把这些抽象的概念都弄懂了,但却不知道该怎样把它们串起来写出完整可用的程序。往往脑子里有思路,就是不知道怎样用代码体现出来。

我觉得这些问题其实很正常,编程语言并不像我们平常讲话用的语言那样是人和人之间交流的语言,它更像是一种人和动物之间交流的语言,两者的思维方式和行为方式是完全不同的,所以从理解一门编程语言到熟练运用,这中间还有不少的路要走。

为了让更多零基础的同学更快上手 Java,领略到 Java 这门应用最为广泛的编程语言的魅力,我给打算入门或正在学习 Java 的读者们,推荐臧萌在极客时间推出的《零基础学 Java》视频课程。

之所以推荐这个课程,主要是下面 3 个原因:

形式上,这门课拒绝死记硬背式的讲解,而是通过大量比喻、类比来辅助你理解抽象概念。让你边理解,边学习,掌握语法后的本质,从而不再视编程语言为“天书”。

内容上,会贯穿 Java 核心知识点,带你从最基础的语法讲起,到循环控制、再到类、面向对象、多态和继承以及多线程等高阶内容,带你全面掌握 Java 开发核心,让你学完之后可以独立运用 Java 写一些小型应用程序,从而把自己头脑中的想法变成实际可以运行的程序,体验到创造的乐趣。

除此之外,课程还设计了各种大大小小的习题演练,让你通过动手实践来更深入地掌握各个知识点,在实战中不断磨练编程技能。课程的最后,臧萌老师会带着你用 Java 完成一款小游戏的设计,这个项目会贯穿课程中涉及到的所有核心知识点,完成这个项目,你就能够把学到的知识融会贯通,完成从学习一门编程语言到使用一门编程语言的转变。

臧萌是谁?

臧萌,现任 PayPal 数据处理组技术负责人,《Java入门 1 2 3》一书的作者,曾帮助过数万名读者顺利入门 Java。

他先后在 Sybase,eBay,盛大,亚马逊,携程,PayPal 等公司工作,方向包括 ETL,GUI,IaaS,大数据,安全等。他多年来专注于Java,有10多年一线软件设计和开发经验,对 Java 语言和软件开发有深刻的认识。

另外不得不说,他的 Java 入门高口碑书籍《Java 入门123》,豆瓣评分 9.2,被称为 Java 入门图书的“战斗机”,累计 7 次印刷,售出超过 3w 册,通俗易懂的讲解风格也获得了众多读者的好评。

你将获得什么?

为了让你更清晰地了解Java入门需要掌握的核心知识点,臧萌老师为你梳理了 Java 入门的学习路径。结合《零基础学 Java》课程讲解,学完后你将完全掌握 Java 核心语法,并用 Java 编写出能够解决某个具体问题的应用程序,真正做到学以致用。

课程共分为六个章节。

第一章 Java 编程基础

会抽出编程语言中通用的语法点来讲述,让你学会写出符合语法规范的代码,逐步适应与计算机进行沟通的方式,即“你告诉我要做什么,数据在哪里,我来执行”。

第二章 Java 面向对象编程

会慢慢让你熟悉面向对象的思想,以类和对象的方式,花式组织代码和数据,从而能够让你的程序解决更为复杂的问题。学完后,你可以深刻理解 Java 面向对象的思想带来的好处,并利用它们来解决实际问题。

第三章 Java 中的异常处理

当代码执行出现错误时,Java 会通过异常机制来告诉我们“臣妾做不到啊!”。为了避免程序崩溃,会带你学会如何处理程序的异常,如何结合代码逻辑来快速排查和解决程序的问题。

第四章 Java 中的常用工具类和新语法

编程中有一个很重要的原则,就是“不要重复发明轮子”。各种常用的类库就相当于各种现成的轮子,我们直接使用就可以了,而不需要用代码重复实现一遍。在这一章,会带你学习 Java 提供的数据结构相关类,文件和网络 I/O 相关类以及一些新增的常用语法,从而让你能够更高效地解决一些常见问题场景。

第五章 Java 中的线程

一个线程可以简单的理解为一个 CPU 的核,是驱动程序运行的发动机。这一章中,你将学会如何在一个程序中使用多个线程。多个线程就像是多个工人在一起干活,协调好资源很重要,协调不好,工程进度就会受到拖累。这是这一章学习的重点,也是难点。

第六章 Java 编程实战

这一篇中涉及的方向很多,包括必备工具,Java 平台,常用类库,程序设计,游戏程序大练兵等。安排这些内容的目的就一个:让你可以开始独立设计和编写程序,为下一步的学习做好准备。

最后,还要嘱咐一句,学习编程语言,可以速成,但是掌握一门编程语言,没有速成的方法。一个人可以五天学会游泳,但是没有人可以五天成为游泳健将——无论这个人身体素质有多好。因此,想掌握一门编程语言的程,也需要多学多用。对一门编程语言的掌握程度,也是随着代码量和用它解决的问题的数量慢慢增长的。

Facebook工程师:从工程角度,系统掌握Python

推荐FB资深工程师景霄开设的《Python核心技术与实战》新专栏,从工程的角度,重新理解 Python,做到真正的“即学即用” http://gk.link/a/103fc

作者介绍:
景宵

本科毕业于武汉大学电子工程系(专业第一),后进入哥伦比亚大学攻读计算机硕士学位。

毕业后顺利入职Facebook,目前在核心组Feed Ranking,从事机器学习的相关工作。

这个专栏是从工程的角度来讲解Python这门编程语言,不会死抠一些很偏的知识点,相反,会从实际出发,以工作中遇到的实例为主线,去讲解Python的知识点和应用。本专栏中基于Python最新版本3.7,有大量独特的案例和见解,以及不少作者本人阅读源码后的体会,并且难易兼顾,专栏中既有简单的基础知识,也有进阶的课程,会尽量的做到“老少皆宜”。

你将获得:
从工程角度掌握 Python 高阶用法
独立开发 Python 项目的能力
完整的 Python 学习路径
硅谷一线工程师的独家经验分享
新目录
一、Python基础知识

方法:如何逐步突破,成为Python高手(Jingxaio)
工具:为什么必学Jupyter Notebook ? (Yuannan)
列表和元祖,到底用哪一个?(Jingxaio)
字典、集合,你真的了解吗? (Jingxiao)
深入浅出字符串 (Jingxiao)
Python“黑箱”:输入与输出 (Tan)
修炼基本功:条件与循环 (jingxiao)
提高程序的稳定性:异常处理 (jingxiao)
不可或缺的自定义函数(Jingxiao)
简约不简单的匿名函数(Jingxiao)
你好,面向对象(上)(Tan)
你好,面向对象(下)(Tan)
搭建积木:Python 模块化 (Tan)
答疑(一)(jingxiao)

二、Python进阶核心知识

Python对象的比较、复制 (Jingxiao)
值传递、引用传递or其他,Python里参数是如何传递的?(jingxiao)
强大的装饰器 (jingxiao)
metaclass:是潘多拉魔盒还是阿拉丁神灯 ?(Yuannan)
深入理解迭代器和生成器 (Tan)
揭秘Python协程 (Tan)
Python并发编程之Future (jingxiao)
Python并发编程之Asyncio (jingxiao)
你真的懂Python GIL(全局解释器锁)吗?(yuannan)
带你解析Python垃圾回收机制(Tan)
SWIG:TensorFlow等流行框架背后的Python/C++混合编程技术(Yuannan)
答疑(二)(jingxiao)

三、规范:编写高质量的Python程序

活都来不及干了,还有空注意代码风格?!【yuannan】
学会合理分解代码,提高代码可读性 (Tan)
如何合理运用assert?(Jingxiao)
巧用上下文管理器和With语句精简代码 (Jingxiao)
真的有必要写单元测试吗 (jingxiao)
pdb & cProfile:调试和性能分析的法宝(Jingxiao)
答疑(三)(jingxiao)

四、实战:带你搭建量化交易系统 (Tan)

初探量化世界
RESTful & Socket: 搭建你的交易后台核心
Pandas & Numpy: 策略与回测系统
Kafka & Rabbitmq: 自动化交易流水线
Mysql: 日志和数据存储系统
Django: 搭建监控平台
答疑(四)

五、分享:技术见闻和感想 (Jingxiao)

硅谷一线工程师的工作日常
细数服务器端开发的注意事项
提高市场竞争力:如何成为一个全栈工程师?

景霄目前从事机器学习的相关工作,主要负责是人工智能的推荐排序系统与算法。他曾领导多个上亿用户级产品的开发与落地,可以说工程与实战经验非常丰富。最近,他把自己的「工程角度」Python学习法整理了出来,跟极客时间合作了《Python核心技术与实战》专栏,希望带你从工程的角度,重新理解 Python,做到真正的“即学即用”。

近几年,Python 的受欢迎程度可谓是扶摇直上,加入 Python 学习大营的人越来越多。不过,随之而来的是,竞争越来越激烈。迷茫的声音也越来越多,我经常看到粉丝在后台留言:

Python程序员都有哪些发展方向?大概都有哪些技能点?

刚学了半年多 Python,想找个薪资高一点的工作,有什么建议吗?

想学 Python 爬虫,要从哪里开始入手?

想成为机器学习工程师,该怎样才能拿到 Offer ?

……

其实,大家迷茫的根本原因,是对 Python 的职业成长路径不清楚,也不了解各个阶段对应的核心知识点。因此,我给大家整理了一份「 Python 职业成长路径图」,涵盖Python程序员职场发展的4个方向,也列出了各个方向需要掌握的核心知识点,分享给你。

入门Python,夯实基础,掌握Python核心知识,比如基本的数据结构、面向对象编程、并发编程等等,成为一名合格的Python工程师;

Web工程师:当你掌握了Python中高阶知识,再去学一些单元测试、Flask框架、数据库使用等,就可以往Web工程师发展;

爬虫工程师:如果你对爬虫感兴趣,这是个不错的选择。你的知识库还需要再添加一块内容:学习爬虫开发;

数据分析工程师:大数据、数据分析这几年大火,相对应的,你还需要学习Matplotlib绘图、Pandas、10大核心算法等内容;

机器学习工程师:跟这个方向相关的词,还有“高薪”、“稀缺”,不过想成为机器学习工程师并非易事,你需要花更多的时间和精力去专研深度学习。

可以说,不管你往哪个方向发展,都非常有前景,特别是数据分析工程师和机器学习工程师。不过,想成为 Python 高手,找到一个好方向固然重要,更重要的是你的学习方法是否正确。

我认识这么一个牛人,他在读大学的时候才开始接触编程,但一路进入哥伦比亚大学计算机系读研、毕业后进入 Facebook 做机器学习工程师,他是怎么做到的呢?

他说,不光他自己,包括他在Facebook 认识的编程牛人们,都特别善于从「工程角度」、以实用为出发点来思考和学习一门语言。

方法是:花很短的时间看完基础语法,然后去了解一些重难点、易错点,最后自己亲自动手完成一个项目,达到融会贯通的效果。这样下来,可能几周时间就掌握得差不多了。

你看,这样从「工程角度」去学习和理解一门语言,会让你达到事半功倍的效果。

再跟你重点介绍一下,这位牛人叫景霄,是Facebook资深工程师。目前从事机器学习的相关工作,主要负责是人工智能的推荐排序系统与算法。他曾领导多个上亿用户级产品的开发与落地,可以说工程与实战经验非常丰富。

最近,他把自己的「工程角度」Python学习法整理了出来,跟极客时间合作了《Python核心技术与实战》专栏,希望带你从工程的角度,重新理解 Python,做到真正的“即学即用”。

相比市面上大多数理论且远离实际工程的学习资料,这个专栏特点很明显:

1.他不会死抠一些很偏的知识点,而是从实际出发,以工作中遇到的实例为主线,去讲解 Python 的核心技术和应用;

2.有完整的Python学习路径,从基础语法到高级用法,再到项目实战开发。让你把学到知识点通过项目都串联起来,形成你自己的Python 学习框架图;

3.整个专栏内容都是基于 Python 最新的3.7版本来讲解,告别网上那些陈旧不更新的学习内容,毋庸置疑,Python 3才是Python的未来。

具体地,《Python核心技术与实战》分成以下四个模块。

1.Python基础入门

必学知识:【Python基础数据结构】【Python基础语法】【文件操作】【错误与异常处理】【Python面向对象】【模块化】

第一步,你必然需要掌握的Python基础知识。这个专栏不仅仅只讲基础概念、操作,同时也为你整理了很多进阶难度的知识,或是一些重难点、易错点等需要注意的地方。

2.Python进阶核心知识

必学知识:【Python协议】【Python高级语法】【Python正则表达式】【Python并发编程】【垃圾回收机制】【项目实战】

第二步,进阶 Python 的核心知识点,比如装饰器、并发编程等等。如果你的工作只是写100行以下的脚本程序,可能不怎么会用得到。但如果你做的是大型程序的开发,则非常有必要。

3.规范:编写高质量的Python程序

这部分着重于教你把程序写得更加规范、更加稳定,用具体的编程操作和技巧,教你提高代码质量。比如,如何合理地分解代码、运用 assert,如何写单元测试等等。

4.Python实战,串联整个知识体系:带你搭建量化交易系统

必学知识点:【RESTful】【Socket】【Pandas】【Numpy】【Kafka】【RabbitMQ】【MySQL】【Django】

真正要掌握一门编程语言,仅仅学会分散的知识点是不够的,还必须要把知识点串联起来,做一些中型的项目才能有更深的领悟与提高。这部分,景霄用量化交易系统这个具体的实战案例,带你综合运用前面所学的Python知识。

再提一句

这个专栏里的所有内容都基于Python最新的3.7版本来讲解,其中包含着景霄大量的独家解读、案例,以及不少他阅读源码后的发现和体会。同时,在层次划分上,景霄希望能难易兼顾,循序渐进。专栏中既有核心的基础知识,也有高级的进阶操作,尽量做到“老少皆宜”。

李航老师《统计学习方法(第二版)》出版及统计学习方法第一版PPT课件下载

李航老师《统计学习方法(第二版)》出版了,以下是相关介绍。

内 容 简 介

统计学习方法即机器学习方法,是计算机及其应用领域的一门重要学科。
本书分为监督学 习和无监督学习两篇,全面系统地介绍了统计学习的主要方法。
包括感知机、k 近邻法、朴素贝 叶斯法、决策树、逻辑斯谛回归与最大熵模型、
支持向量机、提升方法、EM 算法、隐马尔可夫 模型和条件随机场,以及聚类方法、
奇异值分解、主成分分析、潜在语义分析、概率潜在语义分 析、马尔可夫链蒙特卡罗法、
潜在狄利克雷分配和 PageRank 算法等。除有关统计学习、监督学 习和无监督学习的概
论和总结的四章外,每章介绍一种方法。叙述力求从具体问题或实例入手, 由浅入深,
阐明思路,给出必要的数学推导,便于读者掌握统计学习方法的实质,学会运用。
为满足读者进一步学习的需要,书中还介绍了一些相关研究,给出了少量习题,
列出了主要参 考文献。 本书是统计机器学习及相关课程的教学参考书,
适用于高等院校文本数据挖掘、信
息检索及自然语言处理等专业的大学生、
研究生,也可供从事计算机应用相关专业的研发人员 参考。

第二版序言

《统计学习方法》第一版于2012年出版,讲述了统计机器学习方法,主要是一些常用的监督学习方法.
第二版增加了一些常用的无监督学习方法,由此本书涵盖了传统统计机器学习方法的主要内容.
在撰写《统计学习方法》伊始,对全书内容做了初步规划.第一版出版之后,即着手无监督学习方法
的写作.由于写作是在业余时间进行,常常被主要工作打断,历经六年时间才使这部分工作得以完成.
犹未能加入深度学习和强化学习等重要内容,希望今后能够增补,完成整本书的写作计划.
《统计学习方法》的出版正值大数据和人工智能的热潮,生逢其时,截至2018年4月本书共印刷21次,
133,000册,得到了广大读者的欢迎和支持.有许多读者指出本书对学习和掌握机器学习技术有极大的
帮助.也有许多读者通过电子邮件、微博等方式指出书中的错误,提出改进的建议和意见.一些高校
将本书作为机器学习课程的教材或参考书.有的同学在网上发表了读书笔记.有的同学将本书介绍的
方法在计算机上实现.清华大学深圳研究生院袁春老师精心制作了第一版十二章的课件,在网上公布,
为大家提供教学之便.众多老师、同学、读者的支持和鼓励,让作者深受感动和鼓舞.在这里向所有
的老师、同学、读者致以诚挚的谢意!
能为中国的计算机科学、人工智能领域做出一点微薄的贡献,感到由衷的欣慰,同时也感受到作为知
识转播者的重大责任,让作者决意把本书写好.也希望大家今后不吝指教,多提宝贵意见,以帮助继
续提高本书的质量.在写作中作者也深切体会到教学相长的道理,经常发现自己对基础知识的掌握不
够扎实,整个过程帮助自己对相关知识进行了深入的学习,受益匪浅.
本书是一部机器学习的基本读物,要求读者拥有高等数学、线性代数和概率统计的基础知识.书中主
要讲述统计机器学习的方法,力求系统全面又简明扼要地阐述这些方法的理论、算法和应用,使读者
能对这些机器学习的基本技术有很好的掌握.针对每个方法,详细介绍其基本原理,基础理论,实际
算法,通常给出细致数学推导和具体实例,帮助读者理解,也便于日后复习.
第二版增加的无监督学习方法的初稿,王泉、陈嘉怡、柴琛林、赵程绮等帮助做了认真细致的校阅,
提出了许多宝贵意见,在此谨对他们表示衷心的感谢.清华大学出版社的薛慧编辑一直给予非常专业
的指导和帮助,在此也对她表示衷心的感谢.
由于作者水平有限,本书一定存在不少错误,恳请各位专家、老师、同学、读者批评指正.

李 航
2018年4月23日

目录

第一篇 监督学习
    
第二篇 无监督学习
第13章 无监督学习概论        
13.1.1 无监督学习基本原理
13.1.2 基本问题
13.1.3 机器学习三要素
13.1.4 无监督学习方法

第14章 聚类方法
14.1 聚类的基本概念
14.1.1 相似度或距离
14.1.2 类或簇
14.1.3 类与类之间的距离
14.2 层次聚类
14.3 k均值聚类
14.3.1 模型
14.3.2 策略
14.3.3 算法
14.3.4 算法特点
本章概要
继续阅读
习题
参考文献             

第15章 奇异值分解
15.1 奇异值分解的定义与性质
15.1.1 定义与定理
15.1.2 紧奇异值分解与截断奇异值分解
15.1.3 几何解释
15.1.4 主要性质
15.2 奇异值分解的计算
15.3 奇异值分解与矩阵近似
15.3.1 弗罗贝尼乌斯范数
15.3.2 矩阵的最优近似
15.3.3 矩阵的外积展开式
本章概要
继续阅读
习题
参考文献

第16章 主成分分析
16.1 总体主成分分析
16.1.1 基本想法
16.1.2 定义和导出
16.1.3 主要性质
16.1.4 主成分的个数
16.1.5 规范化变量的总体主成分
16.2 样本主成分分析
16.2.1 样本主成分的定义和性质
16.2.2 相关矩阵的特征值分解算法
16.2.3 数据局正的奇异值分解算法
本章概要
继续阅读
习题
参考文献

第17章 潜在语义分析
17.1 单词向量空间与话题向量空间
17.1.1 单词向量空间
17.1.2 话题向量空间
17.2 潜在语义分析算法
17.2.1 矩阵奇异值分解算法
17.2.2 例子
17.3 非负矩阵分解算法
17.3.1 非负矩阵分解
17.3.2 潜在语义分析模型
17.3.3 非负矩阵分解的形式化
17.3.4 算法
本章概要
继续阅读
习题
参考文献

第18章 概率潜在语义分析
18.1 概率潜在语义分析模型
18.1.1 基本想法
18.1.2 生成模型
18.1.3 共现模型
18.1.4 模型性质
18.2 概率潜在语义分析的算法
本章概要
继续阅读
习题
参考文献

第19章 马尔可夫链蒙特卡罗法
19.1 蒙特卡罗法
19.1.1 随机抽样
19.1.2 数学期望估计
19.1.3 积分计算
19.2 马尔可夫链
19.2.1 基本定义
19.2.2 离散状态马尔可夫链
19.2.3 连续状态马尔可夫链
19.2.4 马尔可夫链的性质
19.3 马尔可夫链蒙特卡罗法
19.3.1 基本想法
19.3.2 基本步骤
19.3.3 马尔可夫链蒙特卡罗法与统计学习
19.4 Metropolis-Hastings算法
19.4.1 基本原理
19.4.2 Metropolis-Hastings算法
19.4.3 单分量Metropolis-Hastings算法
19.5 吉布斯抽样
19.5.1 基本原理
19.5.2 吉布斯抽样算法
19.5.3 抽样计算
本章概要
继续阅读
习题
参考文献

第20章 潜在狄利克雷分配
20.1 狄利克雷分布
20.1.1 分布定义
20.1.2 共轭先验
20.2 潜在狄利克雷分配模型
20.2.1 基本想法
20.2.2 模型定义
20.2.3 概率图模型
20.2.4 随机变量序列的可交换性
20.2.5 概率公式
20.3 LDA的吉布斯抽样算法
20.3.1 基本想法
20.3.2 算法的主要部分
20.3.3 算法的后处理
20.3.4 算法
20.4 LDA的变分EM算法
20.4.1 变分推理
20.4.2 变分EM算法
20.4.3 算法推导
20.4.4 算法总结
本章概要
继续阅读
习题
参考文献

第21章 PageRank算法
21.1 PageRank的定义
21.1.1 基本想法
21.1.2 有向图和随机游走模型
21.1.3 PageRank的基本定义
21.1.4 PageRank的一般定义
21.2 PageRank的计算
21.2.1 迭代算法
21.2.2 幂法
21.3.3 代数算法
本章概要
继续阅读
习题
参考文献

第22章 无监督学习方法总结
22.1 无监督学习方法的关系和特点
22.1.1 各种方法之间的关系
22.1.2 无监督学习方法
22.1.3 基础及其学习方法
22.2 话题模型之间的关系和特点
参考文献

附录A 梯度下降法
附录B 牛顿法和拟牛顿法
附录C 拉格朗日对偶性
附录D 矩阵的基本子空间
附录E KL散度的定义和狄利克雷分布的性质
                  
索引

有同学将第一版相关的机器学习算法用python实现了一遍,可以参考:

https://github.com/WenDesi/lihang_book_algorithm (致力于将李航博士《统计学习方法》一书中所有算法实现一遍)

最后附上清华大学深圳研究生院袁春老师精心制作了第一版十二章的课件,关注公众号AINLP,回复”tongjixuexi”获取:

极客时间新课:Web 协议详解与抓包实战

极客时间新课《Web 协议详解与抓包实战》视频课,访问课程主页:http://gk.link/a/103bR

发现大部分技术人,多多少少都会遇到下面的困惑,比如:

AJAX 跨域访问时总被浏览器的同源策略阻止,其背后的原理及符合其设计思想的解决方案是什么?

缓存可以提升性能,但什么样的 HTTP 消息才会被浏览器或者代理服务器缓存呢?

抓包时收到 4xx 或者 5xx HTTP 响应码,这意味着服务器端发生了什么?

当我们维护 HTTPS 连接时,如果要优化TLS/SSL 的卸载性能,应该从哪里入手?

定位问题时,发现本地的 TCP 连接状态中出现了FIN_WAIT、CLOSE_WAIT 或者TIME_WAIT,都是什么原因引起的?应该如何解决?

想要提升 TCP 连接的传输速度,可服务器上相关的系统参数多达数十个,究竟该怎么调整?

时下逐渐普及的 IPv6 ,在报文上到底与 IPv4 协议有何差别?

你会发现,这些问题其实都和 Web 协议密切相关。我常常听到身边人抱怨“学不动了”,之所以会这样,大多是因为没有掌握好互联网体系中的底层知识。这些知识点相对稳定,而其他时刻变化的知识点是构建在这些知识点之上的。一旦掌握好,就可以长久使用,并且保持快速学习的能力。

Web 协议就是其中非常重要的一个模块。虽然它常常要兼容 internet 中非常古老或者有着突破性创新的浏览器或者服务器,从而也在时刻进化,但只要我们抓住它设计时背后的指导原则,系统地将 Web 协议转化为我们头脑中的结构体知识,就可以对我们学习前后端开发框架、面向连接的编程语言、各种分布式组件、架构设计、微服务编程等都起到事半功倍的效果。

可以说,无论你是前后端工程师,还是运维测试,如果想面试更高的职位,或者要站在更高的角度去理解技术业务架构,并能在问题出现时快速、高效地解决问题,Web 协议一定是你绕不过去的一道坎。熟练掌握各种常用 Web 协议,可以帮你在工作中轻松应对各种网络难题。

如果你是前端工程师,可以快速定位问题的根源在后端还是前端,对网页性能的提升会有更多的思路。

如果你是后端工程师,可以更清晰地理解Web容器的工作原理,在网络层面快速缩小问题范围。

如果你是运维工程师,可以更明确地规划硬件及网络资源,对于故障节点的恢复也会有更系统的解决方案。

如果你是测试工程师,可以对压测工具的原理有更深入的理解,对RPC测试用例的构造也会更全面。

如果你是架构师,将会对分布式系统下的高可用架构设计和性能优化等问题有更加体系化的认识。

可是,想要真正掌握 Web 协议,并没有想象中那么容易。我发现大部分人在学习时,都卡在下面这些问题上:

Web协议的体系庞大,大多概念过于抽象,导致初学者很容易从入门到放弃。

很难快速上手,就算弄懂了复杂的概念,工作中一遇到复杂问题,还是一头雾水,不知道如何下手。

网上有很多文章可以参考,但要不就是知识点零散,要不就是解释得蜻蜓点水,无法深入到底层。

市面上相关的课程很少,要不就是仅仅讲述某一个协议,要不就是只从理论出发来讲解,实战性不强。

除此之外,很少有人会在文章或课程里通过抓包去把 Web 协议的各个细节呈现出来,然后掰开揉碎了讲给大家。基于此,我推荐你陶辉老师在极客时间开的《Web 协议详解与抓包实战》视频课,完全从实战出发,在关键场景中结合抓包工具进行实战分析,为你深入浅出地讲解常见 Web 协议涉及到的核心知识,并彻底掌握这些协议。

陶辉是谁?

陶辉,现在是智链达 CTO。他曾担任阿里云高级专家,也在华为、腾讯、思科等公司从事过服务器端的研发工作。相信陶辉来讲 Web 协议详解与抓包实战,一定会带给你不一样的收获。为什么这么说?

在华为他负责 iMAP 网管系统的研发,在通过 SNMP 等协议管理众多网络设备的过程中,对路由器交换机如何处理协议栈、选择路由、转发报文等流程有了深入的理解;

在腾讯QQ空间,通过使用自定义的、基于 TCP 的 Qzone 协议传递巨量的数据,他对如何设计出高性能、可扩展的应用协议有了丰富的实践经验;

在思科他从事 Nginx 服务的研发,对 Web 服务器如何高效地处理 HTTP 协议有了全面的认识;

在阿里云作为 VPC 软件自定义网络项目中的管理系统架构师,他通过基于 Intel DPDK 自建网关、自定义网络层协议等工作,对 IDC 内部网络系统有了深刻了解。

在《Web 协议详解与抓包实战》视频课中,陶辉老师会把自己十几年积累的第一手经验毫无保留地分享给大家。

你能获得什么?

陶辉老师会跟你一起从应用层到底层,通过具体问题和场景来学习 Web 协议。具体来说,你可以有下面 4 点收获。

1. 深入理解常用 Web 协议

课程将基于应用场景深入介绍Web协议栈中最常用的HTTP/1.1、Websocket、HTTP/2.0、TLS/SSL、TCP、IP协议,这些协议处在 OSI 网络栈中的不同层级,每一层对上层协议封装、隐藏其下层协议的实现细节,而上层协议必须理解其相邻下层协议解决了什么问题,有哪些约束条件。陶辉老师会带你自上而下的学习这些协议的语法、应用场景,以建立起结构体的知识体系。

2. 快速定位和解决网络疑难杂症

网络问题最为复杂,它涉及到多样化的客户端、技术相对封闭的网络设备、层层可能修改消息的代理服务器、快速迭代中的源服务器等,当客户端与服务器由于编程、配置错误造成系统故障时,相比在某一端使用经验式的排除法查错,从网络层面定位问题更为科学、快速而有效。

3. 掌握常见抓包工具及报文分析方法

陶辉老师会配合抓包实践来带你深入了解协议细节。关于抓包工具的学习,则会遵循“即用即学”的原则,用到什么学什么,让你快速上手。

对于HTTP报文的抓包实践,主要使用 Chrome 浏览器提供的开发者工具 Network 面板,同时也将使用到 curl、telnet 命令行来模拟 HTTP 请求的发送。Wireshark是这门课程的主要抓包工具,包括过滤器、各面板的使用、如何基于统计分析报文等。对于服务器端的抓包我们会使用 tcpdump工具,并配合 Wireshark 分析报文。

4. 熟悉 Web 协议的架构和设计原则

HTTP 最初用于解决人与机器的通讯,了解指导其设计原则的REST架构,就能理解在空间上它如何应对全球性的巨型分布式网络,在时间上如何应对数十年的技术变迁。

在分层架构下各层都有其待解决的核心问题,TLS/SSL协议面对的是如何使用非对称加密协商密钥及验证身份,TCP协议面对的则是可控流量下的可靠传输,IP协议则关注报文在主机间的可达性,带着这些需求及约束,便可从容应对变化。