三元函数的几何图形一般是_五分钟了解这几个numpy的重要函数

(点击上方快速关注并设置为星标,一起学Python)

来源:数据分析1480  作者:刘顺祥   链接:

https://mp.weixin.qq.com/s/KbLBT65XfYCl1uer5umCoA

前言

数据挖掘的理论背后,几乎离不开线性代数的计算,如矩阵乘法、矩阵分解、行列式求解等。本文将基于numpy模块实现常规线性代数的求解问题,需要注意的是,有一些线性代数的运算并不是直接调用numpy模块,而是调用numpy的子模块linalg(线性代数的缩写)。该子模块涵盖了线性代数所需的很多功能,本文将挑几个重要的例子加以说明。

函数清单

为使读者有一个全局的概念,下面罗列一些linalg子模块中有关线性代数的重要函数,以便读者快速查阅和灵活使用:

3a2cc6f6f28ed64da18b6f5a7ceb73bb.png

案例讲解

接下来,我们基于上表中的函数,分享几个重要的例子,相信在不久的将来,当你研究数据挖掘的算法理论时,可能会用到。

矩阵乘法
# 一维数组的点积
vector_dot = np.dot(np.array([1,2,3]), np.array([4,5,6]))
print('一维数组的点积:
',vector_dot)
# 二维数组的乘法
print('两个二维数组:')
print(arr10)
print(arr11)
arr2d = np.dot(arr10,arr11)
print('二维数组的乘法:
',arr2d)

一维数组的点积:
32

两个二维数组:
[[ 0  1  2]
[ 3  4  5]
[ 6  7  8]
[ 9 10 11]]
[[101 102 103 104]
[105 106 107 108]
[109 110 111 112]]

二维数组的乘法:
[[ 323  326  329  332]
[1268 1280 1292 1304]
[2213 2234 2255 2276]
[3158 3188 3218 3248]]

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

diag函数的使用
arr15 = np.arange(16).reshape(4,-1)
print('4×4的矩阵:
',arr15)
print('取出矩阵的主对角线元素:
',np.diag(arr15))
print('由一维数组构造的方阵:
',np.diag(np.array([5,15,25])))

4×4的矩阵:
[[ 0  1  2  3]
[ 4  5  6  7]
[ 8  9 10 11]
[12 13 14 15]]

取出矩阵的主对角线元素:
[ 0  5 10 15]

由一维数组构造的方阵:
[[ 5  0  0]
[ 0 15  0]
[ 0  0 25]]

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

特征根与特征向量

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

# 计算方阵的特征向量和特征根
arr16 = np.array([[1,2,5],[3,6,8],[4,7,9]])
print('计算3×3方阵的特征根和特征向量:
',arr16)
print('求解结果为:
',np.linalg.eig(arr16))

计算3×3方阵的特征根和特征向量:
[[1 2 5]
[3 6 8]
[4 7 9]]

求解结果为:
(array([ 16.75112093,  -1.12317544,   0.37205451]), 
 array([[-0.30758888, -0.90292521,  0.76324346],
           [-0.62178217, -0.09138877, -0.62723398],
           [-0.72026108,  0.41996923,  0.15503853]]))

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

多元线性回归模型的解

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

# 计算偏回归系数
X = np.array([[1,1,4,3],[1,2,7,6],[1,2,6,6],[1,3,8,7],[1,2,5,8],[1,3,7,5],[1,6,10,12],[1,5,7,7],[1,6,3,4],[1,5,7,8]])
Y = np.array([3.2,3.8,3.7,4.3,4.4,5.2,6.7,4.8,4.2,5.1])

X_trans_X_inverse = np.linalg.inv(np.dot(np.transpose(X),X))
beta = np.dot(np.dot(X_trans_X_inverse,np.transpose(X)),Y)
print('偏回归系数为:
',beta)

偏回归系数为:
[ 1.78052227  0.24720413  0.15841148  0.13339845]

如上所示,X数组中,第一列全都是1,代表了这是线性回归模型中的截距项,剩下的三列代表自变量。根据β的求解公式,得到模型的偏回归系数。从而可以将多元线性回归模型表示为d910cfa67db970afc5c103a475b89a1b.png

多元一次方程组的求解

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

950781795fdf4b449aa72fbe752e7525.png

在线性代数中,这个方程组就可以表示成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('三元一次方程组的解:
',X)

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

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

范数的计算

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

# 范数的计算
arr17 = np.array([1,3,5,7,9,10,-12])
# 一范数
res1 = np.linalg.norm(arr17, ord = 1)
print('向量的一范数:
',res1)
# 二范数
res2 = np.linalg.norm(arr17, ord = 2)
print('向量的二范数:
',res2)
# 无穷范数
res3 = np.linalg.norm(arr17, ord = np.inf)
print('向量的无穷范数:
',res3)

向量的一范数:
47.0
向量的二范数:
20.2237484162
向量的无穷范数:
12.0

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

结语

本期的内容就介绍到这里,如果你有任何问题,欢迎在公众号的留言区域表达你的疑问。同时,也欢迎各位朋友继续转发与分享文中的内容,让更多的人学习和进步。

(完)

看完本文有收获?请转发分享给更多人

关注「Python那些事」,做全栈开发工程师

8171f9e256e7323cfcb8b4d81e439178.png

006624134b86dc38d452ea7d3d9699fa.png

点「在看」的人都变好看了哦
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值