python之numpy之伪逆numpy.linalg.pinv
文章目录
- 解释及实现
- 笔记
- 伪逆在最简单的线性回归中的应用
解释及实现
记XXX的伪逆为pinv(X)pinv(X)pinv(X),则有
pinv(X)=(XTX)−1XTpinv(X)=(X^TX)^{-1}X^Tpinv(X)=(XTX)−1XT,容易发现pinv(X)X=Ipinv(X)X=Ipinv(X)X=I
在numpy中可以使用numpy.linalg.pinv
求伪逆。
例子:1
>>> a = np.random.randn(9, 6)
>>> B = np.linalg.pinv(a)
>>> np.allclose(a, np.dot(a, np.dot(B, a)))
True
>>> np.allclose(B, np.dot(B, np.dot(a, B)))
True
>>> np.allclose(np.transpose(a), np.dot(B, np.dot(a, np.transpose(a))))
True
numpy.linalg.pinv只是numpy众多线性代数函数中的一个,了解更多numpy的线性代数方面的函数,可以看这个链接。
笔记
矩阵 AAA 的伪逆矩阵,记为A+A^+A+ , 定义为:解决最小二乘问题的矩阵。例如, Ax=bAx=bAx=b 的最小二乘解 x^=A+b\hat x = A^+ bx^=A+b。
可以证明,如果 Q1ΣQ2TQ_1 \Sigma Q_2^TQ1ΣQ2T 是 AAA 的奇异值分解,那么 A+=Q2Σ+Q1TA^+=Q_2 \Sigma^+ Q_1^TA+=Q2Σ+Q1T,其中, Q1,2Q_{1,2}Q1,2 是正交矩阵, Σ\SigmaΣ 是一个由 AAA 的奇异值构成的对角矩阵,Σ+\Sigma^+Σ+ 是由 A 的奇异值的倒数组成的对角矩阵。
伪逆在最简单的线性回归中的应用
最小二乘回归是最简单的线性回归,下边就用伪逆来计算一下最小二乘回归。并使用了sklearn中的最小二乘回归做对比,比较两者效率的高下。
import numpy as np
n = 9999999
x = np.arange(n)
np.random.seed(123)
y = x + 3 + np.random.standard_normal(n)# 使用伪逆来计算
import time as t
tic = t.time()
temp = np.ones(n).reshape(-1, 1)
x_aug = np.c_[temp, x]
pinv_x_aug = np.linalg.pinv(x_aug) # 这个叫伪逆
b1, k1 = np.dot(pinv_x_aug, y) # 第一个的是截距,第二个是斜率
toc = t.time()
cost_pinv = toc-tic# 使用sklearn的线性模型来计算
from sklearn import linear_model
tic = t.time()
reg = linear_model.LinearRegression()
reg.fit(x.reshape(-1, 1), y.reshape(-1, 1))
k2 = reg.coef_
b2 = reg.intercept_
toc = t.time()
cost_sklearn = toc-tic
计算结果截图如下
从结果中看出,两种方法计算得到的斜率和截距都是一样的。但是:
sklearn的耗时大概是使用伪逆方法的一半!
可见sklearn还是厉害啊!没事就不要自己造轮子了。
SciPy官方:numpy.linalg.pinv ↩︎
python之numpy之伪逆numpy.linalg.pinv相关推荐
- 学习笔记DL007:Moore-Penrose伪逆,迹运算,行列式,主成分分析PCA
2019独角兽企业重金招聘Python工程师标准>>> Moore-Penrose伪逆(pseudoinverse). 非方矩阵,逆矩阵没有定义.矩阵A的左逆B求解线性方程Ax=y. ...
- python numpy逆_numpy.linalg.inv返回奇异矩阵的逆函数 - python
下面的矩阵是单数,并且AFAIK尝试将其求反应导致 numpy.linalg.linalg.LinAlgError: Singular matrix 但是我得到了一些输出矩阵.请注意,输出矩阵是无意义 ...
- numpy求矩阵的逆和伪逆
我们可以使用np.linalg中的inv和pinv函数来求解矩阵的逆/伪逆. np.linalg.inv 对于可逆方阵M,我们使用下面这行代码求逆: np.linalg.inv(J(theta)) 示 ...
- matlab求最小范数解,python中计算最小范数解或伪逆解最精确的方法是什么?
我的目标是解决:Kc=y 对于伪逆(即最小范数解): ^{pr2}$ 这样模型(希望)是高次多项式模型f(x) = sum_i c_i x^i.我特别感兴趣的是我们有更多的多项式特征比数据(少方程太多 ...
- numpy将所有数据变为0和1_《利用python进行数据分析》1.0——Numpy库
目录: Tab 键自动完成 %run命令 "Ctri-C" 中断正在执行的代码 忘记输入和输出文本怎么办 创建数组 zero 和ones arange(),生成一定长度的数量 dt ...
- Python深度学习基予tensorflow(Numpy)
NumPy常用操作 NumPy提供了两种基本对象:ndarray,ufunc 生成ndarray 1.从已有数据中创建 (1)将列表转换成ndarray import numpy as np list ...
- python 多项式求系数_在Python中用于计算“多项式系数”的numpy / scipy函数
是否有任何 python函数(可能来自numpy或scipy)计算扩展中x ** r的系数(1 xx ** 2 x ** 3 - x **(k-1))** n ,其中k> = 1,n> = ...
- python编写自定义函数计算一维numpy数组中与指定目标数值最接近(距离最近)的数值(find closest value in numpy array to a certain value)
python编写自定义函数计算一维numpy数组中与指定目标数值最接近(距离最近)的数值(find closest value in numpy array to a certain value) 目 ...
- python使用np.argsort对一维numpy概率值数据排序获取倒序索引、获取的top索引(例如top2、top5、top10)索引二维numpy数组中对应的原始数据:原始数据概率最大的头部数据
python使用np.argsort对一维numpy概率值数据排序获取倒序索引.获取的top索引(例如top2.top5.top10)索引二维numpy数组中对应的原始数据:原始数据概率最大的头部数据 ...
最新文章
- 解散了地图接口讨论群
- 2019春季学期期末总结
- VS2019 WPF制作OTA上位机(一)新建工程
- mysql重要的监控参数_zabbix3.0.2使用percona mysql插件来监控mysql5.7 以及必须监控的性能参数...
- 剑指offer(C++)-JZ78:把二叉树打印成多行(数据结构-树)
- mysql 主从复制日志_mysql主从复制基于日志复制
- Win7如何硬盘安装Ubuntu实现双系统
- .p7b证书转成iis使用的.pfx证书
- 区域生长影像分割算法
- 几种经典病毒动力学模型【基于matlab的动力学模型学习笔记_3】
- 网易邮箱显示服务器返回错误,企业退信的常见问题?
- 微信公众号接入百度机器人
- iPhone测试软件偷开照相机,iphone小软件让小偷现形 自动拍下照片发送邮箱
- 基于京东云GPU云主机搭建TensorFlow深度学习环境
- Python骚操作,让图片上的人物动起来!
- mysql(数据库)初级操作
- 如何将图片识别为可编辑的Word文件
- 表观修饰的“当红炸子鸡” - 组蛋白乳酸化
- 1034. 边框着色
- Caliburn.Micro学习笔记目录——Zhouyongh
热门文章
- 华为服务器光纤卡wwn信息,HP-UX下如何获取HBA光纤卡的WWN号?
- 计算机网络第七版谢希仁著课后习题答案
- A Novel Cascade Binary Tagging Framework for Relational Triple Extraction
- Hyperledger Indy项目(开源去中心化身份平台)、去中心化身份(DID)、分布式数字身份项目
- delphi indy_使用Delphi和Indy发送电子邮件(和附件)
- 比较两个时间的前后关系
- zanUI组件的使用
- c#集成程控电源SCPI 命令( 德国EA)
- js 判断安卓,ios,微信浏览器
- 高中数学基础02:反函数与基本初等函数