import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
sess=tf.Session()
x_vals=np.linspace(0,10,100)
y_vals=x_vals+np.random.normal(0,1,100)
#装换成矩阵 reshape成 (None,1)
x_vals_column=np.transpose(np.matrix(x_vals))
#用来合并 100个元素 (100,2)*(2,1)=(100,1) ==> 若为一个元素 (1,2)*(2,1)=(1,1) 符合运算形式 [2,1]*[[1],[2]]=[4] 即为 kx+b=y =>(x,1)*(k,b)=y==>A*x=b
ones_column=np.transpose(np.matrix(np.repeat(1,100)))
#tuple 参数
A=np.column_stack((x_vals_column,ones_column))
b=np.transpose(np.matrix(y_vals))
#reshape
A_tensor=tf.constant(A)
b_tensor=tf.constant(b)
#(2,2) 简化运算 *转置矩阵 降维
#A*x=b ==> A^T*A*x=A^t*b ==> tA_A * x = A^T*b
tA_A=tf.matmul(tf.transpose(A_tensor),A_tensor)
#A*x=b => cholseky() 分解矩阵 tA_A=LL' ==> LL'* x=A^T*b
L=tf.cholesky(tA_A)
#得到A^t*b
tA_b=tf.matmul(tf.transpose(A_tensor),b_tensor)
# L'* x
solve1=tf.matrix_solve(L,tA_b)
#x
solve2=tf.matrix_solve(tf.transpose(L),solve1)
solution_eval=sess.run(solve2)
#获取最终结果
slope=solution_eval[0][0]
y_intercept=solution_eval[1][0]
print(str(slope))
print(str(y_intercept))
best_fit=[]
for i in x_vals:
best_fit.append(slope*i+y_intercept)
plt.plot(x_vals,y_vals,'o')
plt.plot(x_vals,best_fit,'r-')
plt.show()
![]()