Tensorflow | 回归分析

用tensorflow来做回归分析,基于梯度下降法

这里以一元回归分析为例子来说明如何用tensorflow实现回归分析。

1、产生数据 采用随机的方式来产生。

先基于均值为0,方差为0.9的正态分布产生随机数X,再通过线性变换产生Y,再添加一个均值为0,方差为0.5的噪声。这样便得到数据X和Y。

import numpy as np

#产生100条数据
num_puntos = 100
conjunto_puntos = []
for i in range(num_puntos):
    x1= np.random.normal(0.0, 0.9)
    y1= x1 * 0.1 + 0.3 + np.random.normal(0.0, 0.05)
    conjunto_puntos.append([x1, y1])


x_data = [v[0] for v in conjunto_puntos]
y_data = [v[1] for v in conjunto_puntos]

画出散点图

import matplotlib.pyplot as plt

#Graphic display
plt.plot(x_data, y_data, 'ro')
plt.legend()
plt.show()

定义模型

import tensorflow as tf

#定义W和b,这里的W是一个数,取值范围为-1到1,b为一个数
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b = tf.Variable(tf.zeros([1]))
#模型
y = W * x_data + b

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

#初始化
init = tf.global_variables_initializer()

#启动图计算
sess = tf.Session()
sess.run(init)

迭代计算,迭代100步,每10次输出一个结果

for step in range(100):
    sess.run(train)
    if step % 10 == 0:
        print(step, sess.run(W), sess.run(b))

结果: 0 [ 0.13928029] [ 0.30465567] 10 [ 0.10003368] [ 0.29671374] 20 [ 0.10003368] [ 0.29671374] 30 [ 0.10003368] [ 0.29671374] 40 [ 0.10003368] [ 0.29671374] 50 [ 0.10003368] [ 0.29671374] 60 [ 0.10003368] [ 0.29671374] 70 [ 0.10003368] [ 0.29671374] 80 [ 0.10003368] [ 0.29671374] 90 [ 0.10003368] [ 0.29671374]

画出散点图和回归线

plt.plot(x_data, y_data, 'ro')
plt.plot(x_data, sess.run(W) * x_data + sess.run(b))
plt.legend()
plt.show()

完整的代码见github: https://github.com/zhangdm/machine-learning-summary/tree/master/tensorflow/回归

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券