周志华《机器学习》西瓜书 小白Python学习笔记(五) ———— 第五章 神经网络

周志华《机器学习》西瓜书 小白Python学习笔记(五) ———— 第五章 神经网络

什么是神经网络

神经网络起源于生物神经元的生物原理,生物神经元通常包括细胞体、树突和轴突等部分。其中,树突适用于接受输入信息,突触对输入信息进行处理,达到一定条件后由轴突产生输出,此时神经元表现为激活兴奋的状态。
在这里插入图片描述
模仿生物神经元的工作原理,科学家们提出了人工神经元(感知机)的概念,基本的感知机如下图所示。输入信号 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3,经过赋予相应的权重 w 1 , w 2 , w 3 w_1,w_2,w_3 w1,w2,w3后,经过汇总后作为自变量输入到函数 f f f中,这个函数称为激活函数,激活函数通过判断产生输出信号 y y y
图片来源网络

神经网络的结构

输入层、隐含层和输出层

一般的神经网络包含三个部分,分别是输入层、隐含层和输出层,由下图所示。输入层,一般输入的是样本的各个特征的数据信息,有几个特征就会有几个输入的结点;隐含层位于输入层与输出层之间,可以为一层也可以为多层;输出层则对应标签值,若标签为猫或狗或猪,则有三个输出结点,哪个结点的输出数值越接近1,就被判断为哪个标签。
在这里插入图片描述

激活函数

之前提到隐层中的每个结点都会接受上一层所有结点传递来的信息 w i x i w_ix_i wixi,经过加总为 ∑ w i x i \sum{w_ix_i} wixi后带入激活函数,结果作为本结点的输出传递到下一层隐含层或者输出层。那激活函数是什么呢?
激活函数是用来加入非线性因素,并将输入的 ∑ w i x i \sum{w_ix_i} wixi压缩到0~1之间的数值,所以它一般要满足非线性、可微性和单调性等性质,我们在之前提到的sigmoid函数就是一个常用的激活函数。
之前的博客有具体讲到,请移步

权重

输入层各个结点的数据分别传输到隐含层第一层每一个结点时都要乘一个权重 w i w_i wi,传递到不同结点时权重也是不同的,所以准确的表达为,输入层的第 i i i个结点传输到隐层下一层的第 j j j个结点时的权重为 w i j w_ij wij,该第 j j j个结点的总输入为 ∑ i w i j x i \sum_i{w_{ij}x_i} iwijxi.

偏置

