使用tensorflow实现矩阵分解方式


Posted in Python onFebruary 07, 2020

采用最小二乘的求逆方法在大部分情况下是低效率的。特别地,当局镇非常大时效率更低。另外一种实现方法是矩阵分解,此方法使用tensorflow内建的Cholesky矩阵分解法。Cholesky矩阵分解法把一个矩阵分解为上三角矩阵和下三角矩阵,L和L'。求解Ax=b,改写成LL'=b。首先求解Ly=b,然后求解L'x=y得到系数矩阵。

1. 导入编程库,初始化计算图,生成数据集。接着获取矩阵A和b。

>>> import matplotlib.pyplot as plt
>>> import numpy as np

>>> import tensorflow as tf

>>> from tensorflow.python.framework import ops
>>> ops.reset_default_graph()

>>> sess=tf.Session()

>>> x_vals=np.linspace(0,10,100)

>>> y_vals=x_vals+np.random.normal(0,1,100)

>>> x_vals_column=np.transpose(np.matrix(x_vals))
>>> ones_column=np.transpose(np.matrix(np.repeat(1,100)))
>>> A=np.column_stack((x_vals_column,ones_column))
>>> b=np.transpose(np.matrix(y_vals))
>>> A_tensor=tf.constant(A)

>>> b_tensor=tf.constant(b)

2. 找到方阵的Cholesky矩阵分解。

注意:tensorflow的cholesky()函数仅仅返回矩阵分解的下三角矩阵,因为上三角矩阵是下三角矩阵的转置矩阵。

>>> tA_A=tf.matmul(tf.transpose(A_tensor),A_tensor)
>>> L=tf.cholesky(tA_A)
>>> tA_b=tf.matmul(tf.transpose(A_tensor),b)
>>> sol1=tf.matrix_solve(L,tA_b)

>>> sol2=tf.matrix_solve(tf.transpose(L),sol1)

3. 抽取系数

>>> solution_eval=sess.run(sol2)
>>> solution_eval
array([[1.01379067],
    [0.02290901]])
>>> slope=solution_eval[0][0]
>>> y_intercept=solution_eval[1][0]
>>> print('slope:'+str(slope))
slope:1.0137906744047482
>>> print('y_intercept:'+str(y_intercept))
y_intercept:0.022909011828880693
>>> best_fit=[]
>>> for i in x_vals:
...  best_fit.append(slope*i+y_intercept)
...
>>> plt.plot(x_vals,y_vals,'o',label='Data')
[<matplotlib.lines.Line2D object at 0x000001E0A58DD9B0>]
>>> plt.plot(x_vals,best_fit,'r-',label='Best fit line',linewidth=3)
[<matplotlib.lines.Line2D object at 0x000001E0A2DFAF98>]
>>> plt.legend(loc='upper left')
<matplotlib.legend.Legend object at 0x000001E0A58F03C8>

>>> plt.show()

使用tensorflow实现矩阵分解方式

以上这篇使用tensorflow实现矩阵分解方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现定制交互式命令行的方法
Jul 03 Python
python 网络爬虫初级实现代码
Feb 27 Python
python 巧用正则寻找字符串中的特定字符的位置方法
May 02 Python
Python加载带有注释的Json文件实例
May 23 Python
Python面向对象程序设计之继承与多继承用法分析
Jul 13 Python
python三方库之requests的快速上手
Mar 04 Python
将pip源更换到国内镜像的详细步骤
Apr 07 Python
Django框架orM与自定义SQL语句混合事务控制操作
Jun 27 Python
Django 用户认证组件使用详解
Jul 23 Python
python xlwt模块的使用解析
Apr 13 Python
python 解决微分方程的操作(数值解法)
May 26 Python
python语言中pandas字符串分割str.split()函数
Aug 05 Python
python匿名函数lambda原理及实例解析
Feb 07 #Python
Python用input输入列表的实例代码
Feb 07 #Python
详解Python 重学requests发起请求的基本方式
Feb 07 #Python
对tensorflow 中tile函数的使用详解
Feb 07 #Python
TensorFlow2.0矩阵与向量的加减乘实例
Feb 07 #Python
Tensorflow分批量读取数据教程
Feb 07 #Python
python统计字符的个数代码实例
Feb 07 #Python
You might like
如何分别全角和半角以避免乱码
2006/10/09 PHP
codeigniter数据库操作函数汇总
2014/06/12 PHP
php实现字符串首字母大写和单词首字母大写的方法
2015/03/14 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
JavaScript 序列化对象实现代码
2009/12/18 Javascript
JQuery的Alert消息框插件使用介绍
2010/10/09 Javascript
基于jquery的多功能软键盘插件
2012/07/25 Javascript
jQuery使用技巧简单汇总
2013/04/18 Javascript
javascript-表格排序(降序/反序)实现介绍(附图)
2013/05/30 Javascript
浅谈jQuery中replace()方法
2015/05/13 Javascript
jQuery实现点击后标记当前菜单位置(背景高亮菜单)效果
2015/08/22 Javascript
JavaScript实现复制文章自动添加版权
2016/08/02 Javascript
JavaScript之Vue.js【入门基础】
2016/12/06 Javascript
nodejs之get/post请求的几种方式小结
2017/07/26 NodeJs
es6学习之解构时应该注意的点
2017/08/29 Javascript
JS实现table表格固定表头且表头随横向滚动而滚动
2017/10/26 Javascript
JavaScript中发出HTTP请求最常用的方法
2018/07/12 Javascript
解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
2018/11/08 Javascript
Javascript实现时间倒计时功能
2018/11/17 Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
2019/08/23 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
[02:04]2014DOTA2国际邀请赛 DK一个时代的落幕
2014/07/21 DOTA
Python2.X/Python3.X中urllib库区别讲解
2017/12/19 Python
Python实现PS图像调整颜色梯度效果示例
2018/01/25 Python
Python的UTC时间转换讲解
2019/02/26 Python
pyqt5 QProgressBar清空进度条的实例
2019/06/21 Python
微信浏览器左上角返回按钮拦截功能
2017/11/21 HTML / CSS
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
调用HTML5的Canvas API绘制图形的快速入门指南
2016/06/17 HTML / CSS
求职者简历中的自我评价
2013/10/20 职场文书
党员公开承诺书
2014/03/25 职场文书
新兵入伍心得体会
2014/09/04 职场文书
2016年质量月活动总结报告
2016/04/05 职场文书
Python进度条的使用
2021/05/17 Python
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang