原文选自 | Analytics Vidhya
作者 | Khyati Mahendru
本文转载自 TalkingData数据学堂 ,未经允许禁止转载
本文摘要
线性代数为各种各样的数据科学算法和应用提供支持
在这里,我会向您介绍通过线性代数帮助您成为更好的数据科学家的10种实际应用
我们已将这些应用程序分类到各个领域 - 基本机器学习,降维,自然语言处理和计算机视觉
介绍
如果数据科学是蝙蝠侠,线性代数将是罗宾。这种忠实的伙伴经常被忽视。但实际上,它支持数据科学的主要领域,包括自然语言处理和计算机视觉等热门领域。
我个人看到很多数据科学爱好者选择跳过这个主题,因为他们发现数学太难理解了。当数据科学的编程语言提供了大量用于处理数据的软件包时,人们并不会对线性代数感到烦恼。
但这是个错觉。我们熟悉的所有强大的机器学习算法的背后都是线性代数。它是数据科学家技能的重要组成部分。我们很快就会看到,您应该将线性代数视为学习数据科学必须掌握的主题。
相信我,线性代数真的是无处不在!它将开启您以前无法想象的数据的可操作的可能性。
在本文中,我详细解释了十大线性代数在数据科学中的应用。我将应用大致分为四个领域供您参考:
机器学习
维度降低
自然语言处理(NLP)
计算机视觉
我还为每个应用提供了资源,您可以深入了解您感兴趣的那个应用。
注意:在您继续阅读之前,我建议您阅读这篇精湛的文章 - 数据科学的线性代数。理解我们将在这里介绍的内容并不是强制性的,但它对于您技能的进步来说是一篇很有价值的文章。
目录
为什么学习线性代数?
机器学习中的线性代数
损失函数
正则
协方差矩阵
支持向量机分类
维数降维中的线性代数
主成分分析(PCA)
奇异值分解(SVD)
自然语言处理中的线性代数
Word嵌入
潜在语义分析
计算机视觉中的线性代数
图像表示作为张量
卷积和图像处理
为什么学习线性代数?
我曾经多次遇到过这个问题。当你只需用Python导入包并构建模型时,为什么要花时间学习线性代数?
我认为线性代数是数据科学的基础之一。没有坚实的基础,你无法建造一座摩天大楼,对吗?想想这种情况:
您希望使用主成分分析(PCA)来减少数据维度。如果您不知道它将如何影响您的数据,您将如何决定要保留多少主要组件?显然,您需要真正了解算法的机制才能做出此决定。
通过对线性代数的理解,您将能够更加了解机器学习和深度学习算法,这将允许您选择适当的超参数并开发更好的模型。
您还可以从头开始编写算法,并对它们进行自己的变换。这不是我们最初喜欢数据科学的原因吗?那我们需要将线性代数视为解锁一个全新世界的关键。
机器学习中的线性代数
最大的问题 - 线性代数都适合机器学习的哪些部分?让我们来看看你们都非常熟悉的四个应用。
1.损失函数
您必须非常熟悉模型(如线性回归模型)如何拟合给定数据:
您从一些任意预测函数开始(线性回归模型的线性函数)
在数据的独立功能上使用它来预测输出
计算预测输出与实际输出的距离
使用这些计算值可以使用Gradient Descent等策略优化预测函数
但是等等 - 您如何计算预测与预期输出的差异?用损失函数。
亏损函数是Vector Norm在线性代数中的应用。矢量的范数可以简单地说就是它的大小。有许多类型的矢量规范。我会很快解释其中两个:
L1范数:也称为曼哈顿距离或出租车标准。如果从原点到矢量,如果唯一允许的方向与空间轴平行,则L1范数是您行进的距离。
在这个2D空间中,您可以通过沿x轴行进3个单位然后沿y轴平行移动4个单位(如图所示)到达矢量(3,4)。或者您可以先沿y轴行进4个单位,然后沿x轴行进3个单位。在任何一种情况下,您将共旅行7个单位。
L2范数:也称为欧几里德距离。L2 范数是矢量距原点的最短距离,如下图中的红色路径所示:
这个距离是用毕达哥拉斯定理计算的。它是(3 ^ 2 + 4 ^ 2)的平方根,等于5。
但是,常规如何用于找出预测值与预期值之间的差异?假设预测值存储在矢量P中,并且期望值存储在矢量E中。然后PE是差异向量。PE的标准是预测的总损失。
2.正则化
正则化是数据科学中非常重要的概念。这是我们用来防止模型过度拟合的技术。正则化实际上是规范的另一个应用。
据说一个模型在适合训练数据时过度拟合。这样的模型对新数据表现不佳,因为它甚至已经学习了训练数据中的噪声。它无法概括之前从未见过的数据。下面的插图总结了这个想法:
正则化通过将权重向量的范数添加到成本函数来惩罚过于复杂的模型。由于我们希望最小化成本函数,因此我们需要最小化此规范。这导致权重向量的不需要的分量减少到零并且防止预测功能过于复杂。
您可以阅读以下文章,了解正则化背后的完整数学原理:
如何避免过度拟合使用正则化(见下方链接)
https://www.analyticsvidhya.com/blog/2015/02/avoid-over-fitting-regularization/?utm_source=blog&utm_medium=10-applications-linear-algebra-data-science我们上面讨论的L1和L2规范用于两种类型的正则化:
L1正则化与Lasso 回归一起使用
L2正则化与岭回归一起使用
请参阅我们关于Python中的Ridge和Lasso回归的完整教程(见下方链接),以了解有关这些概念的更多信息。
https://www.analyticsvidhya.com/blog/2016/01/complete-tutorial-ridge-lasso-regression-python/?utm_source=blog&utm_medium=10-applications-linear-algebra-data-science3.协方差矩阵
双变量分析是数据探索中的重要一步。我们想研究变量对之间的关系。协方差或相关性是用于研究两个连续变量之间的关系的度量。
协方差表示变量之间线性关系的方向。正协方差表示一个变量的增加或减少的同时,另一个变量发生了相同的变化。负协方差表明一个变量的增加或减少伴随另一个变量相反的变化。
另一方面,相关性是协方差的标准化值。相关值告诉我们线性关系的强度和方向,范围从-1到1。
现在,您可能会认为这是统计学而非线性代数的概念。好吧,记得我告诉过你线性代数是无处不在的吗?使用线性代数中的转置和矩阵乘法的概念,我们对协方差矩阵有一个非常简洁的表达式:
这里,X是包含所有数字特征的标准化数据矩阵。
我鼓励您阅读我们的数据探索完整教程(见下方链接),以了解有关协方差矩阵,双变量分析以及探索性数据分析中涉及的其他步骤的更多信息。
https://www.analyticsvidhya.com/blog/2016/01/guide-data-exploration/?utm_source=blog&utm_medium=10-applications-linear-algebra-data-science4.支持向量机分类
支持向量机,是最常见的分类算法之一,经常产生令人印象深刻的结果。它是矢量空间概念在线性代数中的应用。
支持向量机或SVM,是一种判别分类器,通过查找决策面来工作。它是一种有监督的机器学习算法。
在此算法中,我们将每个数据项绘制为n维空间中的点(其中n是您已知的要素数),每个要素的值是特定坐标的值。然后,我们通过找到非常好地区分两个类的超平面来进行分类,即具有最大余量,在这种情况下是C.
超平面是一个子空间,其维数比其对应的向量空间小1,因此它将是2D向量空间的直线,3D向量空间的2D平面等等。再次使用Vector Norm来计算边际。
但是,如果数据不能像下面的情况那样线性分离呢?
我们的直觉说决策面必须是圆形或椭圆形,对吧?但你怎么找到它?在这里,内核转换的概念发挥作用。在线性代数中,从一个空间转换到另一个空间的想法非常普遍。
让我们介绍一个变量z = x ^ 2 + y ^ 2。如果我们沿z轴和x轴绘制数据,这就是数据的外观:
现在,这显然可以通过线z = a进行线性分离,其中a是一些正常数。在转换回原始空间时,我们得到x ^ 2 + y ^ 2 = a作为决策面,这是一个圆圈!
最好的是,我们不需要自己添加其他功能。SVM有一种称为内核技巧的技术。阅读有关支持向量机的这篇文章(见下方链接),了解SVM,内核技巧以及如何在Python中实现它。
https://www.analyticsvidhya.com/blog/2017/09/understaing-support-vector-machine-example-code/?utm_source=blog&utm_medium=10-applications-linear-algebra-data-science
维度降低
您将经常使用具有数百甚至数千个变量的数据集。这就是行业运作的方式。对每个变量进行查看并确定哪个变量更切合实际是有必要的么?
这没有多大意义。我们需要降低变量的数量来执行任何类型的连贯分析。这就是维数减少的原因。现在,我们来看看这里常用的两种降维方法。
5.主成分分析(PCA)
主成分分析(PCA)是一种无监督降维技术。PCA找到最大方差的方向并沿着它们投影数据以减小尺寸。
在不使用数学的情况下,这些方向是数据的协方差矩阵的特征向量。
方阵的特征向量是特殊的非零向量,即使在对矩阵应用线性变换(乘法)之后,其方向也不会改变。它们显示为下图中的红色矢量:
您可以使用scikit-learn包中的PCA类轻松地在Python中实现PCA:
我在sklearn 的Digits数据集上应用了PCA - 一组8×8手写数字图像。我获得的图像令人印象深刻,数字看起来似乎很好地聚集在一起:
请参阅我们的用Python代码进行12种降维技术综合指南(见下方链接),深入了解PCA和其他11种降维技术。这是关于这个主题的最好的文章之一。
https://www.analyticsvidhya.com/blog/2018/08/dimensionality-reduction-techniques-python/?utm_source=blog&utm_medium=10-applications-linear-algebra-data-science
6.奇异值分解
在我看来,奇异值分解(SVD)被低估了,没有获得足够多的讨论。这是一种令人惊叹的矩阵分解技术,具有多种应用。我将在以后的文章中尝试介绍其中的一些内容。
现在,让我们谈谈维度降低中的SVD。具体而言,这称为截断SVD。
我们从大的mxn数值数据矩阵A开始,其中m是行数,n是特征的数量
将其分解为3个矩阵,如下所示:
资料来源:hadrienj.github.io
根据对角矩阵选择k个奇异值,并相应地截断(修剪)3个矩阵:
最后,将截断的矩阵相乘以获得变换后的矩阵A_k。它的尺寸为mx k。因此,它具有k
以下是在Python中实现截断的SVD的代码(它与PCA非常相似):
在将截断的SVD应用于Digits数据时,我得到了下面的图。您会注意到它不像我们在PCA之后获得的那样集群:
自然语言处理(NLP)
自然语言处理(NLP)是目前数据科学领域最热门的领域。这主要取决于过去18个月的重大突破。如果您还未决定选择哪个分支 - 您应该强烈考虑NLP。
让我们看一下NLP中线性代数的几个有趣的应用。这应该有助于你进行决定!
7. Word嵌入
机器学习算法不适用于原始文本数据。我们需要将文本转换为一些数字和统计特征来创建模型输入。文本数据中有许多使用工程特征的方法,例如:
文本的元属性,如字数,特殊字符数等。
使用词性标签和语法关系(如专有名词的数量)的文本的NLP属性
Word矢量符号或Word嵌入
Word嵌入是一种将单词表示为数字的低维向量同时在文档中保留其上下文的方式。这些表示是通过在大量文本上训练不同的神经网络而获得的,这些文本被称为语料库。它们还有助于分析单词之间的句法相似性:
Word2Vec和GloVe是两种最受欢迎的用来创建Word曲面嵌入的模型。
在使用Word2Vec进行一些轻度预处理后,我在莎士比亚语料库上训练了我的模型,并获得了“世界”这个词的嵌入词:
太酷了!但更棒的是我获得了下面的这张图。观察到语法相似的单词会彼此更加接近。我圈出了一些这样的词汇。结果并不完美,但仍然非常惊人:
还有其他几种获取Word嵌入的方法。阅读我们的文章直观了解Word嵌入:从计数向量到Word2Vec。(见下方链接)
https://www.analyticsvidhya.com/blog/2017/06/word-embeddings-count-word2veec/?utm_source=blog&utm_medium=10-applications-linear-algebra-data-science
8.潜在语义分析(LSA)
当你听到这组话语时,你首先想到的是什么 - “王子,王室,国王,贵族”?这些非常不同的词几乎是同义词。
现在,考虑以下句子:
主队的投手似乎身体不适
桌上有一罐果汁可供您享用
(投手和罐子的英文都是pitcher)
“pitcher”这个词基于句子的语境会有不同的含义。
这些单词对于我们人类来说很容易通过多年的语言经验来解释。但是机器怎么办?在这里,主题模型的NLP概念发挥作用:
主题模型是一种无监督的技术,可以在各种文本文档中查找主题。这些主题只不过是相关单词的集群。每个文档可以有多个主题。主题模型输出各种主题,它们在每个文档中的分布以及它包含的不同单词的频率。
潜在语义分析(LSA)或潜在语义索引是主题建模的技术之一。它是奇异值分解的另一种应用。
潜在意味着'隐藏'。正如其名称一样,LSA试图通过利用单词周围的上下文从文档中捕获隐藏的主题。
我将简要介绍LSA中的步骤,因此请确保使用Python中的代码查看使用潜在语义分析的主题建模的简介(见下方链接),以便进行适当和深入的理解。
https://www.analyticsvidhya.com/blog/2018/10/stepwise-guide-topic-modeling-latent-semantic-analysis/?utm_source=blog&utm_medium=10-applications-linear-algebra-data-science
首先,为您的数据生成Document-Term矩阵
使用SVD将矩阵分解为3个矩阵:
文档主题矩阵
主题重要性对角矩阵
主题词矩阵
根据主题的重要性截断矩阵
有关自然语言处理的实践经验,您可以查看我们的课程用Python处理NLP。该课程对初学者友好,您将构建5个真实生活中的项目!
计算机视觉
深度学习的另一个领域是计算机视觉。如果您希望将技能组扩展到表格数据之外,那么请学习如何使用图像。
这将拓宽您目前对机器学习的理解,并帮助您快拿下面试。
9.图像表示为张量
您如何解释计算机视觉中的“视觉”?显然,计算机不像人类那样处理图像。就像我之前提到的,机器学习算法需要使用数字特征。
数字图像由称为像素的小不可分割单元组成。请看下图:
这个灰度图像数字零的由8×8 = 64个像素。每个像素的值在0到255的范围内。值0表示黑色像素,255表示白色像素。
mxn灰度图像可以表示为具有m行和n列的2D矩阵,其中单元格包含相应的像素值:
但彩色图像怎么样?彩色图像通常存储在RGB系统中。每个图像可以被认为是由三个2D矩阵表示,R,G和B通道各有一个。R通道中的像素值0表示红色的零强度,255表示红色的全强度。
然后,每个像素值是三个通道中相应值的组合:
实际上,不是使用3个矩阵来表示图像,而是使用张量。张量是广义的n维矩阵。对于RGB图像,使用第三有序张量。想象一下,三个二维矩阵一个接一个堆叠:
图片来源:slidesharecdn
10.卷积和图像处理
2D卷积是图像处理中非常重要的操作。它包括以下步骤:
从一个小的权重矩阵开始,称为内核或过滤器
在2D输入数据上滑动此内核,执行逐元素乘法
添加获得的值并将总和放在单个输出像素中
该功能看起来有点复杂,但它广泛用于执行各种图像处理操作,如锐化和模糊图像和边缘检测。我们只需要知道正在尝试完成的任务的正确Kernel。以下是一些可以使用的Kernel:
您可以下载我使用过的图像,并使用上面的代码和内核自己尝试这些图像处理操作。另外,试试这个关于图像分割技术的计算机视觉教程!(见下方链接)
https://www.analyticsvidhya.com/blog/2019/04/introduction-image-segmentation-techniques-python/?utm_source=blog&utm_medium=10-applications-linear-algebra-data-science
这是迄今为止我最喜欢的线性代数在数据科学中的应用。
现在您已熟悉计算机视觉的基础知识,现在是时候通过16个超棒的OpenCV功能开始您的计算机视觉之旅(见下方链接)。我们还有一个关于使用深度学习的计算机视觉的综合课程(见下方链接),您可以在其中进行真实的计算机视觉案例研究!
https://www.analyticsvidhya.com/blog/2019/03/opencv-functions-computer-vision-python/?utm_source=blog&utm_medium=10-applications-linear-algebra-data-science
https://courses.analyticsvidhya.com/courses/computer-vision-using-deep-learning-version2?utm_source=blog&utm_medium=10-applications-linear-algebra-data-science
结束笔记
我的目标是将线性代数变得比你之前想象的更有趣。就个人而言,了解一个主题的应用会激励我学习更多关于它的知识。
欢迎大家关注我们的微信公众号数据帮club↓