机器学习中文资源概览

举报
Smy1121 发表于 2019/07/09 15:02:46 2019/07/09
【摘要】 机器学习日益广为人知,越来越多的计算机科学家和工程师投身其中。不幸的是,理论、算法、应用、论文、书籍、视频等信息如此之多,很容易让初学者迷失其中,不清楚如何才能提升技能。本文作者依据自身经验给出了一套快速上手的可行方法及学习资源的分类汇总,机器之心在其基础上做了增益,希望对读者有所帮助。

        机器学习的基础是数学。数学并非是一个可选可不选的理论方法,而是不可或缺的支柱。如果你是一名计算机工程师,每天使用 UML、ORM、设计模式及其他软件工程工具/技术,那么请闭眼一秒钟,忘掉一切。这并不是说这些概念不重要,绝不是!但是机器学习需要一种不同的方法。如今 Python 如此流行的原因之一是其「原型设计速度」。在机器学习中,一种使用几行代码即可建模算法的语言绝对是必要的。


微积分、线性代数、概率论在机器学习几乎所有算法中不可或缺。如果你的数学背景很扎实,请跳过这一章节。如若不然,那么重新温习一下这些重要概念也不错。考虑到理论的数量,我并不建议大家从大部头开始。尽管一开始可以用它查询具体概念,但是初学者先关注简单的话题比较好。网上有很多好的在线资源(比如 Coursera、可汗学院或优达学城),实用且适合各种背景的人群。但是我建议从提纲之类的简明书籍上手,其中所有核心概念均被涉及,次要概念可在需要的时候自行查询。这种方法虽然不够系统,但却避免了这样的缺陷:大量晦涩概念使得没有扎实理论背景的人望而却步。


初学者最好先学习下列内容:


概率论

1、离散型和连续型随机变量

2、主要分布(伯努利分布、二项式分布、正态分布、 指数分布、 泊松分布、Beta 和 Gamma 分布)

3、矩估计和最大似然估计

4、贝叶斯统计

5、相关性系数和协方差(Correlation and Covariance)


线性代数

1、向量和矩阵

2、矩阵的行列式

3、特征向量和特征值

4、矩阵分解(如 SVD)


微积分

1、极限与导数

2、微分和积分

3、数值计算与最优化方法


网上有很多免费资源,比如:

