TensorFlow训练单特征和多特征的线性回归

线性回归

线性回归是很常见的一种回归,线性回归可以用来预测或者分类,主要解决线性问题。相关知识可看“相关阅读”。

主要思想

在TensorFlow中进行线性回归处理重点是将样本和样本特征矩阵化。

单特征线性回归

单特征回归模型为: y=wx+b

构建模型

X = tf.placeholder(tf.float32, [None, 1])
w = tf.Variable(tf.zeros([1, 1]))
b = tf.Variable(tf.zeros([1]))
y = tf.matmul(X, w) + b
Y = tf.placeholder(tf.float32, [None, 1])

构建成本函数

cost = tf.reduce_mean(tf.square(Y-y))

梯度下降最小化成本函数,梯度下降步长为0.01

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cost)

完整代码,迭代次数为10000

import tensorflow as tf

X = tf.placeholder(tf.float32, [None, 1])
w = tf.Variable(tf.zeros([1, 1]))
b = tf.Variable(tf.zeros([1]))
y = tf.matmul(X, w) + b
Y = tf.placeholder(tf.float32, [None, 1])

# 成本函数 sum(sqr(y_-y))/n
cost = tf.reduce_mean(tf.square(Y-y))

# 用梯度下降训练
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cost)

init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)

x_train = [[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]]
y_train = [[10],[11.5],[12],[13],[14.5],[15.5],[16.8],[17.3],[18],[18.7]]

for i in range(10000):
    sess.run(train_step, feed_dict={X: x_train, Y: y_train})
print("w:%f" % sess.run(w))
print("b:%f" % sess.run(b))

多特征线性回归

多特征回归模型为: y=(w1x1+w2x2+...+wnxn)+b ,写为 y=wx+b

y为m行1列矩阵,x为m行n列矩阵,w为n行1列矩阵。TensorFlow中用如下来表示模型。

构建模型

X = tf.placeholder(tf.float32, [None, n])
w = tf.Variable(tf.zeros([n, 1]))
b = tf.Variable(tf.zeros([1]))
y = tf.matmul(X, w) + b
Y = tf.placeholder(tf.float32, [None, 1])

构建成本函数

cost = tf.reduce_mean(tf.square(Y-y))

梯度下降最小化成本函数,梯度下降步长为0.01

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cost)

完整代码,迭代次数为10000

import tensorflow as tf

X = tf.placeholder(tf.float32, [None, 2])
w = tf.Variable(tf.zeros([2, 1]))
b = tf.Variable(tf.zeros([1]))
y = tf.matmul(X, w) + b
Y = tf.placeholder(tf.float32, [None, 1])

# 成本函数 sum(sqr(y_-y))/n
cost = tf.reduce_mean(tf.square(Y-y))

# 用梯度下降训练
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cost)

init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)

x_train = [[1, 2], [2, 1], [2, 3], [3, 5], [1, 3], [4, 2], [7, 3], [4, 5], [11, 3], [8, 7]]
y_train = [[7], [8], [10], [14], [8], [13], [20], [16], [28], [26]]

for i in range(10000):
    sess.run(train_step, feed_dict={X: x_train, Y: y_train})
print("w0:%f" % sess.run(w[0]))
print("w1:%f" % sess.run(w[1]))
print("b:%f" % sess.run(b))

总结

在线性回归中,TensorFlow可以很方便地利用矩阵进行多特征的样本训练。

相关阅读


========广告时间========

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。

为什么写《Tomcat内核设计剖析》

=========================
欢迎关注:

这里写图片描述

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超人汪小建(seaboat)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值