这里将用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矩阵分解实现线性回归相关推荐

  1. 数学之美:cholesky矩阵分解

    Cholesky分解法又叫平方根法,是求解对称正定线性方程组最常用的方法之一.对于一般矩阵,为了消除LU分 解的局限性和误差的过分积累,采用了选主元的方法,但对于对称正定矩阵而言,选主元是不必要的. ...

  2. Tensorflow快餐教程(6) - 矩阵分解

    摘要: 特征分解,奇异值分解,Moore-Penrose广义逆 矩阵分解 特征向量和特征值 我们在<线性代数>课学过方阵的特征向量和特征值. 定义:设A∈Fn×nA∈Fn×n是n阶方阵.如 ...

  3. [Math]常见矩阵分解及复杂度 Cholesky QR LU

    本篇尝试介绍几个常见的矩阵分解及其数值方法,探究其算法复杂度及不稳定性来源,能够让我们更好的理解工具,使用工具.常见的矩阵分解可以在维基中找到 文章目录 Cholesky 定义 数值方法 数值方法的数 ...

  4. Cholesky和LU矩阵分解

    1.Cholesky分解 在线性代数中,矩阵分解是将矩阵分解为矩阵的乘积.有许多不同的矩阵分解.其中之一就是Cholesky分解. Cholesky分解是将Hermitian正定矩阵分解为下三角矩阵及 ...

  5. 矩阵分解——8.2 乔里斯基(Cholesky)分解

    8.2 乔里斯基(Cholesky)分解

  6. tf 如何进行svd_Tensorflow快餐教程(6) - 矩阵分解

    摘要: 特征分解,奇异值分解,Moore-Penrose广义逆 矩阵分解 特征向量和特征值 我们在<线性代数>课学过方阵的特征向量和特征值. 定义:设A∈Fn×n是n阶方阵.如果存在非零向 ...

  7. 矩阵奇异值分解特征值分解_推荐系统中的奇异值分解与矩阵分解

    矩阵奇异值分解特征值分解 Recently, after watching the Recommender Systems class of Prof. Andrew Ng's Machine Lea ...

  8. 【MATLAB】矩阵运算之矩阵分解

    矩阵分解:把一个矩阵分解成为矩阵连乘的形式. 矩阵的分解函数 chol Cholesky分解 cholinc 稀疏矩阵的不完全Cholesky分解 lu 矩阵LU分解 luinc 稀疏矩阵的不完全LU ...

  9. 一文帮你梳理清楚:奇异值分解和矩阵分解 | 技术头条

    作者 | K. Delphino 译者 | Linstancy 编辑 | Rachel 出品 | AI科技大本营(id:rgznai100) [导读]在推荐系统的相关研究中,我们常常用到两个相关概念: ...

最新文章

  1. 职业生涯发展技巧20则
  2. 怎么做手机的上下滑动_手机视频恢复怎么做?删除时间较久的找回方法
  3. [SpringSecurity]基本原理_两个重要的接口_UserDetailsService接口和PasswordEncoder接口
  4. unity 主线程调用_Kafka的Producer的调用序列图
  5. python基础网易_看看你的Python基础怎么样?
  6. Nginx 从入门到放弃(五)
  7. mysql会话杀不掉_SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析
  8. 美联储加息已成“政治正确” 美元涨势难以阻挡?
  9. 开发常用词汇表(带音标)
  10. 通软终端安全管理系统V6 卸载脚本
  11. JAVA Signal Handing
  12. python在多继承中子类调用某个父类的同名方法之 super讲解(mro机制)***
  13. 循环神经网络RNN与LSTM
  14. win10家庭中文正式版输入法切换快捷键设置为Ctrl+Shift
  15. IOS开发:一个iOS开发者的修真之路
  16. 前端歌谣的刷题之路-第八十五题-列表动态渲染
  17. kotlin-stdlib_使用Kotlin stdlib使您的生活更轻松
  18. 中移动铁腕治理 免费WAP网站遭遇灭顶之灾
  19. jsch.addIdentity invalid key报错问题
  20. BAT全球扩张AI路线图 | 百度早于谷歌,腾讯投资最多

热门文章

  1. 单片机设计:基于stm32智能语音识别蓝牙音响(ld3320语音识别模块+mp3模块+喇叭+点阵屏+OLED+蓝牙+手机app)
  2. FPGA和CPLD的区别
  3. ABCNet v2: Adaptive Bezier-Curve Network forReal-time End-to-end Text Spotting
  4. 微商必备6款软件!十分好用
  5. String类型转json格式
  6. 什么是地狱回调?解决回调地狱的两种方法
  7. C#字节数组(byte[])和字符串相互转换
  8. 芝麻信用免押金成趋势 报告称租赁经济有望突破10万亿元
  9. IOS-APP自动化打包上传蒲公英Shell版
  10. python-数据库-4