在上一课时,我们学习了利用梯度下降法求解函数的极值。我举了个例子,如果商品利润函数 r 和补贴金额 x 的关系为 r(x) = p(x)×(m - x - c) = (2/(1+e-x) - 1)×(16 - x - 8),然后我又利用梯度下降法,求解出让利润最大的补贴额 x* 为 2.42 元。

就这个例题而言,其实根本不需要求导法或者是梯度下降法。这是因为,商品定价是 8 元,补贴额 x 的决策空间就是从不打折的 0 元到不要钱的 8 元。如果最小颗粒度是“分”,那么决策空间就是 0.00元~8.00元,这 801 个变量而已。写个 for 循环,对每一个可能的补贴额都简单粗暴地计算一遍,也是一种简单可行的方法。

然而,实际问题中可能会更加复杂。例如,购买概率除了与补贴额有关以外,还跟同行竞争对手的补贴额、商品的有效期、温度、天气、节假日等因素有关。假设有 n 个可能的因素,每个因素的决策空间都是 801 个,那么整体的决策空间就瞬间变成了 801n 个!

此时再用简单粗暴的 for 循环计算就变得不现实了,这也是在大数据环境下,数学算法对复杂业务环境求解计算的优势。

向量是高维度数据的处理单元

我们提到,除了补贴额,影响商品购买率的因素还有很多。为了综合刻画这些因素对购买概率以及利润的影响,自然就需要用多元函数来表达,即 r(x,y,z...) = r(补贴额,有效期,温度...)。

  • 维度

每个影响购买概率的因素,又可称作维度。当维度逐渐变多时,就意味着我们需要在高维度数据空间下处理某个多元函数。在计算机或数学领域中,通常用向量或矩阵来对高维度数据进行计算和表示。

  • 向量

向量是高维度数据的表现形式,它由多个数字组合在一起,其中每个数字都是某个维度的特征值。通常印刷体用斜体、加粗的小写字母表示,例如 a=[1,2,3,4,5],而手写时在字母顶上加一小箭头“→”即可。

  • 矩阵

既然向量是多个数字的组合,同样我们也可以把多个向量组合在一起就得到了矩阵。矩阵通常用斜体、加粗的大写字母表示,例如:

根据向量和矩阵的定义,不难发现向量是一种行数为 1 或列数为 1 的特殊矩阵。有了向量和矩阵,就能把高维度的数据用简单的数学符号表达了。

矩阵的基本运算

因为向量是一种特殊的矩阵,矩阵的基本运算对于向量也适用。

1.转置

先来介绍一下矩阵的转置。转置用大写字母 T 作为上标来表示,作用是交换矩阵行和列的值。这样原本的大小就由 n×m 变成 m×n 了,例如:

2.向量的点乘运算

点乘运算只适用于向量,用“·”表示。计算的结果为,两个向量所有对应项的乘积之和。例如,向量 a= [a1,a2,...,an] ,b= [b1,b2,...,bn],则a·b=a1b1+a2b2+……+anbn。例如 a= [1,2,3] ,b= [2,3,4],则 a·b= 1×2 + 2×3 + 3×4 = 20。

3.矩阵的乘积运算

接下来看一下矩阵相关的乘积运算。矩阵可以有两种乘积相关的运算,第一个是矩阵的乘法,第二个是哈达玛积。

  • 运算矩阵的乘法

如果有 n×p 的矩阵 A 和 p×m 的矩阵 B,则矩阵AB 可以做乘法运算。其乘积结果 C =AB 的大小为 n×m,其中每个元素的数值为(C 矩阵中第 i 行第 j 列)

需要注意的是,矩阵的乘法对维数有严格要求。第一个矩阵的列数与第二个的行数必须相等。所以,矩阵的乘法并不满足交换律

  • 哈达玛积

哈达玛积在对海量数据预处理中会被高频使用,它的计算方式相对简单很多。哈达玛积要求两个矩阵的行列维数完全相同,计算方式是对应位置元素的乘积,例如:

4.求逆运算

最后一个矩阵的基本运算是求逆运算,这很像在标量里对一个数字求倒数。

我们先来介绍一个特殊的矩阵——单位矩阵。单位矩阵定义为主对角线元素为 1,其他元素为 0 的方阵,用I来表示,例如:

