tensorflow学习笔记(3)|线性回归

有关Linear regression的背景知识

Linear regression 线性回归,我们先来看官方的解释:

线性回归(Linear regression)是一种以线性模型来建模自变量与因变量关系的方法. 通常来说, 当自变量只有一个的情况被称为简单线性回归, 自变量大于一个的情况被称为多重线性回归。

其实这个东西我们在上初中的时候就接触过,就是一元一次方程啊。

                                    Y = a X + b

所谓的简单线性回归也不过是一元一次方程,多重线性回归就是多元一次方程

                                  Y = a X + b Z + c

而所谓编程实现的线性回归的过程,就是寻找最优解a,b,c的过程。

然而,科学严肃的解释是这样的:

在线性回归模型中, 模型的未知参数由数据中估计得到. 最常用的拟合方法是最小二乘法, 但是也有许多其他的拟合方法. 因此需要甄别的是, 使用最小二乘法求解并不是构成线性回归模型的必要条件.

线性回归是应用最广泛的回归分析之一, 主要可以用于以下两类:

  • 预测: 线性回归可以在拟合到已知数据集后用于预测自变量所对应的因变量。
  • 解释: 线性回归可以用于量化因变量与自变量之间关系的强度。

利用tensorflow中的API实现线性回归

1.定义参数

learning_rate = 0.01  # 学习率
training_epochs = 1000  #学习次数
display_step = 50   #隔50次检查一次精确度

2.给出训练数据

# Training Data
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]

其中,shape()函数的作用是求已知数组的维度,如果是一维数组,给出的是一个具体的数,如果是多维的,就是一个list.返回的总是一个列表,一位数组返回的是只有一个值的列表
3.初始化图像,并命名

# tf Graph Input  //线性模型参数初始化
X = tf.placeholder("float")
Y = tf.placeholder("float")

# Set model weights
W = tf.Variable(rng.randn(), name="weight")
b = tf.Variable(rng.randn(), name="bias")

其实就是将我们要在后面需要拟合的变量W和b命名和初始化。
4.定义一元一次方程的实现逻辑 ,也就是定义线性模型

# Construct a linear model
pred = tf.add(tf.multiply(X, W), b)

类似于 : Y = a X + b
5.定义代价函数,对于代价函数的理解,就是实际拟合的数值和实际值之间的误差的加和。代价可以看做预测值与真实值之间的距离。

# Mean squared error  定义均方差代价函数 
cost = tf.reduce_sum(tf.pow(pred-Y, 2))/(2*n_samples)

6.定义优化器,将学习率带入其中,并且告诉学习的目的是最小化cost值,并定义初始化函数。

#优化器 ,使用随机梯度下降法进行优化
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
# Initialize the variables (i.e. assign their default value)
#定义初始化
init = tf.global_variables_initializer()

7.开始训练:

# Start training
with tf.Session() as sess:

    # Run the initializer
    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()

对应输出的内容是:

Epoch: 0050 cost= 0.195095107 W= 0.441748 b= -0.580876

Epoch: 0100 cost= 0.181448311 W= 0.430319 b= -0.498661

Epoch: 0150 cost= 0.169377610 W= 0.419571 b= -0.421336

Epoch: 0200 cost= 0.158700854 W= 0.409461 b= -0.348611

Epoch: 0250 cost= 0.149257123 W= 0.399953 b= -0.28021

Epoch: 0300 cost= 0.140904188 W= 0.391011 b= -0.215878

Epoch: 0350 cost= 0.133515999 W= 0.3826 b= -0.155372

Epoch: 0400 cost= 0.126981199 W= 0.374689 b= -0.0984639

Epoch: 0450 cost= 0.121201262 W= 0.367249 b= -0.0449408

Epoch: 0500 cost= 0.116088994 W= 0.360252 b= 0.00539905

Epoch: 0550 cost= 0.111567356 W= 0.35367 b= 0.052745

Epoch: 0600 cost= 0.107568085 W= 0.34748 b= 0.0972751

Epoch: 0650 cost= 0.104030922 W= 0.341659 b= 0.139157

Epoch: 0700 cost= 0.100902475 W= 0.336183 b= 0.178547

Epoch: 0750 cost= 0.098135538 W= 0.331033 b= 0.215595

Epoch: 0800 cost= 0.095688373 W= 0.32619 b= 0.25044

Epoch: 0850 cost= 0.093524046 W= 0.321634 b= 0.283212

Epoch: 0900 cost= 0.091609895 W= 0.317349 b= 0.314035

Epoch: 0950 cost= 0.089917004 W= 0.31332 b= 0.343025

Epoch: 1000 cost= 0.088419855 W= 0.30953 b= 0.370291

Optimization Finished!

Training cost= 0.0884199 W= 0.30953 b= 0.370291 

当tensorflow里面的session调用run()方法的时候,才是真正初始化的时候。
上诉代码的逻辑是:初始化-->遍历数据集-->每隔一个step输出一次-->描点划线
8.测试机开始测试:

# Testing example, as requested (Issue #2)
    test_X = numpy.asarray([6.83, 4.668, 8.9, 7.91, 5.7, 8.7, 3.1, 2.1])
    test_Y = numpy.asarray([1.84, 2.273, 3.2, 2.831, 2.92, 3.24, 1.35, 1.03])

    print("Testing... (Mean square loss Comparison)")
    testing_cost = sess.run(
        tf.reduce_sum(tf.pow(pred - Y, 2)) / (2 * test_X.shape[0]),
        feed_dict={X: test_X, Y: test_Y})  # same function as cost above
    print("Testing cost=", testing_cost)
    print("Absolute mean square loss difference:", abs(
        training_cost - testing_cost))

    plt.plot(test_X, test_Y, 'bo', label='Testing data')
    plt.plot(train_X, sess.run(W) * train_X + sess.run(b), label='Fitted line')
    plt.legend()
    plt.show()

对应输出的内容是:


上诉就是一个典型的线性回归实现的过程。

同系列总结:
tensorflow学习笔记(1)|win10系统pip安装tensorflow
tensorflow学习笔记(2)|基本函数入门

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容