线性回归详解及Tensorflow实战

线性回归详解及Tensorflow实战

0x01 线性回归概述

线性回归()是一种统计分析方法,它利用数理统计中的回归分析来确定两个或多个变量之间的定量关系。

其表达形式为y = w’x+e,e为误差服从均值为0的正态分布

线性回归详解及Tensorflow实战

线性回归可能是统计学和机器学习中最著名和最容易理解的算法之一

在统计学中,线性回归是一种线性方法,用于对标量响应与一个或多个解释变量(也称为因变量和自变量)之间的关系进行建模

一个解释变量的情况称为简单线性回归(simple linear regression)
对于多个,这个过程称为多元线性回归(multiple linear regression)

与所有形式的回归分析一样,线性回归关注给定预测变量值的响应的条件概率分布,而不是所有这些变量的联合概率分布,后者是多元分析的领域

线性回归算法开发

机器学习,更具体地说是预测建模领域,主要关注最小化模型的错误,或以牺牲可解释性为代价实现最准确的预测

在应用机器学习中,我们将借鉴来自许多不同领域的重用算法。线性回归是在统计学中发展起来的,作为理解输入和输出数值变量之间关系的模型被研究,但是被机器学习借用,既是一种统计算法,也是一种机器学习算法

Francis Galton

弗朗西斯·高尔顿爵士是一位影响科学、心理、地理和气象领域的英国人。他拥有200的智商,是畅销书作家、手指识别的发明者、统计学家、社会学家、气象学家、地质学家、探险家、差异心理学和遗传学的创始人。他最著名的研究是人类选择性交配,并将其称为优生学。根据他对遗传特征的研究,他还创造了“先天与后天”这个术语

线性回归详解及Tensorflow实战

“回归”是由Francis Galton在研究人类遗传问题时提出来的
在他研究父母身高和子女身高时发现“即使父母的身高都‘极端’高,其子女不见得会比父母高,而是有“衰退”(regression)(也称作“回归”)至平均身高的倾向”具体说明一下:高尔顿当时拟合了父母平均身高 x 和 子女平均身高 y 的经验方程:

线性回归详解及Tensorflow实战

y:为子女平均身高,这就是我们要预测的真实事物,称为标签
x:为父母平均身高,是用于述数据的输入变量,称为特征
(这种通过标签进行学习的方法称为监督学习)

0x02 线性回归分类

线性回归有很多实际用途,大多数应用分为两大类:

  • 如果目标是预测或减少误差,可以使用线性回归来预测模型与观察到的响应值和解释变量数据集之间的关系
    (建立模型后,如果收集到解释变量的附加值而没有对应的响应值,则可以使用拟合模型来预测响应)
  • 如果目标是解释可归因于解释变量变化的响应变量的变化,则可以应用线性回归分析来量化响应和解释变量之间的关系强度
    (特别是确定某些解释变量是否可能与响应完全不线性相关,或者确定解释变量的哪些子集可能包含有关响应的冗余信息)

原因是线性回归已经存在了很长时间(超过200年)。人们从各个可能的角度对它进行了研究
线性回归是一种线性模型,例如假设输入变量(x)与单一输出变量(y)之间存在线性关系的模型

可以使用不同的技术从数据中准备或训练线性回归方程,其中最常见的是普通最小二乘,通过这种方法准备的模型通常被称为普通最小二乘线性回归或最小二乘回归

0x03 Tensorflow 实战

首先我们知道线性回归的方程:

线性回归详解及Tensorflow实战

最常见的例子:房价预测
比如房价的影响因素:地段、大小、环境、楼层……
房价可以通过不同的因素来预测

随机值分布

调用matplotlib.pyplot的绘图函数plot()进行绘图
加载matplotlib.pyplot,numpy,tensorflow

并设置随机种子

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf

np.random.seed(2)

之后生成等差数列,设置噪声,在x值的上下

x = np.linspace(-1,1,100)
y = 2*x + 1.0 + np.random.randn(*x.shape)*0.4

线性回归详解及Tensorflow实战

利用matplotlib画出生成结果

plt.scatter(x, y)
plt.plot(x,2*x+1.0,color='red', linewidth=4)

线性回归详解及Tensorflow实战

线:实际
要点:预测

作出预测

之后建立模型

x2 = tf.placeholder("float",name="x2")
y2 = tf.placeholder("float",name="y2")

def model(x,w,b):
    return tf.multiply(x,w)+b
w = tf.Variable(1.0, name="w")
b = tf.Variable(0.0, name="b")
pred = model(x2,w,b)

线性回归详解及Tensorflow实战

线性回归详解及Tensorflow实战

定义训练时间和学习率
使用均方误差作为损失函数

train_epochs = 10
learning_rate = 0.05

loss_function = tf.reduce_mean(tf.square(y-pred))
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function)

线性回归详解及Tensorflow实战

索赔会议

sess = tf.Session()
init = tf.global_variables_initializer()

sess.run(init)

线性回归详解及Tensorflow实战

for epoch in range(train_epochs):
    for x3,y3 in zip(x,y):
        _,loss = sess.run([optimizer,loss_function],feed_dict={x2:x3, y2:y3})
    btemp = b.eval(session=sess)
    wtemp = w.eval(session=sess)
    plt.plot(x,wtemp*x+btemp)

线性回归详解及Tensorflow实战

可能会报这种错误,因为尺寸不同,可以修改

线性回归详解及Tensorflow实战

print(sess.run(w))
print(sess.run(b))
plt.scatter(x,y,label='data')
plt.plot(x,x*sess.run(w)+sess.run(b),label='line',color='red',linewidth='4')
plt.legend(loc=2)

线性回归详解及Tensorflow实战

线性回归详解及Tensorflow实战

Reference
https://machinelearningmastery.com/linear-regression-for-machine-learning/
https://www.meiwen.com.cn/subject/uovgsctx.html

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2022年3月24日 下午1:51
下一篇 2022年3月24日

相关推荐