首页 > 程序开发 > 软件开发 > 其他 >

Tensorflow回归分析

2017-02-03

Tensorflow回归分析:用tensorflow来做回归分析,基于梯度下降法,这里以一元回归分析为例子来说明如何用tensorflow实现回归分析。

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/回归

相关文章
最新文章
热点推荐