TensorFlow通过Cholesky矩阵分解实现线性回归
这里将用TensorFlow实现矩阵分解,对于一般的线性回归算法,求解Ax=b,则x=(A'A)^(-1)A'b,然而该方法在大部分情况下是低效率的,特别是当矩阵非常大时效率更低。另一种方式则是通过矩阵分解来提高效率。这里采用TensorFlow内建的Cholesky矩阵分解法实现线性回归。
Cholesky可以将一个矩阵分解为上三角矩阵和下三角矩阵,即A = LL'
这里,要求解Ax=b ==>A'Ax=A'b,我们将A'A进行Cholesky分解.即A'A = LL'因此上式可以变为
LL'x = A'b
因此我们可以分两步进行求解X
(1)Ly = A'b求出y
(2)y = L'x
下面我们具体实现:
首先引入相应的库并创建计算图会话,声明占位符和变量并构建数据
#A通过Cholesky分解为LL'因此Ax = b ==>A'Ax = A'b ==>LL'x = A'b ==>Ly = A'b ,L'x = y(L与L'矩阵为上三角与下三角矩阵,且互为转置)
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tfsess = tf.Session()x_vals = np.linspace(0,10,100)
y_vals = x_vals + np.random.normal(0,1,100)x_vals_colum = np.transpose(np.matrix(x_vals))
ones_column = np.transpose(np.matrix(np.ones([1,100])))
A = np.column_stack((x_vals_colum,ones_column)) #之所以加1矩阵,是为了后面可以使用矩阵计算
b = np.transpose(np.matrix(y_vals))#将A和b转化为张量
A_tensor = tf.constant(A)
b_tensor = tf.constant(b)
接下来通过tf.cholesky函数计算L,由于该函数返回的是矩阵分解的下三角矩阵,上三角矩阵为该矩阵的转置
tf.matrix_solve()函数返回Ax=b的解
#Ax = b ==> ATAx = ATb ==> LL'x = A'b ==> Ly = A'b , L'x = y
tA_A = tf.matmul(tf.transpose(A_tensor),A_tensor)#ATA
L = tf.cholesky(tA_A) #返回下三角矩阵
tA_b = tf.matmul(tf.transpose(A_tensor),b) #ATb
sol1 = tf.matrix_solve(L,tA_b) #Ly = A'b
sol2 = tf.matrix_solve(tf.transpose(L),sol1) #L'x = y
抽取系数并绘制图像
#抽取系数solution_eval = sess.run(sol2)
#从解中抽取系数、斜率和y截距
slope = solution_eval[0][0]
y_intercept = solution_eval[1][0]
print('slope: '+ str(slope))
print('y_intercept: ' + str(y_intercept))best_fit = []
for i in x_vals:best_fit.append(slope*i + y_intercept)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x_vals,y_vals,'o',label = 'Data')
ax.plot(x_vals,best_fit,'r-',label = 'Best fit line')
handles , labels = ax.get_legend_handles_labels()
ax.legend(handles,labels)plt.show()
TensorFlow通过Cholesky矩阵分解实现线性回归相关推荐
- 数学之美:cholesky矩阵分解
Cholesky分解法又叫平方根法,是求解对称正定线性方程组最常用的方法之一.对于一般矩阵,为了消除LU分 解的局限性和误差的过分积累,采用了选主元的方法,但对于对称正定矩阵而言,选主元是不必要的. ...
- Tensorflow快餐教程(6) - 矩阵分解
摘要: 特征分解,奇异值分解,Moore-Penrose广义逆 矩阵分解 特征向量和特征值 我们在<线性代数>课学过方阵的特征向量和特征值. 定义:设A∈Fn×nA∈Fn×n是n阶方阵.如 ...
- [Math]常见矩阵分解及复杂度 Cholesky QR LU
本篇尝试介绍几个常见的矩阵分解及其数值方法,探究其算法复杂度及不稳定性来源,能够让我们更好的理解工具,使用工具.常见的矩阵分解可以在维基中找到 文章目录 Cholesky 定义 数值方法 数值方法的数 ...
- Cholesky和LU矩阵分解
1.Cholesky分解 在线性代数中,矩阵分解是将矩阵分解为矩阵的乘积.有许多不同的矩阵分解.其中之一就是Cholesky分解. Cholesky分解是将Hermitian正定矩阵分解为下三角矩阵及 ...
- 矩阵分解——8.2 乔里斯基(Cholesky)分解
8.2 乔里斯基(Cholesky)分解
- tf 如何进行svd_Tensorflow快餐教程(6) - 矩阵分解
摘要: 特征分解,奇异值分解,Moore-Penrose广义逆 矩阵分解 特征向量和特征值 我们在<线性代数>课学过方阵的特征向量和特征值. 定义:设A∈Fn×n是n阶方阵.如果存在非零向 ...
- 矩阵奇异值分解特征值分解_推荐系统中的奇异值分解与矩阵分解
矩阵奇异值分解特征值分解 Recently, after watching the Recommender Systems class of Prof. Andrew Ng's Machine Lea ...
- 【MATLAB】矩阵运算之矩阵分解
矩阵分解:把一个矩阵分解成为矩阵连乘的形式. 矩阵的分解函数 chol Cholesky分解 cholinc 稀疏矩阵的不完全Cholesky分解 lu 矩阵LU分解 luinc 稀疏矩阵的不完全LU ...
- 一文帮你梳理清楚:奇异值分解和矩阵分解 | 技术头条
作者 | K. Delphino 译者 | Linstancy 编辑 | Rachel 出品 | AI科技大本营(id:rgznai100) [导读]在推荐系统的相关研究中,我们常常用到两个相关概念: ...
最新文章
- 职业生涯发展技巧20则
- 怎么做手机的上下滑动_手机视频恢复怎么做?删除时间较久的找回方法
- [SpringSecurity]基本原理_两个重要的接口_UserDetailsService接口和PasswordEncoder接口
- unity 主线程调用_Kafka的Producer的调用序列图
- python基础网易_看看你的Python基础怎么样?
- Nginx 从入门到放弃(五)
- mysql会话杀不掉_SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析
- 美联储加息已成“政治正确” 美元涨势难以阻挡?
- 开发常用词汇表(带音标)
- 通软终端安全管理系统V6 卸载脚本
- JAVA Signal Handing
- python在多继承中子类调用某个父类的同名方法之 super讲解(mro机制)***
- 循环神经网络RNN与LSTM
- win10家庭中文正式版输入法切换快捷键设置为Ctrl+Shift
- IOS开发:一个iOS开发者的修真之路
- 前端歌谣的刷题之路-第八十五题-列表动态渲染
- kotlin-stdlib_使用Kotlin stdlib使您的生活更轻松
- 中移动铁腕治理 免费WAP网站遭遇灭顶之灾
- jsch.addIdentity invalid key报错问题
- BAT全球扩张AI路线图 | 百度早于谷歌,腾讯投资最多
热门文章
- 单片机设计:基于stm32智能语音识别蓝牙音响(ld3320语音识别模块+mp3模块+喇叭+点阵屏+OLED+蓝牙+手机app)
- FPGA和CPLD的区别
- ABCNet v2: Adaptive Bezier-Curve Network forReal-time End-to-end Text Spotting
- 微商必备6款软件!十分好用
- String类型转json格式
- 什么是地狱回调?解决回调地狱的两种方法
- C#字节数组(byte[])和字符串相互转换
- 芝麻信用免押金成趋势 报告称租赁经济有望突破10万亿元
- IOS-APP自动化打包上传蒲公英Shell版
- python-数据库-4