机器学习线性代数速成课程。
7天内掌握机器学习中使用的线性代数。
线性代数是数学的一个领域,它被普遍认为是更深入理解机器学习的先决条件。
虽然线性代数是一个庞大的领域,有许多深奥的理论和发现,但机器学习从业者需要掌握该领域的基本工具和表示法。只要对线性代数有扎实的基础了解,就有可能只关注其中有用或相关的部分。
在本速成课程中,您将发现在7天内如何入门并自信地阅读和使用Python实现机器学习中使用的线性代数表示法。
这是一篇内容丰富且重要的文章。您可能想把它加入书签。
用我的新书《机器学习线性代数》快速启动您的项目,书中包含分步教程和所有示例的Python源代码文件。
让我们开始吧。
- 2018年3月更新:修正了SVD课程中的一个小拼写错误。

机器学习线性代数(7天迷你课程)
照片由 Jeff Kubina 拍摄,保留部分权利。
本速成课程适合谁?
在开始之前,让我们确保您来对了地方。
本课程面向可能了解一些应用机器学习的开发人员。也许您知道如何使用流行工具从头到尾解决一个预测建模问题,或者至少了解大部分主要步骤。
本课程的课程假设您具备以下几点:
- 您熟悉基本的Python编程。
您可能了解一些基本的NumPy用于数组操作。 - 您想学习线性代数以加深对机器学习的理解和应用。
您不需要知道:
- 您不需要是数学天才!
- 您不需要是机器学习专家!
本速成课程将带您从一个略懂机器学习的开发人员,成长为能够掌握线性代数基础知识的开发人员。
注意:本速成课程假定您有一个可用的Python3 SciPy环境,并且至少安装了NumPy。如果您需要环境方面的帮助,可以按照这里的分步教程操作:
速成课程概览
本速成课程分为7节课。
您可以每天完成一节课(推荐),或者在一天内完成所有课程(硬核)。这真的取决于您的可用时间和热情程度。
以下是7节课的列表,它们将帮助您在Python中入门并高效地使用线性代数进行机器学习:
- 第01课:机器学习的线性代数
- 第02课:线性代数
- 第03课:向量
- 第04课:矩阵
- 第05课:矩阵类型和运算
- 第06课:矩阵分解
- 第07课:奇异值分解
每节课可能需要60秒到30分钟不等。请慢慢来,按照自己的节奏完成课程。在下面的评论中提问,甚至发布结果。
这些课程希望您能自己去寻找如何做事的方法。我会给您提示,但每节课的部分目的就是迫使您学会去哪里寻找关于线性代数、NumPy API以及Python中顶级工具的帮助(提示:我博客上直接有所有答案;请使用搜索框)。
我确实以相关文章链接的形式提供了更多帮助,因为我希望您建立一些信心和动力。
在评论中发布您的结果;我会为您加油!
坚持下去;不要放弃。
注意:这只是一个速成课程。有关更多细节和详细教程,请参阅我关于这个主题的书《机器学习线性代数基础》。
在机器学习线性代数方面需要帮助吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
第01课:机器学习的线性代数
在本课中,您将发现机器学习从业者应该加深对线性代数理解的5个原因。
1. 您需要学习线性代数表示法
您需要能够读写向量和矩阵表示法。算法在书籍、论文和网站上都是使用向量和矩阵表示法来描述的。
2. 您需要学习线性代数算术
与线性代数的表示法相伴的是算术运算。您需要知道如何对标量、向量和矩阵进行加、减、乘运算。
3. 您需要学习线性代数以用于统计学
您必须学习线性代数才能学习统计学,尤其是多元统计学。为了能够阅读和解释统计学,您必须学习线性代数的表示法和运算。现代统计学使用线性代数的表示法和工具来描述统计方法。从表示数据均值和方差的向量,到描述多个高斯变量之间关系的协方差矩阵。
4. 您需要学习矩阵分解
在表示法和算术的基础上是矩阵分解的概念。您需要知道如何分解矩阵以及其含义。矩阵分解是线性代数中的一个关键工具,并广泛用作许多更复杂运算的组成部分,无论是在线性代数(如矩阵求逆)还是机器学习(最小二乘法)中。
5. 您需要学习线性最小二乘法
您需要知道如何使用矩阵分解来解决线性最小二乘问题。这类问题可以被构建为最小化平方误差,称为最小二乘法,并且可以用线性代数的语言重新表述,称为线性最小二乘法。线性最小二乘问题可以使用矩阵运算(如矩阵分解)在计算机上高效求解。
还有一个原因
如果我能再给一个原因,那就是:因为它很有趣。真的。
您的任务
对于这节课,您必须列出您个人想要学习线性代数的3个原因。
请在下面的评论中发布您的答案。我很想看看您能想出什么。
在下一课中,您将发现线性代数的一个简明定义。
第02课:线性代数
在本课中,您将发现线性代数的一个简明定义。
线性代数
线性代数是数学的一个分支,但事实是,线性代数是数据的数学。矩阵和向量是数据的语言。
线性代数是关于线性组合的。也就是说,对称为向量的数列和称为矩阵的二维数阵进行算术运算,以创建新的数列和数阵。
数值线性代数
线性代数在计算机中的应用通常被称为数值线性代数。
它不仅仅是在代码库中实现线性代数运算;它还包括对应用数学问题的谨慎处理,例如处理数字计算机有限的浮点精度问题。
线性代数的应用
由于线性代数是数据的数学,线性代数的工具被用于许多领域。
- 工程中的矩阵,例如一排弹簧。
- 图与网络,例如分析网络。
- 马尔可夫矩阵、人口和经济学,例如人口增长。
- 线性规划,单纯形优化方法。
- 傅里叶级数:函数的线性代数,广泛用于信号处理。
- 统计学和概率论的线性代数,例如用于回归的最小二乘法。
- 计算机图形学,例如图像的各种平移、缩放和旋转。
您的任务
对于这节课,您必须从研究论文、博客或书籍中找出五句定义线性代数领域的引言。
请在下面的评论中发布您的答案。我很想看看您会发现什么。
在下一课中,您将学习向量和简单的向量算术。
第03课:向量
在本课中,您将学习向量和简单的向量算术。
什么是向量?
向量是一个或多个称为标量的值组成的元组。
向量通常用小写字母表示,如“v”;例如:
1 |
v = (v1, v2, v3) |
其中v1, v2, v3是标量值,通常是实数值。
定义一个向量
我们可以在Python中将向量表示为NumPy数组。
NumPy数组可以从一个数字列表创建。例如,下面我们定义一个长度为3,值为整数1、2、3的向量。
1 2 3 4 |
# 创建一个向量 from numpy import array v = array([1, 2, 3]) print(v) |
向量乘法
两个等长的向量可以相乘。
1 |
c = a * b |
与加法和减法一样,该运算是逐元素进行的,结果是一个相同长度的新向量。
1 |
a * b = (a1 * b1, a2 * b2, a3 * b3) |
我们可以在NumPy中直接执行此操作。
1 2 3 4 5 6 7 8 |
# 向量相乘 from numpy import array a = array([1, 2, 3]) print(a) b = array([1, 2, 3]) print(b) c = a * b print(c) |
您的任务
对于这节课,您必须实现其他向量算术运算,例如加法、除法、减法和向量点积。
请在下面的评论中发布您的答案。我很想看看您会发现什么。
在下一课中,您将学习矩阵和简单的矩阵算术。
第04课:矩阵
在本课中,您将学习矩阵和简单的矩阵算术。
什么是矩阵?
矩阵是一个二维的标量数组,具有一个或多个列和一个或多个行。
矩阵的表示法通常是一个大写字母,如A,其元素通过它们的二维下标行(i)和列(j)来引用,如aij。例如:
1 |
A = ((a11, a12), (a21, a22), (a31, a32)) |
定义一个矩阵
我们可以在Python中使用二维NumPy数组来表示矩阵。
NumPy数组可以通过一个列表的列表来构建。例如,下面是一个2行3列的矩阵。
1 2 3 4 |
# 创建矩阵 from numpy import array A = array([[1, 2, 3], [4, 5, 6]]) print(A) |
矩阵加法
两个维度相同的矩阵可以相加,创建一个新的第三个矩阵。
1 |
C = A + B |
结果矩阵中的标量元素是通过将相加的每个矩阵中的元素相加来计算的。
我们可以在Python中直接对两个NumPy数组使用加号运算符来实现这一点。
1 2 3 4 5 6 7 8 |
# 矩阵相加 from numpy import array A = array([[1, 2, 3], [4, 5, 6]]) print(A) B = array([[1, 2, 3], [4, 5, 6]]) print(B) C = A + B print(C) |
矩阵点积
矩阵乘法,也称为矩阵点积,比之前的运算更复杂,并且涉及一个规则,因为并非所有矩阵都可以相乘。
1 |
C = A * B |
矩阵乘法的规则如下:第一个矩阵(A)的列数(n)必须等于第二个矩阵(B)的行数(m)。
例如,矩阵A的维度是m行n列,矩阵B的维度是n行k列。A中的n列和B中的n行相等。结果是一个新的m行k列的矩阵。
1 |
C(m,k) = A(m,n) * B(n,k) |
矩阵乘法的直观理解是,我们计算矩阵A中每一行与矩阵B中每一列的点积。例如,我们可以沿着A的行向下移动,并将每一行与B的第1列相乘,得到C的第1列中的标量值。
矩阵乘法运算可以在NumPy中使用dot()函数实现。
1 2 3 4 5 6 7 8 |
# 矩阵点积 from numpy import array A = array([[1, 2], [3, 4], [5, 6]]) print(A) B = array([[1, 2], [3, 4]]) print(B) C = A.dot(B) print(C) |
您的任务
对于这节课,您必须实现更多的矩阵算术运算,例如减法、除法、哈达玛积和向量-矩阵乘法。
请在下面的评论中发布您的答案。我很想看看您能想出什么。
在下一课中,您将学习不同类型的矩阵和矩阵运算。
第05课:矩阵类型和运算
在本课中,您将学习不同类型的矩阵和矩阵运算。
转置
一个已定义的矩阵可以被转置,这将创建一个列数和行数互换的新矩阵。
这用矩阵旁边的上标“T”表示。
1 |
C = A^T |
我们可以在NumPy中通过调用T属性来转置矩阵。
1 2 3 4 5 6 |
# 转置矩阵 from numpy import array A = array([[1, 2], [3, 4], [5, 6]]) print(A) C = A.T print(C) |
求逆
矩阵求逆运算用矩阵旁边的-1上标表示;例如,A^-1。运算的结果被称为原始矩阵的逆矩阵;例如,B是A的逆矩阵。
1 |
B = A^-1 |
并非所有矩阵都是可逆的。
在NumPy中可以使用inv()函数对矩阵求逆。
1 2 3 4 5 6 7 8 9 |
# 矩阵求逆 from numpy import array from numpy.linalg import inv # 定义矩阵 A = array([[1.0, 2.0], [3.0, 4.0]]) print(A) # 矩阵求逆 B = inv(A) print(B) |
方阵
方阵是行数(n)等于列数(m)的矩阵。
1 |
n = m |
方阵与行数和列数不相等的矩形矩阵形成对比。
对称矩阵
对称矩阵是一种方阵,其右上三角与左下三角相同。
要成为对称矩阵,对称轴始终是矩阵从左上到右下的主对角线。
对称矩阵总是方阵,并且等于其自身的转置。
1 |
M = M^T |
三角矩阵
三角矩阵是一种方阵,其右上或左下部分的所有值为零,其余元素填充有值。
仅在主对角线上方有值的三角矩阵称为上三角矩阵。而仅在主对角线下方有值的三角矩阵称为下三角矩阵。
对角矩阵
对角矩阵是主对角线以外的值均为零的矩阵,主对角线从矩阵的左上角到右下角。
对角矩阵通常用变量D表示,可以表示为一个完整的矩阵或主对角线上的值向量。
您的任务
对于这节课,您必须为其他矩阵运算(如行列式、迹和秩)开发示例。
请在下面的评论中发布您的答案。我很想看看您能想出什么。
在下一课中,您将学习矩阵分解。
第06课:矩阵分解
在本课中,您将发现矩阵分解的基础知识,也称为矩阵分解。
什么是矩阵分解?
矩阵分解是将一个矩阵简化为其组成部分的方法。
这种方法可以简化更复杂的矩阵运算,这些运算可以在分解后的矩阵上进行,而不是在原始矩阵本身上进行。
一个常见的矩阵分解类比是数字的因式分解,例如将25分解为5 x 5。因此,矩阵分解也称为矩阵因式分解。与分解实数值一样,分解矩阵的方法有很多种,因此有一系列不同的矩阵分解技术。
LU矩阵分解
LU分解适用于方阵,它将一个矩阵分解为L和U两个部分。
1 |
A = L . U |
其中A是我们希望分解的方阵,L是下三角矩阵,U是上三角矩阵。这种分解的一个变体在实践中数值上更稳定,称为LUP分解,或带部分主元选择的LU分解。
1 |
A = P . L . U |
为了简化分解过程,对父矩阵的行进行重新排序,而附加的P矩阵指定了一种排列结果或将结果恢复到原始顺序的方法。此外,LU分解还有其他变体。
LU分解通常用于简化线性方程组的求解,例如在线性回归中寻找系数。
LU分解可以在Python中使用lu()函数实现。更具体地说,该函数计算的是LPU分解。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# LU分解 from numpy import array from scipy.linalg import lu # 定义一个方阵 A = array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(A) # LU分解 P, L, U = lu(A) print(P) print(L) print(U) # 重构 B = P.dot(L).dot(U) print(B) |
您的任务
对于这节课,您必须实现其他简单矩阵分解方法的小例子,例如QR分解、Cholesky分解和特征分解。
请在下面的评论中发布您的答案。我很想看看您能想出什么。
在下一课中,您将学习用于矩阵分解的奇异值分解方法。
第07课:奇异值分解
在本课中,您将学习用于矩阵分解的奇异值分解方法。
奇异值分解
奇异值分解(Singular-Value Decomposition),简称SVD,是一种矩阵分解方法,用于将矩阵简化为其组成部分,以使某些后续的矩阵计算更简单。
1 |
A = U . Sigma . V^T |
其中A是我们希望分解的实数m x n矩阵,U是一个m x m矩阵,Sigma(通常用大写希腊字母Sigma表示)是一个m x n对角矩阵,而V^T是一个n x n矩阵的转置,其中T是上标。
计算奇异值分解
SVD可以通过调用svd()函数来计算。
该函数接受一个矩阵并返回U、Sigma和V^T元素。Sigma对角矩阵作为奇异值向量返回。V矩阵以转置形式返回,例如V.T。
1 2 3 4 5 6 7 8 9 10 11 |
# 奇异值分解 from numpy import array from scipy.linalg import svd # 定义一个矩阵 A = array([[1, 2], [3, 4], [5, 6]]) print(A) # SVD U, s, V = svd(A) print(U) print(s) print(V) |
您的任务
对于这节课,您必须列出SVD的5个应用。
如果您能用Python的小例子来演示每一个,将获得加分。
请在下面的评论中发布您的答案。我很想看看您会发现什么。
这是迷你课程的最后一课。
结束!
(看看您取得了多大的进步)
您做到了。干得好!
花点时间回顾一下您已经走了多远。
您发现了:
- 线性代数对应用机器学习的重要性。
- 线性代数的本质是什么。
- 什么是向量以及如何进行向量运算。
- 什么是矩阵以及如何进行矩阵运算,包括矩阵乘法。
- 一系列矩阵类型、它们的性质以及涉及矩阵的高级运算。
- 矩阵分解方法和详细的LU分解方法。
- 机器学习中常用的奇异值分解方法。
这只是您学习机器学习线性代数之旅的开始。继续练习和发展您的技能。
迈出下一步,查阅我的书《机器学习线性代数》。
总结
您在迷你课程中表现如何?
您喜欢这个速成课程吗?
您有任何问题吗?有没有遇到什么难点?
告诉我。在下面留言。
作为一名软件开发人员,我正在提升自己的技能以获得数据科学领域的职位,我对学习更多关于线性代数感兴趣,因为:
– 我很想了解各种机器学习算法背后的数学原理
– 我想全面提升我的数学技能
– 我想更普遍地提高我的数学流利度,以便能更好地理解已发表的学术论文。
谢谢 Brandon。
嗨,Jason,我是 Fusion Analytics World 的创始人,这是一个领先的数字平台,提供新闻、行业分析、工作、课程、活动等等。我们涵盖各行业的研究与分析。
我很乐意在我们的网站上免费推荐您的课程,并帮助您接触到我们专注研究情报和分析的目标读者。
我们也很乐意推荐您关于机器学习的文章。请告诉我您的想法。
不了,谢谢。
你好,
自从我开始学习机器学习,我发现了数学特别是线性代数的重要性。
这7个迷你课程可以帮助找到
- 作为数据科学家或机器学习开发者所需要的最重要的表示法和方法。
- 更好地理解机器学习及其背后的数学
谢谢
谢谢 Fati。
我发现您的课程非常有用。感谢分享这些知识。
我一直在寻找好的资源,学习如何以一种好的方式将我自己的数据导入Python(数据可以是图像或Excel文件等)。
我对MATLAB相当熟悉,对Python则比较陌生。我似乎找不到一个好的方法在Python中导入东西。如果您能给我指点一些好的资源,我将不胜感激。谢谢!
请看这篇文章
https://machinelearning.org.cn/load-machine-learning-data-python/
很棒的速成课,伙计!我在Python中从零开始实现这些东西,玩得很开心,我需要这个线性代数基础复习!
谢谢!
谢谢,很高兴对您有帮助。
顺便说一下,在LU矩阵分解部分有一个小拼写错误,你提到“...calculates an LPU decomposition...”我认为应该是PLU。
我为了搜索LPU和PLU的区别快把自己逼疯了,哈哈
LUP 是正确的,它是带部分主元 pivoting 的 LU 分解 (LUP)。来自
https://en.wikipedia.org/wiki/LU_decomposition
我更改了术语的顺序以匹配重构。谢谢。
我学习线性代数是因为它是解决计算机视觉问题的深度学习的先决条件。
谢谢。
# 向量的点积。两个向量必须大小相同
from numpy import array, dot
a = array([1, 2])
print(a)
b = array([13, 14])
print(b)
c = dot(a,b)
#c = a.dot(b)
print(c)
不错。
# 矩阵与向量相乘
from numpy import array, dot
A = array([[1, 2, 3], [3, 4, 5], [5, 6, 7]])
print(A)
b = array([7, 8, 9])
print(b)
C = dot(A,b)
print(C)
干得好!
下三角矩阵
[[1 0 0]
[0 2 0]
[5 6 3]]
上三角矩阵
[[1 2 3]
[0 4 0]
[0 0 6]]
对角矩阵
[[1 0 0]
[0 2 0]
[0 0 3]]
不错。
一个对称矩阵
[[1 2 3]
[2 4 6]
[3 6 5]]
干得好。
三角矩阵
A=[[1,0,2],[2,1,0],[3,0,1]]
干得不错。
@Jason
我深受您的启发,这是我持续关注您的网站一年半(差不多)以来的第一条评论。我想与您远程合作。这有可能吗?
谢谢,我很高兴这些教程对您有帮助。
一个很好的合作/贡献方式是您通过一些教程并以评论的形式报告您的结果。
嗨,Jason,
首先感谢您提供这个机会。我的理由如下:
1. 回顾和恢复我大学时学过的部分线性代数知识。
2. 理解Python中部署的公式背后的原理,这样我就能理解得到“奇怪”结果的原因。
3. 深入理解线性代数的“工具”如何帮助我们探究数据中的模式。这很令人兴奋。
此致,
Natasa
谢谢分享,Natasa!
作为一名学生,我对学习线性代数感兴趣,因为我想对数学、统计学、概率论和机器学习有更深入的理解。
感谢您的教程
谢谢!
1. 在我的学士学位期间,我从未重视过线性代数课程,所以只是勉强及格。这一次我想好好地学习它。
2. 我正开始接触机器学习和计算机视觉,有人告诉我,我需要对线性代数有很好的理解。
3. 我已经有一段时间没有练习数学了,想重新开始。
感谢分享!
我参加这门课程的3个理由
1. 我喜欢学习计算机编程的新方面。
2. 我想建立一个系统来分析英语语言的使用,以帮助提高我学生的写作水平。
3. 我对自己的数学技能一直没有信心,在整个求学期间都回避这个学科——我想向自己证明,即使是更高级的数学理论我也能掌握。
谢谢 Dustin!
我想学习PCA和SVM的方程,其中用到了线性代数。我非常热衷于学习这个研究的每一个步骤。
谢谢!
行列式
from numpy import array
from numpy import linalg
A = array([[1.0, 2.0], [3.0, 4.0]])
linalg.det(A)
输出:-2.0
迹
A.trace()
输出:5.0
干得好!
如果A是矩阵
如果 A^(T)=A, (转置)
那么A被称为对称矩阵
干得好!
7天课程:第1天。
学习线性代数的理由
1. 为了弄清机器学习表示法的语言,现在它对我来说几乎是天书。
2. 希望不仅能认识这些词汇和表示法,还能理解这些运算的作用。
3. 为了获得足够的线性代数知识并付诸实践。我在学校学到的东西只为了考试而记住,从未转化成我的工具箱里的一项技能。
干得好!
7天的课程实际上在一天内几个小时就完成了。
我很享受回忆起我的工程学习时光,并且能够创建自己的例子并解决它们
非常感谢Jason
为你的进步喝彩!
嗨,Jason,
在我执行我的第一个任务之前,我对您的第一个请求是 –
请将“发表回复”这一部分移到评论区的最顶端。这样我可以避免滚动所有其他评论来发表我的评论。我猜如果读者感兴趣,向下滚动并阅读评论仍然是可行的。
现在开始任务;这是我速成班的第一天。
我个人想学习线性代数;
1. 这将帮助我欣赏机器学习算法中涉及的许多细微之处。
2. 我将复习我本科期间关于这个主题的正式培训,但多年来没有使用过。
3. 我将能更流利地阅读关于算法的研究论文。
感谢您的建议。
嗨,Jason,
我的第二天任务 –
Jason Brownlee – “[L]线性代数是数据的数学。矩阵和向量是数据的语言。” 是我读过的最好的定义。我遇到的其他定义有 –
维基百科 – 线性代数是研究线性方程的数学分支。
《线性代数导论》第二版,作者T.A Whitelaw – [线性代数] 解决联立线性方程组以及这类方程组中出现的系数矩形阵列(我们称之为矩阵)。同样真实的是,线性代数中的许多重要思想可以追溯到几何来源。
Byju's Learning (https://byjus.com/maths/linear-algebra/) – 线性代数是研究线性组合的学科。它是研究向量空间、直线和平面,以及执行线性变换所需的一些映射。它包括向量、矩阵和线性函数。它是研究线性方程组及其变换性质的学科。
我也注意到很多教科书在处理线性代数时,直接从向量开始,而没有太多篇幅试图描述线性代数这个主题。例如:
1. L. Mirsky的《线性代数入门》。
2. Arak M. Mithai, Hans J Haubold 的《线性代数:物理学家和工程师的课程》。
3. Gilbert Strang的《线性代数导论》。
4. 《25讲线性代数》 – https://www.math.ucdavis.edu/~linear/linear.pdf
5. Jeff Hefferon的《线性代数》第三版 http://joshua.smcvt.edu/linearalgebra/book.pdf
回想起来;向量和矩阵就像是线性代数的坐标轴,如同x、y和z轴之于空间。也就是说,向量和矩阵是线性代数的基本且不可分割的概念。
我发现的一些应用是在以下研究中 –
1. 谱聚类 – https://academic.microsoft.com/paper/2132914434/reference
2. 无线通信中使用的自适应滤波器 – https://academic.microsoft.com/paper/2610805269/reference
3. NLP中的潜在语义分析 : https://academic.microsoft.com/paper/1612003148/reference
4. 信息检索 – https://academic.microsoft.com/paper/2072773380/reference
5. 科学哲学 – 线性代数应用于线性元理论 – https://arxiv.org/abs/2005.02247
干得好!
我的第3天活动,以下是代码 –
from numpy import array
from numpy import multiply
from numpy import divide
def dotProduct(multiplier, multiplicand)
return multiply(multiplier, multiplicand)
def add(augend, addend)
return augend + addend
def division(dividend, divisor)
return divide(dividend, divisor)
def subtraction(minuend, subtrahend)
return minuend – subtrahend
subtrahend = divisor = multiplier = addend = array([2,3])
minuend = dividend = multiplicand = augend = array([6,9])
print(“向量点积 – ” + str(dotProduct(multiplier, multiplicand)))
print(“向量加法 – ” + str(add(augend, addend)))
print(“向量除法 – ” + str(division(dividend, divisor)))
print(“向量减法 – ” + str(subtraction(minuend, subtrahend)))
干得好!
第1课:我想学习线性代数的原因
1) 所有可用数据都是以某种矩阵、向量的形式存在的。我希望学习线性代数能帮助我处理这种格式的可用数据。
2) 我已经很好地掌握了如何关联两三个变量,并且用小程序来处理这些关系已经足够。但是当处理许多变量时,我希望有更多更好的参数能帮助我更好地解决问题。
3) 我喜欢和数字打交道,并尝试用另一种工具来解读它们。
干得好!
我刚刚开始我的文本摘要研究。所以,我相信学习线性代数在理解深度学习模型的数学基础时肯定会有帮助。谢谢。
谢谢!
我认为与其像这样导入
from numpy import array, dot
不如直接使用这个语法
import numpy as np
然后像这样使用它们
np.array
np.dot
np.multiply
np.cross
np.dot
这样会容易得多,因为你不需要在一开始就记住它们,而是可以根据你的代码来使用。如果我有任何错误,请纠正我。
谢谢你的建议。
我特意不使用那种用法,我不喜欢它。
干得不错。
import numpy as np
A=np.array([[1,2],[3,4],[5,6]]);
F=np.array([[1,2],[3,4]]);
C=A.T;
D=np.linalg.inv(F);
E=np.linalg.det(F);
G=np.trace(F);
H=np.linalg.matrix_rank(A);
print(A);
print(C);
print(D);
print(E);
print(G);
print(H);
干得好!
import numpy.linalg as np
import scipy.linalg as sp
A=np.linalg.array([[1,2,3],[4,5,6],[7,8,9]]);
V=np.linalg.array([[1,2-2j],[2j,5+8j]]);
print(A);
P,L,U=sp.lu(A);
print(P);
print(L);
print(U);
B,D=np.linalg.qr(A);
print(B);
print(D);
Y=np.linalg.cholesky(V);
print(Y);
K=np.linalg.eig(A);
print(K);
#Reconstruction (重建)
Recon_2=np.linalg.dot(B,D);
Recon_1=P.dot(L).dot(U);
print(Recon_1);
print(Recon_2);
干得好!
import numpy.linalg as np
import scipy.linalg as sp
A=np.linalg.array([[1,2],[3,4],[5,6]]);
print(A);
U,S,V=sp.svd(A);
print(U);
print(S);
print(V);
SVD的应用包括:-
1.低秩近似
2.总体最小二乘法最小化
3. 伪逆
4.齐次线性方程组的解
5. 寻找值域、零空间和秩。
我参加这门课程的3个原因
1. 我需要了解机器学习和数据科学的工具。
2. 我需要看看如何在机器学习和数据科学中使用线性代数。
3. 我需要知道什么是机器学习和数据科学。
谢谢!
非常好的7天课程,到目前为止已经完成了3天
似乎学到了很多
谢谢!
谢谢您,我参加是为了学习,这是我机器学习和自然语言处理研究的先修条件
谢谢。
感谢分享这些信息!我对科技界完全是新手。
1. 我需要学习这些信息,这样我才能听懂我的教授在说什么,哈哈!
2. 这将帮助我学习机器学习和数据科学。
3. 这将帮助我在我的专业上取得好成绩。
谢谢!
感谢您的课程。我感兴趣学习线性代数或初等线性代数,因为
1. 我想了解线性代数的应用,
2. 这门课程帮助我学习如何对数字特别是矩阵进行基本的数学运算,
3. 这将帮助我从另一个角度看待线性代数,即从应用的角度。
谢谢!
你好,
线性代数是机器学习的基础
它有助于培养逻辑思维
线性代数有助于评估我们日常生活中的各种应用——例如:手机套餐等。
干得漂亮!
1. 因为变量之间的大多数相关性都可以用矩阵表示,所以其操作很重要。
2. 简化复杂的数学问题。
3. 好奇心。
干得好!
为什么学线性代数?因为……
1. 我在工程学习期间这方面还不错
2. 那是很久以前的事了……
3. 我很好奇线性代数能有多有趣(你的“另一个理由”)。
谢谢!
– 在与其他专业人士讨论机器学习时显得可信。
– 理解基础知识,以便我能在此基础上继续深入。
– 支持我将机器学习引入工业控制器的努力。
干得好!
我(在18.5年后)重返学习并攻读博士学位。我想在机器学习方面获得更深入的知识。由于机器学习与数学紧密相关,我正在努力复习我的数学知识,并理解机器学习和数学算法是如何结合在一起的。
第02课:应用
看起来我找到的不是引言,我需要更多搜索才能找到引言。但遇到了一些有趣的书,分享一些书中的内容。我会逐渐阅读这些书。
1. 管理科学 – 管理决策通常涉及在多个
备选方案之间做出选择。假设这些选择是带着一个固定目标进行的,
并且应该基于一套评估标准。这些决策通常涉及
一些可能不完全一致的人类判断。层次
分析法是一种技术,用于根据一张包含
加权标准和评级的图表对各种备选方案进行评级,这些评级衡量了每个备选方案
满足各项标准的程度。为这个过程建立这样一个图表或决策树,然后为图表中的每个条目分配权重和评级,
使用简单的矩阵-向量运算计算备选方案的总体排名。这本书还讨论了如何使用高级矩阵技术来确定决策过程中适当的权重和评级。然后提出了一个用于计算决策过程中使用的
权重向量的数值算法。
参考文献: http://ndl.ethernet.edu.et/bitstream/123456789/24509/1/Linear%20Algebra%20with%20Applications%202.pdf
2. 假设一个国家的经济被划分为许多部门,如各种制造业、通讯、娱乐和服务业。假设对于每个部门,我们知道它一年的总产出,并且我们确切地知道这个产出是如何在
经济的其他部门之间分配或“交换”的。让一个部门产出的总美元价值
被称为该产出的价格。列昂惕夫证明了以下结果。
存在可以分配给各部门总产出的平衡价格,
使得每个部门的收入正好平衡其
支出。例如,找到平衡价格,使每个部门的收入与其支出相匹配。列昂惕夫——这个包含500个变量的500个方程组,现在被称为列昂惕夫“投入-产出”(或“生产”)模型。
参考文献: https://math.berkeley.edu/~yonah/files/Linear%20Algebra.pdf
3. 计算机图形学:用于操作和显示图形图像(如飞机的线框模型)的数学。这样的图像(或图片)由许多点、连接线或曲线,以及关于如何填充由线和曲线界定的封闭区域的信息组成。通常,曲线段由短的直线段近似,一个图形由一个点列表在数学上定义。最简单的2D图形符号之一是屏幕上用于标签的字母。一些字母作为线框对象存储;其他具有曲线部分的使用额外的曲线数学公式存储。
参考文献: https://math.berkeley.edu/~yonah/files/Linear%20Algebra.pdf
4. 现在强大的计算机已经普及,越来越多的科学和
工程问题正在以一种使用离散或数字数据的方式处理,而不是
连续数据。差分方程通常是分析
此类数据的合适工具。即使当一个微分方程被用来模拟一个连续过程时,
数值解也常常从一个相关的差分方程中产生。
例如:离散时间信号、线性差分方程等。
参考文献: https://math.berkeley.edu/~yonah/files/Linear%20Algebra.pdf
干得好。
第03课:向量运算
import numpy as np
from numpy import array
# 向量加法
a1 = array([2,4,6,8])
a2 = array([3,4,5,6])
print(a1+a2)
# 向量乘法
b1 = array([2,4,6,8])
b2 = array([3,4,5,6])
print(b1 * b2)
# 向量减法
c1 = array([2,4,6,8])
c2 = array([3,4,5,6])
print(c1-c2)
# 向量点积
d1 = array([2,4,6,8])
d2 = array([3,4,5,6])
print(d1@d2)
print(np.dot(d1,d2))
输出
[ 5 8 11 14]
[ 6 16 30 48]
[-1 0 1 2]
100
100
干得好。
我想学习线性代数,因为
1. 线性代数处理向量和矩阵,这在机器学习中被大量使用
2. 线性代数涉及统计学,这是机器学习的重要组成部分
3. 线性代数是机器学习领域的关键基础,因为线性代数的符号和运算被用来描述算法的操作和代码中算法的实现
干得好!
我从小就想学了
我已经看过相关视频了
我20岁了
谢谢。希望你喜欢。
为了加强在优化过程中将细节心智映射到实际数据实体(即向量、矩阵、张量等)的能力,以及如何精确地编写假设的超参数计算代码以获得最佳准确性。尽管这被认为是简单的,但当涉及到编码时,它变得棘手,但线性代数的数据实体间计算捷径使编码更容易。
超参数计算以获得最佳准确性。虽然这被认为很简单,但在编码时会变得很棘手,但线性代数内部数据实体的计算捷径使编码更容易。
1. 大学时上过一位好老师的线性代数课——有时会感到困惑
2. 从那时起就一直想澄清这些概念
3. 从那以后我已经睡过好几觉了
我是一名统计学家,数据是我的伴侣。因此,学习数据的数学是必须的。这将为我更好地理解混合模型、广义线性模型、贝叶斯模型等主题中的应用做好准备。
作为一名统计学家,你会发现机器学习模型与你之前学过的统计模型相呼应。希望你享受这次学习之旅!
在SVD中,我如何恢复原始数据或者原始数据的位置在哪里,即它的位置?如果它是一个代表文本概念的矩阵
嗨 ANA……以下是理解SVD基础知识的绝佳资源。
https://machinelearning.org.cn/singular-value-decomposition-for-machine-learning/
第2课
向量和矩阵的代数,区别于实数的普通代数和未指定实体的抽象代数。– 《韦氏新世界大学词典》。版权所有 © 2014 by Houghton Mifflin Harcourt Publishing Company
线性代数是数学的一种连续形式……它让你能够模拟自然现象并高效地计算它们。 https://towardsdatascience.com/linear-algebra-for-deep-learning-f21d7e7d7f23
线性代数是数学的一个分支,旨在解决具有有限数量未知数的线性方程组。特别是,人们希望获得以下问题的答案:1) 解的特征:给定的线性方程组有解吗?有多少解?2) 寻找解:解集是什么样的?解是什么?
https://math.libretexts.org/Bookshelves/Linear_Algebra/Book%3A_Linear_Algebra_(Schilling_Nachtergaele_and_Lankham)/01%3A_What_is_linear_algebra
干得好 April!
第3课
v = np.array([1,2,3])
w = np.array([1,2,3])
v+w = [2,4,6]
v-w = [0,0,0]
2*v = [2,4,6]
w*v = [1,4,9]
np.dot(w,v) = 14
w/v = [1,1,1]
感谢您的反馈,April!继续保持出色的工作!
我只是想学习事物是如何运作的,因为我是人工智能新手)
嗨 Viktor……以下资源是你机器学习之旅的一个很好的起点!
https://machinelearning.org.cn/start-here/
非常有帮助,非常感谢 :thumbsup
非常欢迎你 Monika!我们感谢你的反馈和支持!
不确定我之前的评论是否发送成功了……但这是我对速成班第1-2天的回复
我想学习线性代数是为了……
1) 在机器学习/数据科学方面获得实践能力,从事有意义的工作
2) 提高我理解自然世界的能力
3) 发挥我的作用,传递知识并帮助他人实现他们的目标
关于线性代数的五个定义
我的大学课本(我已经忘光了……:/):线性代数“……是解决线性方程组的艺术”——Otto Bretscher的《线性代数及其应用》
维基百科:“线性代数是数学的一个分支,关注向量、向量空间(也称线性空间)、线性映射(也称线性变换)以及线性方程组的研究。”
韦氏词典:“数学的一个分支,关注在加法和标量乘法运算下封闭的数学结构,包括线性方程组理论、矩阵、行列式、向量空间和线性变换”
mat.ucdavis.edu:“线性代数是研究向量和线性函数的学科。”……也是研究信息数学结构的学科
wolframalpha.com:“线性代数使用向量和矩阵运算的工具和方法来确定线性系统的性质。”
非常棒的反馈 Jake!继续加油!
我想学习线性代数,因为
1. 我觉得它很有趣!
2. 我希望了解各种机器学习算法所需计算的细节,以便更好地理解各种超参数以及如何微调它们。
3. 我就是喜欢尽可能多地学习……关于一切。
谢谢你 Aashi!继续努力,如果我们可以帮助回答任何关于我们内容的问题,请告诉我们。
第一天
线性代数是研究线性组合的学科,范围从处理向量、矩阵和线性函数的映射。- Byju's.com
线性代数是数学中关于线性方程的一个分支。- 维基百科
线性代数处理数学方程及其在向量空间中的表示。- Cuemath.com
线性代数是关于线性方程组解的系统理论。- math.libretexts.org
线性代数是数学中关于向量空间的分支,通常是有限或可数无限维的。- sciencedirect.com/topics/mathematics/linear-algebra
非常棒的反馈,Manuel!在你学习这些材料的过程中,如果我们需要帮助回答任何问题,请告诉我们。
我想学习线性代数,以增强我对机器学习模型的基础知识,并从根本上理解它们。
嗨 Manuel…以下位置是一个很好的起点
https://machinelearning.org.cn/start-here/#linear_algebra
我想学习线性代数和机器学习,因为我是一名神经科学博士生。这可以在以下方面帮助我
1. 自动化行为数据的多变量分析。这将使我们能够非常快速地分析数据集,并揭示行为中事件序列产生的“隐藏”的次要和第三级变量,这些变量可能提供更多关于任务中动物如何学习的信息。
2. 基于现有数据创建准确的行为任务模拟。这使我们能够对行为数据的结果做出预测,并可能通过在消耗动物和时间之前准确预测结果来节省我们的资源。
3. 人工智能学习和神经网络。我对这些主题及其在我的研究中的直接应用了解不多,但我知道值得学习,而机器学习和线性代数是先决条件。
嗨 Sid…感谢您的反馈!更多信息可以在这里找到
https://machinelearning.org.cn/start-here/#linear_algebra
Jason
我已经阅读了关于线性代数的免费章节,并做了一些练习。在向量-标量除法中,当我用0.5进行除法时,输出结果却是乘法。
from numpy import array
# 定义向量
vector = array([10, 20, 30, 40,50])
print(vector)
# 定义标量
s = 0.5
print(s)
# 乘法
v = s*vector
print(v)
[10 20 30 40 50]
0.5
[ 20. 40. 60. 80. 100.]
当我用标量2时,输出是通过除法完成的
from numpy import array
# 定义向量
vector = array([10, 20, 30, 40,50])
print(vector)
# 定义标量
s = 2
print(s)
# 乘法
v = s*vector
print(v)
[10 20 30 40 50]
2
[ 20 40 60 80 100]
我的问题是,为什么第一个例子不是除法?
Jason
在此我更正我上一篇文章的内容
向量-标量除以0.5
from numpy import array
# 定义向量
vector = array([10, 20, 30, 40,50])
print(vector)
# 定义标量
s = 0.5
print(s)
# 除法
v = vector/s
print(v)
[10 20 30 40 50]
0.5
[ 20. 40. 60. 80. 100.]
为什么输出是乘以2的形式,而不是除以0.5?
第2课
1. 线性代数是一门处理向量和矩阵的数学学科
更多的是关于向量空间和线性变换。引用自 Mark Andrew Ronan
2. 线性代数基本上是研究向量和线性函数的学科。
3. 线性代数是研究线性组合的学科。它是研究向量空间、
直线和平面,以及执行线性变换所需的某些映射。
变换。
4. 线性代数是数学的一个分支,处理线性方程及其在
向量空间中使用矩阵的表示。
5. 线性代数是数学的一个分支,处理向量、矩阵、有限或
无限维度以及此类空间之间的线性映射。