在开始给大家讲这个东西之前呢,我先说一下我在这个程序中遇到的一个小问题。我电脑配置是 Ubuntu 14.04 python版本是2.7.0 都是装系统时候自带的那些,好多东西是没有包含进来的,都需要自己安装,像numpy、matplotlib。对这次重点要说的就是这个matplotlib,安装这个真是费了我好大心思啊,我按照往常的惯例直接使用sudo pip install matplotlib
去安装,也提示成功,但是调用的时候还是会报错,报import错误什么的,我就一直特别郁闷这个是怎么回事了,还好有强大的度娘啊,我就百度一下这个import的错误是什么,发现应该是链接的问题,好多都是说什么libpng.14.so错误什么的,实验验证,都是扯淡的,根本不是一个原因,这个就是matplotpib这个安装的问题,经过多次测试,发现,安装位置出错了,使用sudo apt-get install matplotlib
完成,运行成功~
总结了一下原因,大概就是因为pip安装后目标文件是在python这边,但是直接使用apt-get安装的话直接系统里面直接调用,个人理解,没有去抠这个细节的东西,有哪位大神能解释一下这个原理的话欢饮不吝赐教~~~~
一、线性回归
线性回归,是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。其表达形式为y = w’x+e,e为误差服从均值为0的正态分布。
说白了就是求数据之间关系的一种形式。回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。
二、用途
线性回归有很多实际用途。分为以下两大类:
1、如果目标是预测或者映射,线性回归可以用来对观测数据集Y的值和X的值拟合出一个预测模型。当完成这样一个模型以后,对于任意新增的X值,在没有给定与它相配对的Y的情况下,可以用这个拟合过的模型预测出一个Y值。根据现在,预测未来。虽然,线性回归和方差都是需要因变量为连续变量,自变量为分类变量,自变量可以有一个或者多个,但是,线性回归增加另一个功能,也就是凭什么预测未来,就是凭回归方程。这个回归方程的因变量是一个未知数,也是一个估计数,虽然估计,但是,只要有规律,就能预测未来。
2、给定一个变量y和一些变量X1,…,Xp,这些变量有可能与y相关,线性回归分析可以用来量化y与Xj之间相关性的强度,评估出与y不相关的Xj,并识别出哪些Xj的子集包含了关于y的冗余信息。
简单示意数据
以一简单数据组来说明什么是线性回归。假设有一组数据型态为 y=y(x),其中
x={0, 1, 2, 3, 4, 5}, y={0, 20, 60, 68, 77, 110}
如果要以一个最简单的方程式来近似这组数据,则用一阶的线性方程式最为适合。先将这组数据在坐标轴中绘图如下
图中的斜线是随意假设一阶线性方程式 y=20x,用以代表这些数据的一个方程式。
这个大概就是线性回归的一个概念。
三、代码
import tensorflow as tf
import numpy
import matplotlib.pyplot as plt
rng = numpy.random
# 参数
learning_rate = 0.01
training_epochs = 1000
display_step = 50
# 训练数据
train_X = numpy.asarray([3.3,4.4,5.5,6.71,6.93,4.168,9.779,6.182,7.59,2.167,
7.042,10.791,5.313,7.997,5.654,9.27,3.1])
train_Y = numpy.asarray([1.7,2.76,2.09,3.19,1.694,1.573,3.366,2.596,2.53,1.221,
2.827,3.465,1.65,2.904,2.42,2.94,1.3])
n_samples = train_X.shape[0]
X = tf.placeholder("float")
Y = tf.placeholder("float")
# 模型参数
W = tf.Variable(rng.randn(), name="weight")
b = tf.Variable(rng.randn(), name="bias")
# 构建线性模型
pred = tf.add(tf.mul(X, W), b)
# 求误差
cost = tf.reduce_sum(tf.pow(pred-Y, 2))/(2*n_samples)
# 使用梯度下降拟合数据
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
# 初始化所有变量
init = tf.initialize_all_variables()
# 开始
with tf.Session() as sess:
sess.run(init)
# Fit all training data
for epoch in range(training_epochs):
for (x, y) in zip(train_X, train_Y):
sess.run(optimizer, feed_dict={X: x, Y: y})
#Display logs per epoch step
if (epoch+1) % display_step == 0:
c = sess.run(cost, feed_dict={X: train_X, Y:train_Y})
print "Epoch:", '%04d' % (epoch+1), "cost=", "{:.9f}".format(c), \
"W=", sess.run(W), "b=", sess.run(b)
print "Optimization Finished!"
training_cost = sess.run(cost, feed_dict={X: train_X, Y: train_Y})
print "Training cost=", training_cost, "W=", sess.run(W), "b=", sess.run(b), '\n'
#Graphic display
plt.plot(train_X, train_Y, 'ro', label='Original data')
plt.plot(train_X, sess.run(W) * train_X + sess.run(b), label='Fitted line')
plt.legend()
plt.show()