线性代数在数据科学中的十个强大应用(一)-程序员宅基地

介绍

线性代数与数据科学的关系就像罗宾与蝙蝠侠。这位数据科学忠实的伙伴经常会被大家所忽视,但实际上,它是数据科学主要领域--包括计算机视觉(CV)与自然语言处理(NLP)等热门领域的强力支撑。

数据开发者往往会因为数学太难而尝试避开这个主题。因为有很多现成的数据处理库可以帮助他们避开线性代数这个烦恼。

这是极其错误的想法。线性代数是我们所熟知的所用强大机器学习算法的背后核心,同样是数据科学家技能的重要组成部分,接下来就让我们一起详细剖析下线性代数在数据科学中的强大应用。

640?wx_fmt=png

在本文中,我会详细解释线性代数在数据科学中的十大应用。这些应用大致分为四个领域:

另外每一个应用还为大家准备了相关的资源,以便感兴趣的同学更进一步了解。

目录:

为什么学习线性代数

我也曾多次问过自己这个问题。当只需导入Python包就可以构建模型时,为什么还要花时间学习线性代数呢?我是这样认为的,线性代数是数据科学的基础之一,假如没有坚实的基础,就无法建造一栋真正的摩天大楼。比如:

当你希望使用主成分分析(PCA)来减少数据的维数时,如果你不知道算法的机制(数学原理),那么你就无法确定该怎样调整组件,以及会对数据产生什么影响。

通过对线性代数的理解,可以对机器学习和深度学习算法有更深一层的感悟,而不是将它们视为黑盒子。从而可以选择适当的超参数,建立更好的模型。

机器学习中的线性代数

最大的问题是,机器学习在什么地方需要线性代数?让我们看一下非常熟悉的四个应用。

1. 损失函数

你需要非常熟悉模型是如何拟合给定的数据(如线性回归模型):

如何计算预测输出与实际结果的差异?损失函数。

损失函数是向量范数在线性代数中的应用。范数可以简单地说是向量的量纲。有许多类型的向量范数。

640?wx_fmt=png

在这个2D空间中,您可以通过沿x轴行进3个单位然后沿y轴平行移动4个单位(如图所示)到达矢量(3,4)。或者您可以先沿y轴行进4个单位,然后沿x轴行进3个单位。在任何一种情况下,您将共旅行7个单位。

这个距离是用毕达哥拉斯定理计算的。它是640?wx_fmt=png的平方根,等于5。

但是,范数如何用于找出预测值与真实值之间的差异?假设预测值存储在向量P中,并且真实值存储在向量E中。P-E是它们之间的差异。P-E的范数就是预测的总损失。

2. 正则化

正则化是数据科学中非常重要的概念。它是用来防止模型过拟合的方法。正则化实际上是规范化的另一种应用。

如果模型在训练时发生了过拟合,模型就会对新数据的预测结果不好,因为模型甚至学习了训练数据中的噪声。它无法预测之前没有训练过的数据。下面的图片揭示了这个思想:

640?wx_fmt=png

正则化通过向损失函数添加权重向量来惩罚过于复杂的模型。由于我们希望最小化成本函数,因此需要最小化此范数。正则化的结果是权重向量中无关紧要的部分变为零,防止预测函数过于复杂。

我们上面讨论的L1和L2范数用于两种类型的正则化:

3. 协方差矩阵

双变量分析是数据探索中的重要一步。我们想研究变量对之间的关系。协方差或相关性是用于研究两个连续变量之间关系的度量。

协方差表示变量之间线性关系的方向。正协方差表示一个变量的增加或减少在另一个变量中同样增加或减少。负协方差表明一个变量的增加或减少同时另一个变量与它相反。

640?wx_fmt=png

ia_100002534 (1)

另一方面,相关性是协方差的标准化值。 相关性值告诉我们线性关系的强度和方向,范围从-1到1。

您可能会认为这是统计学而非线性代数的概念。好吧,记得我告诉过你线性代数是无处不在的吗?使用线性代数中的转置和矩阵乘法的概念,协方差矩阵有一个非常简洁的表达式:

640?wx_fmt=jpeg

其中X是包含所有数字特征的标准化数据矩阵。

4. 支持向量机分类器

支持向量机(SVM)是最常见的分类算法之一,经常产生令人印象深刻的结果。它是向量空间概念在线性代数中的应用。

支持向量机是一种判别分类器,通过查找决策面来工作。它是一种有监督的机器学习算法。

在此算法中,我们将每个数据项绘制为n维空间中的点(其中n是特征数),每个特征的值是特定坐标的值。然后,通过找到最好的区分两个类的超平面来进行分类,即最大余量,下面的例子中是C.

640?wx_fmt=png


超平面是一个子空间,其维数比其对应的向量空间小1,因此它是2D向量空间的直线,3D向量空间的2D平面等等。使用向量范数来计算边界。

 

但是,如果数据像下面的情况那样该怎样线性分离呢?640?wx_fmt=png

我们一般认为决策面必须是圆形或椭圆形,但怎么找到它?这里,使用了内核转换的概念。在线性代数中,从一个空间转换到另一个空间的想法非常普遍。

让我们介绍一个变量640?wx_fmt=png。如果我们沿z轴和x轴绘制数据,就是下面的样子:

640?wx_fmt=png

这显然可以通过 z=a 线性分离,其中a是一些正常数。在转换回原始空间时,我们得到640?wx_fmt=png作为决策曲面,这是一个圆圈!

640?wx_fmt=png

最后的部分?我们不需要手动添加其他函数。SVM有一种称为内核技巧的技术。阅读有关支持向量机的这篇文章(https://www.analyticsvidhya.com/blog/2017/09/understaing-support-vector-machine-example-code/?utm_source=blog&utm_medium=10-applications-linear-algebra-data-science),了解SVM,内核技巧以及如何在Python中实现它。

降维

您将经常使用具有数百甚至数千个变量的数据集。这是行业运作的方式。查看每个变量并确定哪个变量更重要是否切合实际?

这并没有多大意义。我们需要降低变量的数量来执行任何类型的连贯性分析。这就是为什么减少维数的原因。现在,我们来看看常用的两种降维方法。

5. 主成分分析(PCA)

主成分分析(PCA)是一种无监督降维技术。PCA会找到最大方差的方向并沿着它们的投影以减小维度。

在不深入数学的情况下,这些方向就是数据的协方差矩阵特征向量

640?wx_fmt=png

方阵的特征向量是特殊的非零向量,即使在对矩阵应用线性变换(乘法)之后,其方向也不会改变。它们显示为下图中的红色矢量:

640?wx_fmt=png

您可以使用scikit-learn包中的PCA类轻松地在Python中实现PCA:

from sklearn.decomposition import PCA// say you want to reduce to 2 featurespca = PCA(n_components = 2)// obtain transformed datadata_transformed = pca.fit_transform(data)import PCA

// say you want to reduce to 2 features
pca = PCA(n_components = 2)

// obtain transformed data
data_transformed = pca.fit_transform(data)

我在sklearn 的Digits(https://scikit-learn.org/stable/auto_examples/datasets/plot_digits_last_image.html)数据集上应用了PCA - 一组8×8的手写数字图像。我获得的结果相当令人印象深刻。数字看起来很好地聚集在一起:

640?wx_fmt=png

参阅我们的12维降维技术综合指南(https://www.analyticsvidhya.com/blog/2018/08/dimensionality-reduction-techniques-python/?utm_source=blog&utm_medium=10-applications-linear-algebra-data-science),并用Python代码深入了解PCA和其他11种降维技术。老实说,这是你可以找到关于这个主题的最好的文章之一。

6.奇异值分解

在我看来,奇异值分解(SVD)被低估了,没有进行足够的讨论。这是一种令人惊叹的矩阵分解技术,具有多种应用。我将在以后的文章中尝试介绍其中的一些内容。

现在,让我们谈谈维度降低中的SVD。具体而言,这称为截断SVD

以下是在Python中实现截断的SVD的代码(它与PCA非常相似):

from sklearn.decomposition import TruncatedSVD//减少到2个特征svd = TruncatedSVD(n_features  =  2)//获取转换后的数据data_transformed = svd.fit_transform(data)import TruncatedSVD

//减少到2个特征
svd = TruncatedSVD(n_features  =  2)

//获取转换后的数据
data_transformed = svd.fit_transform(data)

在将截断的SVD应用于Digits数据时,我得到了下面的图。您会注意到它不像我们在PCA之后获得的那样集群:

640?wx_fmt=png

作为机器学习与数据科学背后的线性代数知识系列开篇,本篇主要介绍了机器学习与数据科学背后的数学技术十大应用之基础机器学习部分与降维部分。涵盖损失函数、正则化、协方差矩阵、支持向量机(SVM)、主成分分析(PCA)与奇异值分解(SVD)背后的线性代数知识。相信这也是各位数据科学爱好者常用的各项技术,希望可以帮大家理清思路和对这些算法有更进一步的认识。

 

欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/

欢迎关注PyTorch官方中文教程站:
http://pytorch.panchuang.net/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/fendouaini/article/details/98477074

智能推荐

oracle 12c 集群安装后的检查_12c查看crs状态-程序员宅基地

文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态

解决jupyter notebook无法找到虚拟环境的问题_jupyter没有pytorch环境-程序员宅基地

文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境

国内安装scoop的保姆教程_scoop-cn-程序员宅基地

文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn

Element ui colorpicker在Vue中的使用_vue el-color-picker-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker

迅为iTOP-4412精英版之烧写内核移植后的镜像_exynos 4412 刷机-程序员宅基地

文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机

Linux系统配置jdk_linux配置jdk-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk

随便推点

matlab(4):特殊符号的输入_matlab微米怎么输入-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入

C语言程序设计-文件(打开与关闭、顺序、二进制读写)-程序员宅基地

文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。‍ Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。

Touchdesigner自学笔记之三_touchdesigner怎么让一个模型跟着鼠标移动-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动

【附源码】基于java的校园停车场管理系统的设计与实现61m0e9计算机毕设SSM_基于java技术的停车场管理系统实现与设计-程序员宅基地

文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计

Android系统播放器MediaPlayer源码分析_android多媒体播放源码分析 时序图-程序员宅基地

文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;amp;gt;Jni-&amp;amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图

java 数据结构与算法 ——快速排序法-程序员宅基地

文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法