神经元收到刺激时,通常会有一个阈值,只有当刺激超过阈值时,才会表现为兴奋状态,所以我们在此也会引入一个常数,加在 ∑ i w i j x i \sum_i{w_{ij}x_i} iwijx

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
很高兴为您解答这个问题!本次我们将学习如何用 Python 实现《机器学习周志华教授第十四章中的概率图模型习题。在这里,我们将使用 Python 的 pgmpy 库来构建和分析概率图模型。 首先,我们需要安装 pgmpy。可以使用 pip 安装: ```python pip install pgmpy ``` 安装完成后,我们就可以开始实现习题了。 #### 习题 14.1 考虑一个三元组 $(X, Y, Z)$,其中 $X$ 是二元随机变量,$Y, Z$ 是一元随机变量,试构造一个无向图结构,使其成为正态分布的一个合法图模型。 我们可以使用 pgmpy 来创建这个无向图模型。代码如下: ```python from pgmpy.models import MarkovModel # 创建一个空的无向图模型 model = MarkovModel() # 添加变量节点 model.add_nodes_from(['X', 'Y', 'Z']) # 添加边 model.add_edges_from([('X', 'Y'), ('X', 'Z')]) # 将模型转换成正态分布模型 from pgmpy.factors.continuous import ContinuousFactor from pgmpy.inference import Inference # 定义正态分布的 mean 和 covariance mean = [0, 0, 0] covariance = [[1, 0, 0], [0, 1, 0], [0, 0, 1]] # 创建正态分布因子 factor = ContinuousFactor(['X', 'Y', 'Z'], mean, covariance) # 将因子添加到模型中 model.add_factors(factor) # 执行因子分解 inference = Inference(model) factors = inference.factors() ``` 在上面的代码中,我们首先创建了一个空的无向图模型,然后添加了三个变量节点 $X, Y, Z$ 和两条边 $(X, Y), (X, Z)$。接着,我们使用 `pgmpy.factors.continuous.ContinuousFactor` 来定义正态分布的 mean 和 covariance,并将其添加到模型中。最后,我们使用 `pgmpy.inference.Inference` 来执行因子分解,得到了模型中的所有因子。 #### 习题 14.2 考虑一个四元组 $(X_1, X_2, X_3, X_4)$,它们之间的关系如下图所示。试构造这个有向图结构的贝叶斯网模型。 ![image.png](attachment:image.png) 我们可以使用 pgmpy 来创建这个有向图模型。代码如下: ```python from pgmpy.models import BayesianModel # 创建一个空的有向图模型 model = BayesianModel() # 添加变量节点 model.add_nodes_from(['X1', 'X2', 'X3', 'X4']) # 添加边 model.add_edges_from([('X2', 'X1'), ('X3', 'X1'), ('X3', 'X2'), ('X4', 'X2')]) # 打印模型结构 print(model.edges()) ``` 在上面的代码中,我们首先创建了一个空的有向图模型,然后添加了四个变量节点 $X_1, X_2, X_3, X_4$ 和四条边 $(X_2, X_1), (X_3, X_1), (X_3, X_2), (X_4, X_2)$。最后,我们打印出了模型的边结构。 #### 习题 14.3 考虑一个元组 $(X_1, X_2, X_3, X_4, X_5)$,它们之间的关系如下图所示。试构造这个有向图结构的贝叶斯网模型。 ![image-2.png](attachment:image-2.png) 我们可以使用 pgmpy 来创建这个有向图模型。代码如下: ```python from pgmpy.models import BayesianModel # 创建一个空的有向图模型 model = BayesianModel() # 添加变量节点 model.add_nodes_from(['X1', 'X2', 'X3', 'X4', 'X5']) # 添加边 model.add_edges_from([('X2', 'X1'), ('X3', 'X1'), ('X4', 'X2'), ('X5', 'X2'), ('X5', 'X3')]) # 打印模型结构 print(model.edges()) ``` 在上面的代码中,我们首先创建了一个空的有向图模型,然后添加了个变量节点 $X_1, X_2, X_3, X_4, X_5$ 和条边 $(X_2, X_1), (X_3, X_1), (X_4, X_2), (X_5, X_2), (X_5, X_3)$。最后,我们打印出了模型的边结构。 #### 习题 14.4 考虑一个六元组 $(X_1, X_2, X_3, X_4, X_5, X_6)$,它们之间的关系如下图所示。试构造这个有向图结构的贝叶斯网模型。 ![image-3.png](attachment:image-3.png) 我们可以使用 pgmpy 来创建这个有向图模型。代码如下: ```python from pgmpy.models import BayesianModel # 创建一个空的有向图模型 model = BayesianModel() # 添加变量节点 model.add_nodes_from(['X1', 'X2', 'X3', 'X4', 'X5', 'X6']) # 添加边 model.add_edges_from([('X2', 'X1'), ('X3', 'X1'), ('X4', 'X2'), ('X5', 'X3'), ('X6', 'X4'), ('X6', 'X5')]) # 打印模型结构 print(model.edges()) ``` 在上面的代码中,我们首先创建了一个空的有向图模型,然后添加了六个变量节点 $X_1, X_2, X_3, X_4, X_5, X_6$ 和六条边 $(X_2, X_1), (X_3, X_1), (X_4, X_2), (X_5, X_3), (X_6, X_4), (X_6, X_5)$。最后,我们打印出了模型的边结构。 #### 习题 14.5 考虑一个二元组 $(X, Y)$,其中 $X$ 是一元随机变量,$Y$ 是二元随机变量,试构造一个有向图结构,使其成为正态分布的一个合法图模型。 我们可以使用 pgmpy 来创建这个有向图模型。代码如下: ```python from pgmpy.models import BayesianModel # 创建一个空的有向图模型 model = BayesianModel() # 添加变量节点 model.add_nodes_from(['X', 'Y1', 'Y2']) # 添加边 model.add_edges_from([('X', 'Y1'), ('X', 'Y2')]) # 将模型转换成正态分布模型 from pgmpy.factors.continuous import ContinuousFactor from pgmpy.inference import Inference # 定义正态分布的 mean 和 covariance mean = [0, 0, 0] covariance = [[1, 0, 0], [0, 1, 0], [0, 0, 1]] # 创建正态分布因子 factor = ContinuousFactor(['X', 'Y1', 'Y2'], mean, covariance) # 将因子添加到模型中 model.add_factors(factor) # 执行因子分解 inference = Inference(model) factors = inference.factors() ``` 在上面的代码中,我们首先创建了一个空的有向图模型,然后添加了三个变量节点 $X, Y_1, Y_2$ 和两条边 $(X, Y_1), (X, Y_2)$。接着,我们使用 `pgmpy.factors.continuous.ContinuousFactor` 来定义正态分布的 mean 和 covariance,并将其添加到模型中。最后,我们使用 `pgmpy.inference.Inference` 来执行因子分解,得到了模型中的所有因子。 以上就是本次的答案,希望对您有所帮助!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值