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

相关文章
|
17天前
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
47 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
16天前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
66 21
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
16天前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
60 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
15天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
44 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
11天前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
24 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
11天前
|
机器学习/深度学习 人工智能 算法
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台。果蔬识别系统,本系统使用Python作为主要开发语言,通过收集了12种常见的水果和蔬菜('土豆', '圣女果', '大白菜', '大葱', '梨', '胡萝卜', '芒果', '苹果', '西红柿', '韭菜', '香蕉', '黄瓜'),然后基于TensorFlow库搭建CNN卷积神经网络算法模型,然后对数据集进行训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地文件方便后期调用。再使用Django框架搭建Web网页平台操作界面,实现用户上传一张果蔬图片识别其名称。
31 0
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
自然语言处理 算法 Python
|
自然语言处理 算法 索引
|
1天前
|
机器学习/深度学习 Linux Python
Python编程教学
Python教学
24 13
|
1天前
|
机器学习/深度学习 数据挖掘 开发者
探索Python编程:从基础到实战
【9月更文挑战第34天】在这篇文章中,我们将一起踏上Python编程的旅程。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的信息。我们将从Python的基础语法开始,逐步深入到更复杂的主题,如面向对象编程和网络应用开发。我们还将探讨如何在实际项目中应用这些知识,以及如何通过持续学习和实践来提高你的编程技能。让我们一起探索Python的世界,发现它的无限可能!
下一篇
无影云桌面