tensorflow 一元线性回归

在TF用简单回归做预测,当然sklearn效果比这个好,不过作为TF入门学习例子,从简单的线性回归开始,还是很有学习价值,后续会陆续补充RNN、LSTM的基础实现

import pandas as pd
import numpy as np
from sklearn.metrics import r2_score
import tensorflow as tf
import matplotlib.pyplot as plt

N = 200 # 样本点数目
x = np.linspace(-1, 1, N)
y = 2.0*x + np.random.standard_normal(x.shape)*0.3+0.5 # 生成线性数据
x = x.reshape([N, 1]) # 转换一下格式,准备feed进placeholder
y = y.reshape([N, 1])

plt.scatter(x, y)

# #拆分训练集和测试集
train_size=int(pd.DataFrame(y).shape[0]*0.7)
x_train=x[:train_size]
y_train=y[:train_size]
x_test=x[train_size:]
y_test=y[train_size:]

#placeholder预定义
X = tf.placeholder(tf.float32, [None, 1])
Y = tf.placeholder(tf.float32, [None, 1])
#定义W和b
W = tf.Variable(tf.zeros([1,1]))
b = tf.Variable(tf.zeros([1]))
#y
pre = W * X + b

#损失函数
cost = tf.reduce_mean(tf.square(Y - pre))
#对损失函数优化,基于梯度下降法的优化,步长为0.5
optimizer = tf.train.GradientDescentOptimizer(0.05).minimize(cost)

#with tf.Session() as sess:
sess = tf.Session()
sess.run(tf.global_variables_initializer())
for step in range(300):
    #训练
    sess.run(optimizer,feed_dict={X: x_train, Y: y_train})
    if step % 15 == 0:
        #损失函数变化
        c=sess.run(cost,feed_dict={X: x_train, Y: y_train})
        print(step,'cost: ',c)
        #预测
        pre_y=sess.run(pre,feed_dict={X: x_test})
        score = r2_score(y_test,pre_y)
        print(step,'R2 score:',score)

#预测可视化
plt.scatter(x_train,y_train,c='b')
plt.scatter(x_test,pre_y,c='r')

0 cost: 0.745463
0 R2 score: -19.5657523971
15 cost: 0.488306
15 R2 score: -13.6758403818
30 cost: 0.347037
30 R2 score: -8.73083495795
45 cost: 0.257677
45 R2 score: -5.40467927402
60 cost: 0.200747
60 R2 score: -3.25698613074
75 cost: 0.164465
75 R2 score: -1.88145954898
90 cost: 0.141343
90 R2 score: -1.00154679698
105 cost: 0.126608
105 R2 score: -0.438447405439
120 cost: 0.117216
120 R2 score: -0.0777652309292
135 cost: 0.111231
135 R2 score: 0.153543417251
150 cost: 0.107417
150 R2 score: 0.302110067872
165 cost: 0.104986
165 R2 score: 0.397712930572
180 cost: 0.103437
180 R2 score: 0.459375563605
195 cost: 0.10245
195 R2 score: 0.499259718765
210 cost: 0.101821
210 R2 score: 0.525146419176
225 cost: 0.10142
225 R2 score: 0.542017806084
240 cost: 0.101164
240 R2 score: 0.553068565254
255 cost: 0.101001
255 R2 score: 0.560349307308
270 cost: 0.100897
270 R2 score: 0.565179426649
285 cost: 0.100831
285 R2 score: 0.568409684423

这里写图片描述

猜你喜欢

转载自blog.csdn.net/k284213498/article/details/78722155