线性代数在计算机视觉的应用,10种线性代数在数据科学中的强大应用(内附多种资源)...
本文摘要线性代数为各种各样的数据科学算法和应用提供支持
在这里,我会向您介绍通过线性代数帮助您成为更好的数据科学家的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 Norm是矢量距原点的最短距离,如下图中的红色路径所示:
这个距离是用毕达哥拉斯定理计算的。它是(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-science
3.协方差矩阵
双变量分析是数据探索中的重要一步。我们想研究变量对之间的关系。协方差或相关性是用于研究两个连续变量之间的关系的度量。
协方差表示变量之间线性关系的方向。正协方差表示一个变量的增加或减少的同时,另一个变量发生了相同的变化。负协方差表明一个变量的增加或减少伴随另一个变量相反的变化。
另一方面,相关性是协方差的标准化值。相关值告诉我们线性关系的强度和方向,范围从-1到1。
现在,您可能会认为这是统计学而非线性代数的概念。好吧,记得我告诉过你线性代数是无处不在的吗?使用线性代数中的转置和矩阵乘法的概念,我们对协方差矩阵有一个非常简洁的表达式:
这里,X是包含所有数字特征的标准化数据矩阵。
我鼓励您阅读我们的数据探索完整教程(见下方链接),以了解有关协方差矩阵,双变量分析以及探索性数据分析中涉及的其他步骤的更多信息。https://www.analyticsvidhya.com/blog/2016/01/guide-data-exploration/?utm_source=blog&utm_medium=10-applications-linear-algebra-data-science
4.支持向量机分类
支持向量机,是最常见的分类算法之一,经常产生令人印象深刻的结果。它是矢量空间概念在线性代数中的应用。
支持向量机或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个矩阵:资料来源:researchgate.net最后,将截断的矩阵相乘以获得变换后的矩阵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种线性代数在数据科学中的强大应用(内附多种资源)...相关推荐
- 中ridge_10种线性代数在数据科学中的强大应用(内附多种资源)
原文选自 | Analytics Vidhya 作者 | Khyati Mahendru 本文转载自 TalkingData数据学堂 ,未经允许禁止转载 本文摘要 线性代数为各种各样的数据科学算法和应 ...
- 线性代数在计算机视觉的应用,线性代数在数据科学中的十大强大应用(二)
本篇为机器学习与数据科学背后的线性代数知识系列的第二篇,本篇主要介绍自然语言处理(NLP)中的线性代数与计算机视觉(CV)中的线性代数.涵盖主成分分析(PCA)与奇异值分解(SVD)背后的线性代数知识 ...
- 图像在计算机中通过什么方式表示_线性代数在数据科学中的十大强大应用(二)...
本篇为机器学习与数据科学背后的线性代数知识系列的第二篇,本篇主要介绍自然语言处理(NLP)中的线性代数与计算机视觉(CV)中的线性代数.涵盖主成分分析(PCA)与奇异值分解(SVD)背后的线性代数知识 ...
- 10种方法解析LOGO设计中的中文字体设计
10种方法解析LOGO设计中的中文字体设计 1. 连接法--结合字体特征将笔画相连接的形式 2. 简化法--根据字体特点,利用视觉错觉合理地简化字体部分笔画的形式 3. 附加法--在字体外添加配合表现 ...
- 数据科学中 17 种相似性和相异性度量
本文解释了计算距离的各种方法,并展示了它们在我们日常生活中的实例.限于篇幅,便于阅读,将本文分为上下两篇,希望对你有所帮助. "There is no Royal Road to Geome ...
- 数据科学中常见的9种距离度量方法(包括曼哈顿距离、欧氏距离、半正矢距离等)
数据科学中常见的9种距离度量方法(包括曼哈顿距离.欧氏距离.半正矢距离等) 1.欧氏距离(Euclidean Distance) 2.余弦相似度(Cosine Similarity) 3.汉明距离(H ...
- 推荐你10本机器学习和数据科学书籍,确定不看一下么?(附资料)
是时候让你的书架上新增几本机器学习和数据科学书籍了,KDnuggets 网站编辑 Matthew Mayo 挑选了 10 本机器学习和数据科学相关的书籍.这些书籍都是免费的,对机器学习和数据科学感兴趣 ...
- 春节充电 | 送你10本机器学习和数据科学必读书(附PDF下载)
作者:Matthew Mayo 翻译:肖镇东 校对:梁傅淇 本文共1800字,建议阅读6分钟. 让一系列免费的机器学习与数据科学书籍开启你的假期学习之旅吧! 在读完本文列出的书单之后,如果你想要更多免 ...
- 数据科学中的五种认知偏差,你都了解吗?
我们每个人都容易受到歪曲思维的认知偏见所带来的伤害,但是,数据科学家必须防止这些偏见破坏他们的工作.下文将介绍五种常见的认知偏差,这些偏见很容易让你看起来很客观的工作变得非常主观. 最近,我在读罗尔夫 ...
最新文章
- java sftp nologin_SFTP连接通过Java询问奇怪的身份验证
- Atian inputmethod 输入法解决方案 方言与多语言多文字支持 英语汉字汉语阿拉伯文的支持 (au...
- 网易笔试——混合颜料
- eclipse java8报错_eclipse4.3安装支持Java8插件,之后就报错无法打开eclipse,求解?
- 关于meta name=viewport content=width=device-width, initial-scale=1.0, maximum-scale=1.0, user-sc..
- Linq的一些操作符-图表展示
- 13.IDA-显示正确的函数名称(去掉c++后缀命名)
- Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲
- 人类基因组计划20周年!中科院付巧妹团队登Science特刊,从古DNA中一窥人类演化...
- 远程监控系统集成方案
- 继英伟达、三星后,育碧也遭攻击,员工密码重置
- LeetCode 85.最大矩形
- python生成词云图_python生成词云图
- 子层div浮动导致父层无法自适应高度的解决方法
- 新浪微博三方登陆(获取用户信息接口及描述)
- 建模是什么,建模定义,及学习方法
- 编写一个函数,使其向主函数返回您输入的3个整数参数中的最大值,并在主函数中输出该值。
- ffmpeg C++推流
- python使用redis_python如何连接redis
- 成功 自信 快乐, ――给中国青年学生的一封信
热门文章
- android基础面试题(三)
- 自检代码中trustmanager漏洞_Windows内核漏洞利用教程
- ShadeGraph教程之节点详解7:Utility Nodes
- JAVA听力源码_剑桥雅思13Test4Section4听力原文与答案 The History of Coffee
- 非结构化数据上下文中的GraphQL
- ps自定义形状工具_ps中借助形状工具绘制卡通图
- 如何给小朋友解释单摆运动_模仿小天才钟美美:小朋友都是天生的演员?
- linux多cpu运行python脚本,linux系统使用python获取cpu信息脚本分享
- scss 变量_SCSS和Sass使用这种样式语言所需的所有CSS和SCSS代码
- python字典的键可以是int吗_Python:大int键的快速字典