数据分析与数据挖掘 - 06 线性代数
一 导数的意义
导数是高等数学中非常重要的知识点,也是人工智能的算法应用中比较常用的一个知识,这一章我们的重点就是讲解一下导数和其求导法则。首先我们来看一下导数的基本概念:函数的变化率,即函数的变化速度,叫做函数的导数。 设函数y = f(x) 在函数x0的某邻域内有定义,当x在点x0有增量∆x(x0+∆x仍在该邻域内)。这时y=f(x)有增量∆y=f(x0+∆x)-f(x0),当∆x无限趋近于零时,∆y/∆x存在,则这个极限值就叫做函数y=f(x)在点x0处的导数,公式如下:
导数的公式除了以上的写法,还可以写作下边的这种方式:
此时,我们称函数f(x)在x0处可导,当然我们也可以使用导数的几何意义-斜率来理解,如下图所示:
我们可以把导数理解为函数在几何曲线中某一点处切线的斜率,在这基础上加一个拓展,也很好理解。函数可导一定连续,但连续不一定可导。如果你感兴趣,可以证明一下这个过程,但我们现在记住这个定理就可以。
二 导数的求导法则
1 加减运算的求导法则
若函数u = u(x) 和 v = v(x) 在点x处可导,则函数 y = u+v 在点x处也必可导,并且 (u + v)' = u' + v',其证明过程如下:
2 函数积的求导法则
若函数u = u(x) 和 v = v(x) 在点x处可导,则函数 y = uv 在点x处也必可导,并且 (uv)' = u'v + v'u,其证明过程也是类似的,这里我们不再花费篇幅论证了,有兴趣的同学可以自己验证一下。
3 函数商的求导法则
若函数u = u(x) 和 v = v(x) 在点x处可导,并且v(x)在点x处不为0,则函数 y = u/v 在点x处也必可导,并且 (u/v)' = (u'v - v'u)/v^2,其证明过程也是类似的,这里我们不再花费篇幅论证了,有兴趣的同学可以自己验证一下。
4 导数常见的公式
学习导数时,有一些基本公式需要我们记住的,虽然我们可以推导出其过程,但是这一些公式就相当于定理一样,记住就好,这样就不用每一次都自己去推导了。 下面是一些常见的公式:
5 复合函数的求导法则
若函数u = k(x) 在点x处可导,y=f(u) 在点u处可导,则复合函数 f = [k(x)] 在点x处也必可导,并且 f(x)' = y_u'*u_x',其证明过程稍微你有点麻烦,具体过程如下:
多说一句,虽然我们可以通过Numpy及SciPy这样的科学计算库轻松实现导数计算,并且也可以轻松的实现矩阵、微分、积分等运算,但只有我们掌握其推导过程,才能够真正明白未来要学习的那些算法真正的意义。
三 矩阵乘法运算
像下图中,将数列排成m行n列后,然后用括号将它们围起来,我们将这种形式的组合叫做矩阵。
我们将其中的m和n分别叫做行标和列标,由m行和n列数排成的矩阵又称作mn矩阵或m行n列矩阵,就像下边这样。
我们把其中的数字叫做元素,比如有一个矩阵是[1,2],那么元素就是1和2,当行数和列数相等时,我们把这样的矩阵称之为"n阶方阵"。
这个时候我们把对角线上的元素叫做对角元素。矩阵的出现,简化了方程组的书写方式,比如像下图中的简写方式:
下面让我们来看一下如何进行矩阵运算吧,首先我们来看一下矩阵的"和"运算,矩阵的"和"运算就是其对应位置相加的运算,如下图所示:
矩阵的减法也很简单,就是把上边的加号变成减号,我们下边看一下矩阵的倍数运算吧。
倍数运算也是一种特殊的矩阵的"积"运算,现在我们来学习一下矩阵的"积"运算吧。
另外有一点需要注意,两个矩阵相乘,如果交换位置,那么结果是不一样,我们举一个例子来展示一下:
显然,矩阵的积运算交换位置之后的结果是不同的。 现在我们考虑一个问题,这个问题就是两个符合什么形状的矩阵才能够进行相乘的运算?这个问题的答案是只有左边矩阵的列数等于右边矩阵的行数时,两个矩阵才能够进行乘法运算,也就是必须要是mn的矩阵与n*p的矩阵来做运算,因为运算的时候是第一个矩阵的列数与第二个矩阵的行数来做运算的。 接下来我们再来一起认识一下一些特殊的矩阵。 零矩阵:所有的元素都为0的矩阵。
转置矩阵:把行和列对应的位置交换
对称矩阵:以对角元素为对称轴对称的n阶方阵。对称矩阵的转置矩阵和自己完全相同。
上三角矩阵:在矩阵左下角都是0的n阶方阵。
下三角矩阵:在矩阵右上角都是0的n阶方阵。
对角矩阵:对角元素以外的元素都是0的n阶方阵。对角矩阵的n次方结果是对角元素的n次方的对角矩阵。
单位矩阵:对角元素都是1,其他元素都是0的n阶方阵。任何矩阵乘以单位矩阵结果都是原来的矩阵。
四 逆矩阵
逆矩阵运算比之前的运算要复杂一点,我们先来通过一个例子看一下什么是逆矩阵。
下面来看一下逆矩阵的求解方法及确认是否存在逆矩阵的方法,求逆矩阵的方法有代数余子式法和消元法,利用代数余子式的方法来计算逆矩阵非常麻烦,用的也比较少。而与之相比,消元法就简单的多啦,所以我们主要来学习一下消元法。 消元法和解方程是非常类似的,如果矩阵是为了书写方便,那么方程则是为了计算方便。
上面的式子是一个二元一次方程组,但同时它也是一个矩阵。
下面我们来做一个小练习,求一下下面这个2阶方阵的逆矩阵。
我们先把问题整理成矩阵的形式:
再把它转化成方程组:
显然这个方程组,我们可以很容易的求出x1 = 0.4,y1 = -0.2,x2 = -0.2,y2 = -0.6。 逆矩阵其实还可以有下边这种表达方式:
其实关于二阶方阵的逆矩阵,还存在着这样一个公式:
注意:这个公式只适用于2阶方阵,当3阶以上的方阵时,最好我们还是使用消元法。最后补充一句,我们把存在逆矩阵的n阶方阵叫做可逆矩阵。关于矩阵的知识点还有行列式以及多阶方阵的逆矩阵求法,当我们讲到算法模型时,有需要的时候我们再进行更多的讲解。
推荐阅读
-
数据分析与数据挖掘 - 06 线性代数
-
顺丰科技2022年秋季招聘大数据挖掘与分析工程师笔试试题
-
数据分析中的线性代数运算
-
天池四月读书会|数据分析与金融量化,6场直播,6位大佬,6个项目实践...
-
这个数据库收集了 24,000 个 "梦"!它利用人工智能对你的梦境进行分析和评分,找出梦境与现实之间的关联,帮助你解梦。
-
正负偏差变量 即 d2+、d2- 分别表示决策值中超出和未达到目标值的部分。而 di+、di- 均大于 0 刚性约束和目标约束(柔性目标约束有偏差) 在多目标规划中,>=/<= 在刚性约束中保持不变。当需要将约束条件转换为柔性约束条件时,需要将 >=/<= 更改为 =(因为已经有 d2+、d2- 用来表示正负偏差),并附加上 (+dii-di+) 注意这里是 +di、-di+!之所以是 +di,-di+,是因为需要将目标还原为最接近的原始刚性约束条件 优先级因素和权重因素 对多个目标进行优先排序和优先排序 目标规划的目标函数 是所有偏差变量的加权和。值得注意的是,这个加权和都取最小值。而 di+ 和 dii- 并不一定要出现在每个不同的需求层次中。具体分析需要具体问题具体分析 下面是一个例子: 题目中说设备 B 既要求充分利用,又要求尽可能不加班,那么列出的时间计量表达式即为:min z = P3 (d3- + d3 +) 使用 + 而不是 -d3 + 的原因是:正负偏差不可能同时存在,必须有 di+di=0 (因为判定值不可能同时大于目标值和小于目标值),而前面是 min,所以只要取 + 并让 di+ 和 dii- 都为正值即可。因此,得出以下规则: 最后,给出示例和相应的解法: 问题:某企业生产 A 和 B 两种产品,需要使用 A、B、C 三种设备。下表显示了与工时和设备使用限制有关的产品利润率。问该企业应如何组织生产以实现下列目标? (1) 力争利润目标不低于 1 500 美元; (2) 考虑到市场需求,A、B 两种产品的生产比例应尽量保持在 1:2; (3)设备 A 是贵重设备,严禁超时使用; (4)设备 C 可以适当加班,但要控制;设备 B 要求充分利用,但尽量不加班。 从重要性来看,设备 B 的重要性是设备 C 的三倍。 建立相应的目标规划模型并求解。 解:设企业生产 A、B 两种产品的件数分别为 x1、x2,并建立相应的目标计划模型: 以下为顺序求解法,利用 LINGO 求解: 1 级目标: 模型。 设置。 variable/1..2/:x;! s_con_num/1...4/:g,dplus,dminus;!所需软约束数量(g=dplus=dminus 数量)及相关参数; s_con(s_con_num);! s_con(s_con_num,variable):c;!软约束系数; 结束集 数据。 g=1500 0 16 15. c=200 300 2 -1 4 0 0 5; 结束数据 min=dminus(1);!第一个目标函数;!对应于 min=z 的第一小部分;! 2*x(1)+2*x(2)<12;!硬约束 @for(s_con_num(i):@sum(variable(j):c(i,j)*x(j))+dminus(i)-dplus(i)=g(i)); !使用设置完成的数据构建软约束表达式; ! !软约束表达式 @for(variable:@gin(x)); !将变量约束为整数; ! 结束 此时,第一级目标的最优值为 0,第一级偏差为 0: 第二级目标: !求 dminus(1)=0,然后求解第二级目标。 模型。 设置。 变量/1..2/:x;!设置:变量/1..2/:x; ! s_con_num/1...4/:g,dplus,dminus;!软约束数量及相关参数; s_con(s_con_num(s_con_num));! s_con(s_con_num,variable):c;! 软约束系数; s_con(s_con_num,variable):c;! 结束集 数据。 g=1500 0 16 15; c=200 300 2 -1 4 0 0 5; 结束数据 min=dminus(2)+dplus(2);!第二个目标函数 2*x(1)+2*x(2)<12;!硬约束 @for(s_con_num(i):@sum(variable(j):c(i,j)*x(j))+dminus(i)-dplus(i)=g(i)); ! 软约束表达式;! dminus(1)=0; !第一个目标结果 @for(variable:@gin(x)); ! 结束 此时,第二个目标的最优值为 0,偏差为 0: 第三目标 !求 dminus(2)=0,然后求解第三个目标。 模型。 设置。 变量/1..2/:x;!设置:变量/1..2/:x; ! s_con_num/1...4/:g,dplus,dminus;!软约束数量及相关参数; s_con(s_con_num(s_con_num));! s_con(s_con_num,variable):c;! 软约束系数; s_con(s_con_num,variable):c;! 结束集 数据。 g=1500 0 16 15; c=200 300 2 -1 4 0 0 5; 结束数据 min=3*dminus(3)+3*dplus(3)+dminus(4);!第三个目标函数。 2*x(1)+2*x(2)<12;!硬约束 @for(s_con_num(i):@sum(variable(j):c(i,j)*x(j))+dminus(i)-dplus(i)=g(i)); ! 软约束表达式;! dminus(1)=0; !第一个目标约束条件; ! dminus(2)+dplus(2)=0; !第二个目标约束条件 @for(variable:@gin(x));! 结束 最终结果为 x1=2,x2=4,dplus(1)=100,最优利润为
-
R 语言与 Garch 模型和回归模型对股价的分析--原文来源:顶端数据部落公众号
-
数据包络分析与机器学习算法的区别 数据包络分析的应用
-
数据包络分析与机器学习算法的区别
-
EDA 和数据挖掘在行动:漫威与 DC》电影评分和票房分析