求逆运算只可应用在方阵上,用 -1 作为上标来表示,输出的结果也称作逆矩阵。逆矩阵满足的性质是,与原矩阵做乘法运算后,结果为单位矩阵,即 A×A-1=I。

向量的求导

前面说过,在对复杂业务问题进行形式化定义后,再求解最优值的过程中,不管是用求导法还是梯度下降法,都是逃不开要对目标函数进行求导的。复杂业务环境中,自变量肯定不止一个,这就需要我们在向量或矩阵的环境中,掌握求导的运算。

实际工作中,矩阵的求导用得非常少,掌握向量的求导就足够了。因此,我们重点学习“向量关于向量”的导数计算。

我们先给出向量关于向量的导数的计算方法。向量 y 关于向量 w 的求导结果是个矩阵,标记为A。矩阵 A 中第 i 行第 j 列的元素 aij,为向量 y 中第 i 个元素关于向量 w 中第 j 个元素的导数。例如,如果向量 w 的维数为 n×1,向量 y 的维数是 m×1,则 y 关于 w 的求导结果矩阵维数就是 n×m,其中第 i 行第 j 列的元素为:

此时,向量的求导就变成了标量的求导了,相信这并不会难倒我们。

我们给出个相关例题:

如果 wTx= y,其中 wx 都为 n×1 的向量。显然这里的 y 是个标量,也就是一个 1×1 的特殊向量。求 y 关于 x 的导数。

这里的 T 表示的是转置。此处 wTx 是矩阵乘法,1×n 和 n×1 才能相乘。另一种表示方法是 w·x,表示向量点乘。此处二者结果一样。

它的解析过程如下图所示:

计算机处理海量数据

计算机在处理海量数据时,常常依赖复杂的数据结构进行存储。例如数组、链表、栈、哈希表、结构体等等。对于海量数据而言,一定要明确样本和维度这两个概念:

  • 样本,是指一条一条数据,代表的数据的个数;

  • 维度,是指每一条样本的数据集合,代表数据特征的数量。

举个例子,全班 50 名同学语文、数学、英语的考试成绩,就可以视作微型的海量数据。在这个数据集中,50 个同学每个人都有自己的乘积,因此样本就是 50 个。而每个同学的样本,又包含了数学成绩、语文成绩 、英语成绩,这就是每个样本的 3 个维度,也可以称作 3 个特征。这样,就可以得到维数为 50×3 的成绩矩阵。

假设你需要对全班同学的成绩做一些统计计算,那向量的知识就突显出来了。通过向量的加减法,你可以计算出每个人的总分,也可以计算出全班同学每一门课的平均分;通过向量的点乘、哈达玛积,你可以计算出每个同学的偏科情况,即方差。

有了这些基础知识,你就能应对大数据环境中数据的存储、处理、计算和应用了。

小结

在实际工作中,你常会遇到高维度的数据,向量和矩阵就是必不可少的数学基础知识,计算机在处理海量数据时,就通常以向量或数组为单位。

最后我们留一个作业:假设矩阵 50×3 的矩阵 A 为全班 50 个同学 3 门课的考试成绩矩阵,用代码来实现每个同学的得分方差的计算,其中方差的公式为:

如果你用 Python 来开发,可能会用到 NumPy 库,你也可以考虑用 MATLAB 来实现。

关于向量的运算,还可以应用在对散点进行线性回归的拟合中,我们会在下一讲“07 | 线性回归:如何在离散点中寻找数据规律?”中向你详细讲解。


精选评论

*强:

有点看不懂了