《概率论入门》,Grinstead、Snell 著(https://www.dartmouth.edu/~chance/teaching_aids/books_articles/probability_book/amsbook.mac.pdf)

《线性代数入门》,Wise、Gallagher 著(http://www.stat.columbia.edu/~liam/teaching/4315-spr06/LinAlg.pdf)

《微积分入门》,Heinbockel 著(http://www.math.odu.edu/~jhh/Volume-1.PDF)


维基百科上也有很多好资源,对方程、定理等进行了清晰易懂的解释。



机器之心也介绍过许多数学基础与概念:

1>基础入门:深度学习矩阵运算的概念和代码实现

2>想了解概率图模型?你要先理解图论的基本定义与形式

3>深度神经网络中的数学,对你来说会不会太难?

4>Reddit 热门话题:如何阅读并理解论文中的数学内容?



机器学习主要需要的数学基础就是微积分、线性代数、概率论,我们感觉只需要掌握大学中常见的高数、线性代数、概率论与数理统计三门课程,基本上概念的理解就没什么问题了。如果再学一点数值计算和最优化等,我们基本上就能理解机器学习的学习过程推导。



机器学习方法建议(面向初学者)


特征工程

开始机器学习的第一步是理解如何评估和改进数据集的质量。管理特征的类别和缺失、归一化和降维(PCA、ICA、NMF)是大幅提高算法性能的基本技术,而且还有助于研究如何将数据集分割成训练集和测试集、如何采取交叉验证来取代传统的测试方法。


机器之心也曾详解过特征工程如 PCA 降维算法的详细理论与推导,当然我们还介绍了其它有关特征的概念:

1>从特征分解到协方差矩阵:详细剖析和实现PCA算法

2>基于TensorFlow理解三大降维技术:PCA、t-SNE 和自编码器

3>似乎没区别,但你混淆过验证集和测试集吗?



Numpy:Python 数值计算之王!


使用 Python 时,Numpy 不仅仅是一个库。它是几乎所有机器学习实现的基础,因此了解它的工作原理、关注向量化和广播(broadcasting)是非常必要的。这些技术可以帮助加速大多数算法的学习过程,利用多线程和 SIMD、MIMD 架构的力量。


官方文档已经很完整了,不过,我还建议大家看一下以下资源:

1、《Python 数据科学手册:数据使用的核心工具》,VanderPlas J. 著

2、《Python 科学编程入门书》,LangTangen P. H. 著

3、  维度、广播操作与可视化:如何高效使用TensorFlow


数据可视化

Matplotlib 即使不是纯粹的机器学习话题,了解如何可视化数据集也很重要。Matplotlib 可能是最广泛使用的解决方案:Matplotlib 易用,允许绘制不同种类的图表。Bokeh 和 Seaborne 提供了有趣的替代方案。不必要彻底了解所有包,但是了解每一个包的优点和弱点还是很有用的,可以帮助你选择合适的包。


了解 Matplotlib 细节的资源:《掌握 Matplotlib》,McGreggor D. 著


线性回归

线性回归是最简单的模型之一,可以把它作为一个优化问题来研究,该问题可通过最小化均方误差而得到求解。该方法虽然有效,但是限制了可利用的可能性。我建议还可以把它当作贝叶斯问题,使用之前的可能性展示参数(比如,高斯分布),优化变成了最大似然估计(Maximum Likelihood Estimation,MLE)。即使这看起来更加复杂,但该方法提供了一个可供几十个其他复杂模型共享的新方法。


 

Coursera 上介绍贝叶斯统计的课程:

1、《贝叶斯统计:从概念到数据分析》(https://www.coursera.org/learn/bayesian-statistics/)

2、《贝叶斯统计:技术与模型》(https://www.coursera.org/learn/mcmc-bayesian-statistics)


 

以及这两本书:

1、《思考贝叶斯》,Downey B. A. 著

2、《黑客的贝叶斯方法》Davidson-Pilon C. 著


 

包括线性回归在内,机器之心曾介绍了一些解决回归问题的方法(后文提供了 CART 算法进行回归分析):

1、初学TensorFlow机器学习:如何实现线性回归?

2、回归、分类与聚类:三大方向剖解机器学习算法的优缺点(附Python和R实现)


 

线性分类

通常情况下,Logistic 回归是最佳起始点,也是研究信息论进而了解信息熵、交叉熵和互信息的好机会。类别交叉熵(Categorical cross-entropy)是深度学习分类中最稳定、使用最广泛的代价函数,一个简单的 logistic 回归可以展示它是如何加速学习过程的(与均方差相比)。另一个重要的话题是正则化(Ridge、Lasso 和 ElasticNet)。很多情况下,人们认为它是一种提高模型准确率的深奥方式,但是它的真实意义是更准确,在具体实例的帮助下变得易于理解。我还建议刚开始的时候,把 logistic 回归当作一个简单的神经网络,可视化(以 2D 实例为例)权重向量在学习过程中的移动轨迹。


我还建议本节应包括超参数网格搜索。网格搜索不在没有完整了解的情况下尝试不同的值,而是评估不同的超参数集的性能。因此,工程师可以将注意力集中在可达到最高准确率的组合上。当然还有更加强大的贝叶斯优化方法,即利用先验知识逼近未知目标函数的后验分布从而调节超参数的方法。


1>从头开始:用Python实现带随机梯度下降的Logistic回归

2>如何通过牛顿法解决Logistic回归问题

3>拟合目标函数后验分布的调参利器:贝叶斯优化



支持向量机(SVM)

支持向量机提供了不同的分类方法(包括线性和非线性方法)。该算法非常简单,具备基础几何知识的人也可以学会。不过,了解核支持向量机的工作原理非常有用,因为它会在线性方法失败的时候展示出其真正实力。


一些有用的免费资源:

1、《支持向量机简明教程》,Law 著

2、核函数方法,维基百科词条

3、详解支持向量机SVM:快速可靠的分类算法

4、详解支持向量机(附学习资源)



决策树

决策树提供了另一种分类和回归的方法。通常,它们不是解决复杂问题的首选,但它们提供了完全不同的方法,即使是非技术人员也可以很容易理解,该方法还可以在会议或演示中可视化。


1>教程 | 从头开始:用Python实现决策树算法

2>从决策树到随机森林:树型算法的原理与实现



集成学习一览

在理解了决策树的动态特性以后,研究集成训练树的集(集成)来提高整体准确率的方法很有用。随机森林、梯度树提升和 AdaBoost 都是强大的算法,且复杂度较低。对比简单的树和提升方法与 bagging 方法采用的树的学习过程挺有趣的。Scikit-Learn 提供了最常见的实现方法,但是如果你想更好地驾驭这些方法,我还是建议你在 XGBoost 上多花些时间,XGBoost 是一个既适用于 CPU 又适用于 GPU 的分布式框架,即使在较大的数据集上也能加速学习过程。


1、从Boosting到Stacking,概览集成学习的方法与性能


聚类

当开始聚类方法的学习时,我的建议是从高斯混合算法(基于期望最大化/EM)学起。虽然 K-均值聚类要更加简单易懂(也是必须要学习的),但是高斯混合算法为我们提供了纯粹的贝叶斯方法,在其他类似任务中也十分实用。其它必学的算法还有层次聚类(Hierarchical Clustering)、谱聚类(Spectral Clustering)和 DBSCAN。这对你了解基于实例的学习或研究 K-近邻算法(既适用于有监督又适用于无监督任务)也是有帮助的。谱聚类的一个有用的免费资源是:

1、《谱聚类教程》,Von Luxburg U 著


聚类算法是无监督学习中的代表,机器之心也曾详细地介绍过各种聚类方法与实现:

1>机器理解大数据的秘密:聚类算法深度详解

2>综述分类、聚类和信息提取算法在文本挖掘领域内的应用

3>如何用Python和机器学习炒股赚钱?


神经网络入门

神经网络是深度学习的基础,你可以在单独的课程中学习神经网络。但是,我认为理解感知机、多层感知机以及反向传播算法的概念也很有帮助。Scikit-Learn 提供了一个实现神经网络的简单方法,但是,开始探索 Keras 也是一个好主意,Keras 是一个基于 Tensorflow、Theano 或 CNTK 的高级架构,允许使用最少的努力对神经网络进行建模和训练。开始神经网络学习的一些好资源:

1>《人工神经网络基础》Hassoun M 著

2>《Keras 深度学习》Gulli A.、 Pal S. 著


目前最好的深度学习书籍可能就是: 

《深度学习》,Goodfellow I.、 Bengio Y.、Courville A. 著


1>最全的DNN概述论文:详解前馈、卷积和循环神经网络技术

2>机器之心GitHub项目:从零开始用TensorFlow搭建卷积神经网络

3>深度神经网络全面概述:从基本概念到实际模型和硬件基础

4>训练的神经网络不工作?一文带你跨过这37个坑

5>TensorFlow从基础到实战:一步步教你创建交通标志分类神经网络

6>神经网络快速入门:什么是多层感知器和反向传播?

7>教程 | 如何用30行JavaScript代码编写神经网络异或运算器

8>神经网络调试手册:从数据集与神经网络说起

9>神经网络基础:七种网络单元,四种层连接方式

10>如何从信号分析角度理解卷积神经网络的复杂机制?

11>神经网络架构演进史:全面回顾从LeNet5到ENet十余种架构(附论文)

12>麻省理工解读神经网络历史,三篇论文剖析基础理论


最后,我们将介绍部分机器之心曾发过的综述性技术文章或论文,并希望这些文章能对大家全面理解各种方法有所帮助:


1>自动驾驶计算机视觉研究综述:难题、数据集与前沿成果

2>一文帮你发现各种出色的GAN变体

3>深度强化学习综述:从AlphaGo背后的力量到学习资源分享

4>从FPS到RTS,一文概述游戏人工智能中的深度学习算法

5>视觉问答全景概述:从数据集到技术方法

6>神经风格迁移研究概述:从当前研究到未来方向

7>从语言学到深度学习NLP,一文概述自然语言处理

8>迁移学习全面概述:从基本概念到相关研究

9>一文综述所有用于推荐系统的深度学习方法

10>一文读懂遗传算法工作原理(附Python实现)

11>从自编码器到生成对抗网络:一文纵览无监督学习研究现状


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。