使用python jupyter notebook
导包
import warnings
warnings.filterwarnings('ignore')
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.linear_model import LinearRegression
import tensorflow as tf
X=np.linspace(2,12,50).reshape(-1,1)
w=np.random.randint(1,6,size=1)[0]
b=np.random.randint(-5,5,size=1)[0]
y=X*w+b+np.random.randn(50,1)*0.7 #使其变得有波动
plt.scatter(X,y)
先使用线性回归拟合
linear=LinearRegression()
linear.fit(X,y)
print(linear.coef_,linear.intercept_)
print(w,b)
#[[3.02827264]] [-0.19877652]
#3 0
TensorFlow完成线性回归
1.定义占位符 变量
#线性回归理论基础是最小二乘法
X_train=tf.placeholder(dtype=tf.float32,shape=[50,1],name='data')
y_train=tf.placeholder(dtype=tf.float32,shape=[50,1],name='target')
w_=tf.Variable(initial_value=tf.random_normal(shape=[1,1]),name='weight') #变量
b_=tf.Variable(initial_value=tf.random_normal(shape=[1]),name='bias')
2.构造方程(线性方程,矩阵乘法)
#构建方程f(x)=Xw+b
#构建的方程 就是预测的结果
y_pred=tf.matmul(X_train,w_)+b
#shape=(50,1)
y_pred
#<tf.Tensor 'add_1:0' shape=(50, 1) dtype=float32>
3.最小二乘法(平均最小二乘法)
#二乘法(y_pred-y_train)**2 返回的结果是列表,没有办法比较大小
#平均最小二乘法 变成数值了 求mean
#平均 每一个样本都考虑进去了
cost=tf.reduce_mean(tf.pow(y_pred-y_train,2))
cost
#<tf.Tensor 'Mean_1:0' shape=() dtype=float32> 是一个数
4.梯度下降(tf,提供了方法)
#优化 cost损失函数 越小越好
opt=tf.train.GradientDescentOptimizer(0.01).minimize(cost) #梯度下降优化 让cost最小 最小化
opt
#<tf.Operation 'GradientDescent_1' type=NoOp>
5.会话进行训练(for循环)
with tf.Session() as sess:
# 变量,初始化
sess.run(tf.global_variables_initializer())
for i in range(1000):
opt_,cost_ = sess.run([opt,cost],feed_dict = {y_train:y,X_train:X})
if i %50 == 0:
print('执行次数是:%d。损失函数值是:%0.4f'%(i+1,cost_))
# for循环结束,训练结束了
# 获取斜率和截距
W,B = sess.run([w_,b_])
print('经过100次训练,TensorFlow返回线性方程的斜率是:%0.3f。截距是:%0.3f'%(W,B))
6.可视化
plt.scatter(X,y)
x = np.linspace(0,14,100)
plt.plot(x,W[0]*x + B,color = 'green')
来源:CSDN
作者:shunjianxaioshi
链接:https://blog.csdn.net/shunjianxaioshi/article/details/103468407