程序员的数学课06 向量及其导数:计算机如何完成对海量高维度数据计算?相关推荐

  1. 【程序员必修数学课】->基础思想篇->递归(下)->分而治之从归并排序到MapReduce

    递归(下) 前言 归并排序中的分治思想 分布式系统中的分治思想 1.数据分割和映射 2.归约 3.合并 总结 前言 在上一篇中,我介绍了如何使用递归,来处理迭代法中比较复杂的数值计算.但是我们知道,有 ...

  2. 一个程序员应该怎样去学习和掌握计算机英语

    最近在学习英语,在本科的时候就通过了英语六级的考试,可是实话实说,那只是一次应试的过程,现在的英语仍然是张不开嘴,而且随着时间的流逝那些原本的词汇也忘得差不多了,在网上看到了一篇介绍程序员英语的文章, ...

  3. 某程序员哀叹工资低:二本计算机毕业,四年前端开发,年包才四十万!薪资真的和学历挂钩吗?...

    ‍ ‍程序员的薪资和学历有关系吗?是不是学历越高薪资越高? 一个程序员发帖问大家:为什么大家的工资都那么高,毕业三五年就能达到年包六七十万?自己二本计算机专业,做了四年前端开发,如今年包四十多万就到顶 ...

  4. 程序员等级测试,你不进来试试么?听说等级高的都进一线bat了!

    变量是什么?回答出一个清晰准确的解释可能会一下子难倒有经验的程序员. 在讨论变量之前,我们先来了解一下数据认知. 数据认知 计算机系统中有各种类型的数据,简单的如int,char等.在更抽象的层面上, ...

  5. 转:程序员应该怎样去学习和掌握计算机英语呢?

    原文地址:http://mp.weixin.qq.com/s?__biz=MzA3ODY0MzEyMA==&mid=401008537&idx=2&sn=04269c2a5f3 ...

  6. 一个程序员应该怎样去学习和掌握计算机英语呢

    干程序员是一项很辛苦的工作,要成为一个高水平的程序员尤为艰难.这是因为计算机软件技术更新的速度越来越快,而这些技术大多来源于英语国家,我们在引进这些技术时往往受到语言障碍的制约,严重影响到对新技术的理 ...

  7. 程序员的数学课23 站在生活的十字路口,如何用数学抉择?

    人的一生需要面临很多重大的选择和决策,举例而言: 大漂亮毕业一年后遇到了一个小伙靠谱哥:面对靠谱哥的追求,大漂亮是应该接受还是拒绝? 大迷糊工作 3 年,猎头推荐给他一个不错的工作机会,面对年薪 30 ...

  8. 程序员的数学课16 二分法:如何利用指数爆炸优化程序?

    正式讲课之前,我先问你这样一个问题,请你尽可能快速回答. 一张 1 毫米厚度的纸,对折几次后,可以达到地球到月球的距离(39 万公里)? 我在写这篇稿子的时候,问了身边的几个朋友.最小的回答是 1 万 ...

  9. Java程序员三年的工作经验,却不如一个新人的工资高???

    文章目录 一.关于程序员的几个阶段 第一阶段:三年 第二阶段:五年 第三阶段:十年 二.关于项目经验 三.关于专业技能 1.基本语法 2.集合 3.设计模式 4.多线程 5.JDK源码 6.框架 7. ...

最新文章

  1. SAP QM 模块的弊端?
  2. React笔记:React基础(2)
  3. 世界人民盼丰收-国际农民丰收节贸易会:世界农民节日
  4. php root 启动,php-fpm如何以root身份启动
  5. java 重复提交_java解决重复提交表单
  6. Developer Express 中Gridcontrol获取选中行单元格的值
  7. springboot获取静态图片路径_springboot为实体追加图片路径
  8. 蓝桥杯 ADV-148算法提高 排队打水问题(贪心)
  9. java web scala_Springboot与scala编写第一个web程序
  10. 硬刚Hive | 4万字基础调优面试小总结
  11. 统计 fasta 文件序列长度及 GC 含量
  12. css 将图片折角,纯css3实现的折角效果(无需图片和js代码)
  13. 马士兵_JAVA自学之路
  14. 今年天猫双11的这些技术,可能会改变整个零售行业
  15. 信息系统项目管理师对入户广州还能发挥作用吗?
  16. mybatis源码-plugin源码
  17. 【RDMA】14. RDMA之Memory Window
  18. 链接器、链接过程及相关概念解析
  19. 计算机表格单元格合并,excel表格数据拆分和合并单元格-excel中如何将已经合并的单元格拆分,并将该单元格......
  20. 我是这样克服拖延症的

热门文章

  1. 巧用Python的Qrcode库生成二维码大全
  2. android酷管家初始密码,酷派大神要酷管家密码才能恢复出厂设置
  3. Windows7下redmine-3.3.1的安装详解
  4. Python爬取古诗词写入Neo4j
  5. ride关键字的使用
  6. 人工智能加持下,流行音乐未来会怎么走?
  7. Java web 2022跟学尚硅谷(一) 前端基础
  8. 不明导弹袭击夏威夷!一场38分钟的惊魂
  9. 2011年考研计算机统考408真题算法题
  10. VisualStudio如何添加使用自定义皮肤控件Cskin