Python用线性回归和TensorFlow非线性概率神经网络不同激活函数分析可视化

简介: Python用线性回归和TensorFlow非线性概率神经网络不同激活函数分析可视化

全文链接:https://tecdat.cn/?p=33792


在这篇文章中,我将尝试介绍从简单的线性回归到使用神经网络构建非线性概率模型的步骤点击文末“阅读原文”获取完整代码数据


这在模型噪声随着模型变量之一变化或为非线性的情况下特别有用,比如在存在异方差性的情况下。

当客户的数据是非线性时,这样会对线性回归解决方案提出一些问题:

# 添加的噪声量是 x 的函数
n = 20000
......
x_train = x[: n // 2]
x_test = x[n // 2 :]
y_train = y[: n // 2]
......
plt.show()

image.png

线性回归方法

我们用均方差作为优化目标,这是线性回归的标准损失函数。

model_lin_reg = tf.keras.Sequential(
......
history = model_lin_reg.fit(x_train, y_train, epochs=10, verbose=0)
# 模型已经收敛:
plt.plot(history.history["loss"])
......

image.png

Final loss: 5.25

我们定义一些辅助函数来绘制结果:

def plot_results(x, y, y_est_mu, y_est_std=None):
  ......
    plt.show()
def plot_model_results(model, x, y, tfp_model: bool = True):
    model.weights
......
    plot_results(x, y, y_est_mu, y_est_std)

模型残差的标准差不影响收敛的回归系数,因此没有绘制。

plot_modesults(mod_linreg......, tfp_model=False)

image.png

点击标题查阅往期内容


Python中TensorFlow的长短期记忆神经网络(LSTM)、指数移动平均法预测股票市场和可视化


01

02

03

04

TensorFlow概率

我们可以通过最大化正态分布的似然性来拟合上述相同的模型,其中平均值是线性回归模型的估计值。

def negloglik(y, distr):
  ......
model_lin_reg_tfp = tf.keras.Sequential(
 ......
            lambda t: tfp.distributions.Normal(loc=t, scale=5,)
        ),
    ]
)
model_lin_reg_tfp.compile(
......)
history = model_lin_reg_tf......
plot_model_results(model_lin_r......rue)

image.png

拟合带有标准差的线性回归

为了拟合线性回归模型的最佳标准差,我们需要进行一些操作。我们需要网络输出两个节点,一个用于表示平均值,另一个用于表示标准差。

model_lin_reg_std_tfp = tf.keras.Sequential(
    [
  ......
        ),
    ]
)
model_lin_reg_std_tfp.compile(
......)
history = model_lin_reg_std_tfp.fit(x_train, y_train, epochs=50, ......train, tfp_model=True)

image.png

上面的图表显示,标准差和均值都与之前不同。它们都随着x变量的增加而增加。然而,它们对数据仍然不是很好的拟合,无法捕捉到非线性关系。

神经网络方法

为了帮助拟合x和y之间非线性关系,我们可以利用神经网络。这可以简单地使用我们设计的相同TensorFlow模型,但添加一个具有非线性激活函数的隐藏层。

model_lin_reg_std_nn_tfp = tf.keras.Sequential(
    [
 ......
            )
        ),
    ]
)
model_lin_reg_std_nn_tfp.compile(
   ......
plot_model_results(mode ......rain, tfp_model=True)

image.png

神经网络模型拟合的均值比线性回归模型更好地符合数据的非线性关系。

结果

我们对训练集和测试集运行了各个模型。在任何模型中,两者之间的性能变化不大。我们可以看到,神经网络模型在训练集和测试集上的表现最好。

results = pd.DataFrame(index=["Train", "Test"])
models = {
  ......
        ).numpy(),
    ]
results.transpose()

image.png

激活函数

下面使用relu或softplus激活函数创建相同的网络。首先是relu网络的结果:

model_relu = tf.keras.Sequential(
    [
  ......
                loc=t[:, 0:1], scale=tf.math.softplus(t[:, 1:2])
            )
        ),
    ]
)
m ......
plot_model_results(model_relu, x_train, y_train)

image.png

然后是softplus的结果:

model_softplus = tf.keras.Sequential(
    [
  ......
                loc=t[:, 0:1], scale=tf.math.softplus(t[:, 1:2])
            )
        ),
    ]
)
model_softplus.compile(
 ......
plot_model_results(model_softplus, x_train, y_train)

image.png

我们可以看到,基于sigmoid的神经网络具有最佳性能。

results = pd.DataFrame(index=["Train", "Test"])
models = {
 ......(x_test))
        ).numpy(),
    ]
results.transpose()

image.png

相关文章
|
6天前
|
Python
Python中的异步编程:使用asyncio和aiohttp实现高效网络请求
【10月更文挑战第34天】在Python的世界里,异步编程是提高效率的利器。本文将带你了解如何使用asyncio和aiohttp库来编写高效的网络请求代码。我们将通过一个简单的示例来展示如何利用这些工具来并发地处理多个网络请求,从而提高程序的整体性能。准备好让你的Python代码飞起来吧!
17 2
|
13天前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
57 6
|
2天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
15 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
6天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
利用Python和TensorFlow构建简单神经网络进行图像分类
利用Python和TensorFlow构建简单神经网络进行图像分类
21 3
|
11天前
|
数据采集 存储 XML
Python实现网络爬虫自动化:从基础到实践
本文将介绍如何使用Python编写网络爬虫,从最基础的请求与解析,到自动化爬取并处理复杂数据。我们将通过实例展示如何抓取网页内容、解析数据、处理图片文件等常用爬虫任务。
|
14天前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
39 4
|
14天前
|
网络协议 物联网 API
Python网络编程:Twisted框架的异步IO处理与实战
【10月更文挑战第26天】Python 是一门功能强大且易于学习的编程语言,Twisted 框架以其事件驱动和异步IO处理能力,在网络编程领域独树一帜。本文深入探讨 Twisted 的异步IO机制,并通过实战示例展示其强大功能。示例包括创建简单HTTP服务器,展示如何高效处理大量并发连接。
36 1
|
15天前
|
数据采集 存储 机器学习/深度学习
构建高效的Python网络爬虫
【10月更文挑战第25天】本文将引导你通过Python编程语言实现一个高效网络爬虫。我们将从基础的爬虫概念出发,逐步讲解如何利用Python强大的库和框架来爬取、解析网页数据,以及存储和管理这些数据。文章旨在为初学者提供一个清晰的爬虫开发路径,同时为有经验的开发者提供一些高级技巧。
13 1
|
17天前
|
Kubernetes 网络协议 Python
Python网络编程:从Socket到Web应用
在信息时代,网络编程是软件开发的重要组成部分。Python作为多用途编程语言,提供了从Socket编程到Web应用开发的强大支持。本文将从基础的Socket编程入手,逐步深入到复杂的Web应用开发,涵盖Flask、Django等框架的应用,以及异步Web编程和微服务架构。通过本文,读者将全面了解Python在网络编程领域的应用。
17 1
|
18天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
61 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型