在开始机器学习之前,您不必学习线性代数,但有时您可能希望深入研究。
事实上,如果我建议在其他数学领域之前改进一个领域,那就是线性代数。它将为您提供工具,帮助您掌握理解和构建机器学习算法所需掌握的其他数学领域。
在本篇博文中,我们将更深入地探讨线性代数,以及如果您想从机器学习中获得更多收益,为什么应该花时间提高您的线性代数技能和知识。
如果您已经熟悉了特征向量和SVD,那么这篇文章可能不适合您。
通过我的新书《机器学习线性代数》,其中包含分步教程和所有示例的Python源代码文件,从而启动您的项目。
让我们开始吧。

机器学习线性代数
照片作者:Sarah,保留部分权利。
什么是线性代数
线性代数是数学的一个分支,它允许您简洁地描述高维空间中的坐标和平面之间的交互,并对其进行运算。
将其视为代数(处理未知数)在任意维度上的扩展。线性代数是关于处理线性方程组(例如线性回归:y = Ax)。我们不是处理标量,而是开始处理矩阵和向量(向量实际上只是一种特殊的矩阵)。
广义来说,在线性代数中,数据以线性方程的形式表示。这些线性方程又以矩阵和向量的形式表示。
— Vignesh Natarajan 在回答“线性代数如何在机器学习中使用?”的问题时
作为一个领域,它对您有用,因为您可以使用线性代数的符号和形式来描述(甚至执行)机器学习中使用的复杂操作(借助正确的库)。
线性代数之所以得到广泛应用,是因为它通常具有极好的并行性。此外,大多数线性代数运算都可以在没有消息传递的情况下实现,这使其适用于 MapReduce 实现。
— Raphael Cendrillon 在回答“为什么线性代数是现代科学/计算研究的先决条件?”的问题时
来自维基百科的关于线性代数的更多信息
在机器学习线性代数方面需要帮助吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
机器学习所需的最少线性代数知识
线性代数是一个基础领域。我的意思是,其他数学分支使用它的符号和形式来表达也与机器学习相关的概念。
例如,矩阵和向量在微积分中使用,当您想讨论优化损失函数时的函数导数时需要它们。它们也用于概率论,当您想讨论统计推断时。
……它在数学的各个领域都有使用,所以您会发现它在任何使用数学的地方都有应用……
— David Joyce 在回答“线性代数的意义是什么?”的问题时
如果我要说服您学习最少量的线性代数来提高您的机器学习能力,那就是以下 3 个主题
- 符号:了解符号将使您能够阅读论文、书籍和网站中的算法描述,以了解发生了什么。即使您使用 for 循环而不是矩阵运算,至少您也能将事物联系起来。
- 运算:在向量和矩阵的下一个抽象级别上工作可以使事情更清楚。这可以应用于描述、代码,甚至思想。学习如何执行或应用简单的运算,如加法、乘法、求逆、转置等矩阵和向量运算。
- 矩阵分解:如果有一个更深奥的领域我最推荐深入研究,那就是矩阵分解,特别是像 SVD 和 QR 这样的矩阵分解方法。计算机的数值精度是有限的,使用分解后的矩阵可以让您避免很多可能出现的溢出/下溢的混乱。此外,使用库快速进行 LU、SVD 或 QR 分解可以为您提供回归问题的普通最小二乘法。这是机器学习和统计学的基石。
如果您了解一些线性代数并不同意我的最少列表,请留言。我很想听听您的 3 个必需主题。
如果您想深入研究它的理论,您需要了解线性代数。如果您想阅读白皮书并考虑最先进的新算法和系统,您需要了解很多数学知识。
— Jesse Reiss 在回答“线性代数在计算机科学中有多重要?”的问题时
提高您线性代数能力的 5 个理由
当然,我不想让您止步于最基本。我希望您能更深入。
如果您的学习需求和进步的愿望无法激励您前进,那么以下五个理由可能会给您一些推动力。
- 构建块:让我再说一遍。线性代数是理解机器学习所需的微积分和统计学的关键。更好的线性代数将全面提升您的能力。认真对待。
- 更深的直觉:如果您能从向量和矩阵的层面理解机器学习方法,您将能更好地直观地理解它们如何以及何时起作用。
- 从算法中获得更多:更深入地理解算法及其约束条件,将使您能够自定义其应用,并更好地理解调整参数对结果的影响。
- 从头开始实现算法:您需要了解线性代数才能从头开始实现机器学习算法。至少能够阅读算法描述,最好是有效地使用提供向量和矩阵运算的库。
- 设计新算法:线性代数的符号和工具可以直接在 Octave 和 MATLAB 等环境中使用,使您能够快速地原型化现有算法的修改和全新的方法。
无论您是否喜欢,线性代数都会在您的机器学习之旅中占据重要地位。
3 门学习线性代数的视频课程
如果您想充实您的线性代数知识,有三种选择可以开始。
这些是我在准备这篇博文时最近找到并学习的视频课程和讲座。我认为每个都体面且适合不同的受众。
我总是用双倍速观看所有视频,并且强烈推荐您也这样做。另外,记笔记。
1. 线性代数复习
这是一份关于您应该熟悉的最重要的线性代数主题的快速回顾。这适用于那些曾在大学学习过线性代数但正在寻找提醒而不是教育的人。
https://www.youtube.com/watch?v=ZumgfOei0Ak
该视频的标题是“机器学习线性代数”,由 Patrick van der Smagt 使用伦敦大学学院的幻灯片创建。
2. 线性代数速成班
第二个选择是他在 Coursera 机器学习课程第一周中作为可选模块提供的线性代数速成班。
这适合对线性代数不太熟悉或完全不熟悉的工程师或程序员,他们正在寻找一个入门的起点。
它包含 6 个短视频,您可以在此处找到一个 YouTube 播放列表,标题为“机器学习 – 03. 线性代数回顾”。
https://www.youtube.com/playlist?list=PLnnr1O8OWc6boN4WHeuisJWmeQHH9D_Vg
涵盖的主题包括
- 矩阵和向量
- 加法和标量乘法
- 矩阵向量乘法
- 矩阵矩阵乘法
- 矩阵乘法性质
- 逆矩阵和转置
3. 线性代数课程
第三个选择是参加一门完整的线性代数入门课程。这是一个循序渐进的学习过程,将整个领域融入您的脑海。
我推荐 可汗学院的线性代数课程。
它非常棒。不仅内容广泛,而且提供了贯穿始终的抽查问题,而且 Sal 是一位出色的沟通者,直接切入应用层面。比我上过的任何大学课程都要好得多。
Sal 的课程分为 3 个主要模块
- 向量空间
- 矩阵变换
- 其他坐标系(基)
每个模块包含 5-7 个子模块,每个子模块包含 2-7 个视频或问题集,时长从 5-25 分钟不等(双倍速播放更快!)。
这是很棒的学习材料,学习曲线平缓,我建议全部学完,也许可以在周末集中学习。
更多学习线性代数的资源
如果您正在寻找更通用的建议,请查看对“我如何自学线性代数?”这个问题的回答。其中有一些真正的宝藏。
编程线性代数
作为一名程序员或工程师,您可能最擅长通过实践来学习。我知道我是。
因此,您可能希望准备一个编程环境或库,并开始使用测试数据编写矩阵乘法、SVD 和 QR 分解。
以下是一些您可能想考虑的选项。
- Octave:Octave 是 MATLAB 的开源版本,对于大多数操作而言,它们是等效的。这些平台是为线性代数而设计的。它们就是为此而生,并且做得非常好。使用它们是一种享受。
- R:它可以做到,但它不如 Octave 美观。查看这份方便的报告:“R 线性代数入门”(PDF)
- SciPy numpy.linalg:如果您是 Python 程序员,则易于使用且有趣,具有干净的语法和所有所需操作的访问权限。
- BLAS:基本线性代数子程序,如乘法、求逆等。可在大多数编程语言中移植或使用。
- LAPACK:线性代数库,LINPACK 的后继者。用于各种矩阵分解等的首选。与 BLAS 类似,可在大多数编程语言中移植或使用。
还有一个新的 Coursera 课程,题为“编码矩阵:通过计算机科学应用进行的线性代数”,作者是 Philip Klein,还有一本同名的配套书籍《编码矩阵:通过计算机科学应用进行的线性代数》。如果您是 Python 程序员并希望充实您的线性代数知识,这可能值得一看。
线性代数书籍
我最擅长通过应用示例来学习,但我也读了很多书。如果您和我一样,您也会希望书架上有一本好的教科书,以备不时之需。
本节列出了一些适合初学者的优秀线性代数教科书。
基础知识
这是一本涵盖线性代数基础知识的初学者教科书。两者都可以很好地补充可汗学院的课程。
应用
这些书籍更侧重于线性代数的应用。
我非常喜欢后者《矩阵计算》,因为它提供了理论片段和算法伪代码。对我来说,既是数学爱好者又是程序员,这都非常酷。如果您想从头开始自己实现这些过程(而不是使用库),这可能是一本适合您的书。
有关更多关于优秀初学者线性代数书籍的建议,请参阅: 学习线性代数最好的书是什么?
总结
在这篇文章中,您了解了线性代数及其在机器学习(以及更广泛的数学领域)中的重要作用。您还注意到了需要了解的最小线性代数知识。
我们讨论了三种学习线性代数的方法:复习、速成班或更深入的视频课程,这些现在都可以免费获得。如果您想深入研究,我们还介绍了该主题的顶级教科书。
我希望这能激发您对线性代数重要性和强大功能的兴趣。选择一个资源并完整地阅读/观看它。迈出下一步,提高您对机器学习的理解。
更新:在这篇博文的 Reddit 讨论 中提到两个额外的优质资源:Axler 的书籍《线性代数入门》以及 Gilbert Strang(上面提到的书籍作者之一)讲授的 MIT 公开课《线性代数》。
一如既往的精彩!
我越是深入研究 ML,就越发现线性代数是多么不可或缺。这是无可避免的。
顺便说一句,我一直在寻找一本关于 R 语言线性代数的书,这本书在 R 语言中的作用就像 Philip Klein 的《编码矩阵》对 Python 的作用一样。
我觉得我找到了!
Hrishikesh Vinod 的《R 语言动手矩阵代数:应用驱动和积极学习》
http://www.amazon.com/Hands-On-Matrix-Algebra-Using-Applications/dp/9814313696
到目前为止相当不错!
很棒的文章,谢谢。
您对微积分也有类似的看法和建议吗?
这 3 个也看起来很有希望——
线性代数 – Gilbert Strang(著名教科书的作者)
http://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/
编码矩阵 – Philip Klein(适合能写代码的人的线性代数)
https://class.coursera.org/matrix-002
线性代数 – 从基础到前沿
https://www.edx.org/course/linear-algebra-foundations-frontiers-utaustinx-ut-5-03x
我参加了“线性代数 – 从基础到前沿”课程。它非常好,而且非常有趣,因为他们还讨论了前沿,即当前(嗯,是最近几年)的研究重点。
(我猜您提到了前两个,并且有一个更近期的链接,但我不知何故错过了)
Jason,我强烈建议每个人都观看这些名为“线性代数精髓”的视频。这真是我见过的最美妙的东西。说真的。
https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab
谢谢分享,John。
您看了其中一些吗?为什么您喜欢它们?
这些视频绝对精彩。非常直观。我建议您同时观看一个讲解符号的课程。
感谢您提供视频链接。矩阵的列是变换空间的单位向量,这个见解似乎是我应该学到的,但我不记得了。
这些是优美、直观的视频
我想在机器学习(神经网络)领域进行研究,您认为可汗学院的线性代数课程足够吗?
这已经绰绰有余了。
非常感谢!
不客气。
这本书是否可以购买?只有纸质版吗?
如果可以,请提供出版商。
我的书只有 PDF 版本。
印度人如何购买您的线性代数书?
您可以使用 PayPal 或信用卡。
Strang 的论文“线性代数基本定理”(1993)
http://www.souravsengupta.com/cds2016/lectures/Strang_Paper1.pdf
是对基本子空间和 SVD 的精彩阐述。如果您能理解它,您将理解很多内容。
很好,谢谢 Brian。
嘿 Jason,您会推荐您的书来解决以下问题吗?
抱歉打扰您,但我想知道您是否可以推荐一本学习的书。
证明具有二次多项式核 K(u, v) = (1 + u · v)^2 的 SVM 在特征空间 (1, x1, x2, x21, x2, x1x2) 中等效于线性 SVM,因此具有此核的 SVM 可以将任何椭圆区域与平面其余部分分开。
不错。
不,我没有展示 SVM 核的任何推导。也许可以找一本关于 SVM 理论的书?
在学习做好机器学习所需的数学知识时,您认为最好从线性代数开始吗?我在大学时微积分、统计学和线性代数都学得很好,但已经 15 年没有练习了,所以我正在弄清楚重新学习的最佳起点。
谢谢!
我建议根本不要从数学开始
https://machinelearning.org.cn/faq/single-faq/what-mathematical-background-do-i-need-for-machine-learning
谢谢????。这对我开始我的线性代数之旅帮助很大。
很高兴听到这个!