从零开始学Python数据分析与挖掘
上QQ阅读APP看书,第一时间看更新

4.4 线性代数的相关计算

数据挖掘的理论背后几乎离不开有关线性代数的计算问题,如矩阵乘法、矩阵分解、行列式求解等。本章介绍的numpy模块同样可以解决各种线性代数相关的计算,只不过需要调用Numpy的子模块linalg(线性代数的缩写),该模块几乎提供了线性代数所需的所有功能。

表4-3给出了一些numpy模块中有关线性代数的重要函数,以便读者快速查阅和掌握函数用法。

表4-3 numpy模块中有关线性代数的重要函数

4.4.1 矩阵乘法

点积函数dot,使用在两个一维数组中,实际上是计算两个向量的乘积,返回一个标量;使用在两个二维数组中,即矩阵的乘法,矩阵乘法要求第一个矩阵的列数等于第二个矩阵的行数,否则会报错。

4.4.2 diag函数的使用

如上结果所示,如果给diag函数传入的是二维数组,则返回由主对角元素构成的一维数组;如果向diag函数传入一个一维数组,则返回方阵,且方阵的主对角线就是一维数组的值,方阵的非主对角元素均为0。

4.4.3 特征根与特征向量

我们知道,假设A为n阶方阵,如果存在数λ和非零向量,使得Ax=λx(x≠0),则称λ为A的特征根,x为特征根λ对应的特征向量。如果需要计算方阵的特征根和特征向量,可以使用子模块linalg中的eig函数:

如上结果所示,特征根和特征向量的结果存储在元组中,元组的第一个元素就是特征根,每个特征根对应的特征向量存储在元组的第二个元素中。

4.4.4 多元线性回归模型的解

多元线性回归模型一般用来预测连续的因变量,如根据天气状况预测游客数量、根据网站的活动页面预测支付转化率、根据城市人口的收入、教育水平、寿命等预测犯罪率等。该模型可以写成Y=+ε,其中Y为因变量,X为自变量,ε为误差项。要想根据已知的X来预测Y的话,必须得知道偏回归系数β的值。对于熟悉多元线性回归模型的读者来说,一定知道偏回归系数的求解方程,即β=(X'X)-1X’Y)。如果读者并不是很熟悉多元线性回归模型的相关知识,可以查看第7章的内容。

如上所示,X数组中,第一列全都是1,代表了这是线性回归模型中的截距项,剩下的三列代表自变量,根据β的求解公式,得到模型的偏回归系数,从而可以将多元线性回归模型表示为Y=1.781+0.247x1+0.158x2+0.133x3

4.4.5 多元一次方程组的求解

在中学的时候就学过有关多元一次方程组的知识,例如《九章算术》中有一题是这样描述的:今有上禾三秉,中禾二秉,下禾一秉,实三十九斗;上禾二秉,中禾三秉,下禾一秉,实三十四斗;上禾一秉,中禾二秉,下禾三秉,实二十六斗;问上、中、下禾实秉各几何?解答这个问题就需要应用三元一次方程组,该方程组可以表示为:

在线性代数中,这个方程组就可以表示成AX=b, A代表等号左边数字构成的矩阵,X代表三个未知数,b代表等号右边数字构成的向量。如需求解未知数X,可以直接使用linalg子模块中的solve函数,具体代码如下:

    # 多元线性方程组
    A = np.array([[3,2,1],[2,3,1],[1,2,3]])
    b = np.array([39,34,26])
    X = np.linalg.solve(A,b)
    print('三元一次方程组的解:\n',X)

out: 三元一次方程组的解: [ 9.25 4.25 2.75]

如上结果所示,得到方程组x、y、z的解分别是9.25、4.25和2.75。

4.4.6 范数的计算

范数常常用来度量某个向量空间(或矩阵)中的每个向量的长度或大小,它具有三方面的约束条件,分别是非负性、齐次性和三角不等性。最常用的范数就是p范数,其公式可以表示成‖x‖p=(|x1|p+|x2|p+…+|xn|p)1/p。关于范数的计算,可以使用linalg子模块中的norm函数,举例如下:

如上结果所示,向量的无穷范数是指从向量中挑选出绝对值最大的元素。