您的位置 首页 知识

人工神经网络(人工神经网络与Stata应用)

人工神经网络
NEW!连享会·推文专辑:
Stata资源 | 数据处理 | Stata绘图 | Stata程序
结果输出 | 回归分析 | 时间序列 | 面板数据 | 离散数据
交乘调节 | DID | RDD  |  因果推断 |  SFA-TFP-DEA
文本分析+爬虫 | 空间计量 | 学术论文 | 软件工具
?
? 连享会主页:www.lianxh.cn
?
?
? 因果推断-内生性 专题 ? ? 2020.11.12-15
? 主讲: 王存同 (中央财经大学);司继春(上海对外经贸大学)
? 课程主页:https://gitee.com/arlionn/YG
? 诚邀助教 10 名,详见课程主页。
?
?
作者: 伊凌雪 (中央财经大学)
邮箱: yilingxue99@163.com
?
目录[
1. 人工神经网络简介
1.1 基本介绍
1.2 在人工神经网络中学习
1.3 在经济领域的应用
2. 主要架构
3.  Stata实操:brain命令
3.1 基本语法和选项
3.2 主要参数说明
4.  Stata范例
4.1 Stata 范例 1
4.2 Stata 范例 2
5.  参考资料

?
1. 人工神经网络简介1.1 基本介绍人工神经网络(Artificial Neural Networks,简写为ANNs)是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的,并具有自学习和自适应的能力。
人工神经网络是一种运算模型,由大量的节点以及它们之间的连接构成。每个节点代表一个函数,而连接则代表权重。它可以描述为有向图,其中每个节点 都执行以下形式的传递函数 :

是由节点 输出的, 是第 个输入的节点, 是节点 和 之间的连接权重。 是节点的阈值(或偏差)。通常 是非线性的,例如 heaviside 、 sigmoid 或者 Gaussian 函数。
可以根据人工神经网络的连通性,将其分为前馈类和递归类。如果存在一种对网络中所有节点编号的方法,则人工神经网络是前馈的,这样就不会存在从数量较大的节点到数量较小的节点的连接,所有连接都是从数量较小的节点到数量较大的节点。如果不存在这种编号方法,人工神经网络则会重复出现。
在上述中,求和中的每个项仅包含一个输入节点 。高阶人工神经网络是那些包含高阶节点的神经网络,即在一些求和项中涉及多个输入的节点。例如,一个二阶节点可以描述为:

人工神经网络的体系结构由其拓扑结构决定,即网络中每个节点的整体连通性和传递函数。
1.2 在人工神经网络中学习在人工神经网络中的学习大致可分为监督学习、无监督学习和强化学习。学习算法的本质是学习规则,即确定连接权重如何变化的权重更新规则。
监督学习是基于人工神经网络的实际输出和期望的正确输出(也称为目标输出)之间的直接比较。通常将其表述为误差函数的最小值,例如实际输出和期望输出之间的总均方误差与所有可用数据之和。然后可以使用基于梯度下降的优化算法,如反向传播(BP),迭代地调整人工神经网络中的连接权重,以最小化误差。
强化学习是监督学习的一种特殊情况,其中的确切期望输出是未知的。它只基于实际输出是否正确的信息。
无监督学习仅基于输入数据之间的相关性。没有关于“正确输出”的信息可供学习。
1.3 在经济领域的应用(1)市场价格预测
对商品价格变动的分析,可归结为对影响市场供求关系的诸多因素的综合分析。传统的统计经济学方法因其固有的局限性,难以对价格变动做出科学的预测,而人工神经网络容易处理不完整的、模糊不确定或规律性不明显的数据,所以用人工神经网络进行价格预测是有着传统方法无法相比的优势。在不牺牲线性决策环境性能的情况下,神经网络模型在改善这些非线性决策环境中的模型预测方面具有巨大潜力。
从市场价格的确定机制出发,依据影响商品价格的家庭户数、人均可支配收入、贷款利率、城市化水平等复杂、多变的因素,建立较为准确可靠的模型。该模型可以对商品价格的变动趋势进行科学预测,并得到准确客观的评价结果。
(2)风险评估
风险是指在从事某项特定活动的过程中,因其存在的不确定性而产生的经济或财务的损失、自然破坏或损伤的可能性。防范风险的最佳办法就是事先对风险做出科学的预测和评估。应用人工神经网络的预测思想是根据具体现实的风险来源, 构造出适合实际情况的信用风险模型的结构和算法,得到风险评价系数,然后确定实际问题的解决方案。利用该模型进行实证分析能够弥补主观评估的不足,可以取得满意效果。
?
2. 主要架构人工神经网络主要架构是由神经元、层和网络三个部分组成,整个人工神经网络包含一系列基本的神经元、通过权重相互连接。神经元是人工神经网络最基本的单元,单元以层的方式组,每一层的每个神经元和前一层、后一层的神经元连接,共分为输入层、输出层和隐藏层,三层连接形成一个神经网络。
?
? 诚邀助教 10 名,详见 课程主页  。
?
?
3.  Stata实操:brain命令在正式介绍之前,需要使用 ssc install brain 安装该命令,可以使用 help brain 查看该命令的帮助文件。
3.1 基本语法和选项brain define [if] [in], input(varlist) output(varlist)[hidden(numlist)] [spread(default = 0.25)]
定义神经网络的结构。input(varlist) 和output(varlist)分别用于表示输入神经元和输出神经元。hidden(numlist)表示隐藏层,用于产生简单的感知器。每个数字从输入层开始定义一个相应大小的隐藏层。spread表示反向传播的起始值均匀分布在 [ -spread,+ spread] 之间,默认在 [ -0.25,0.25 ] 之间。
brain save filename
将神经网络矩阵保存到文件中。默认后缀为“ .brn”。
brain load filename
从文件调用已经训练完的神经网络矩阵。默认后缀为“ .brn”。
brain signal, [raw]
按顺序激活每个输入信号,并将差值报告给水平线。水平线的信号可以在列表的底部找到,以标准化形式 [ 0 , 1 ] 指定raw报告信号。
存储结果:在输出信号上输入神经元的r(signal)矩阵
brain feed input_signals, [raw]
根据指定的输入信号显示输出。选项raw将所有值声明为归一化的输入信号 [ 0 , 1 ],否则它们将根据相应的变量上下文进行解释。可以使用以下矩阵上的matrix list来访问网络状态:input,neuron, output
存储结果:输出信号的r(output)矩阵(归一化和原始)
brain train [if] [in], iter(default = 0) [eta(default = 0.25)] [nosort]
iter()表示迭代次数,eta为训练因子,eta的默认值为0.25,nosort可以防止对训练数据进行随机排序。
存储结果:
r(N) 使用的观测值的数量r(err) 最终误差brain think output_varlist [if] [in]
使用训练好的神经网络模型进行预测,来创建或者覆盖指定的输出神经元。输出神经元的数量必须与输入神经元的数量相匹配。如果输入神经元超出为网络定义的限制,则其信号将相应地被截断以保持在 [ 0 , 1 ] 范围内。
brain margin [input_varlist] [if] [in]
通过计算估计的输出与输入神经元的常数零信号之间的差,报告所选输入神经元( 默认值 = all)对输出神经元的边际影响。
存储结果:输入神经元在边际输出信号上的 r(margin) 矩阵
3.2 主要参数说明brain基于以下矩阵实现反向传播网络:
input定义输入神经元名称,其中包含输入信号和归一化参数output定义输出神经元名称,其中包含输出信号和归一化参数neuron包括神经元信号layer定义网络结构brain包含突触权重和偏差注意潜在的名称冲突,使用矩阵列表 matrix_name来研究网络矩阵的内容。
?
4.  Stata范例4.1 Stata 范例 1情形一:brain 样本内预测
将brain与 OLS 的拟合效果进行比较
set obs 100 //设定100个观测值
gen x2 = invnorm(uniform()) //生成两个服从正态分布的参数 x2

scalar ymean = r(mean) //产生标量y的均值

predict yreg
用神经网络预测y值,来计算 R 的平方。通过定义神经网络结构,输入 x1 和 x2 ,输出 y ,隐藏 10层。
brain define, input(x1 x2) output(y) hidden(10 10)
利用定义的神经网络进行训练,迭代次数为 500 次,eta数值为1。
brain train, iter(500) eta(1)
得出神经网络对 y 的预测值变量 ybrain,并计算残差平方和,最后得出判定系数 。
brain think ybrain

egen rbrain = sum((y-ybrain)^2)

di “R-squared reg: ” 1-rreg/sst //判定系数R的平方
   
   R-squared reg: .07468528

di “R-sq.   brain: ” 1-rbrain/sst

   R-sq.   brain: .8383261
通过以上判定系数R的平方,可知神经网络比 OLS 回归的预测拟合效果要好。
绘制图形:
*-Graphing
  gen t = _n
  twoway line y* t, legend(ring(0) pos(11) col(1))
  graph export “OLS_Brain_predict.png”, replace
输出图形为:
情形二:brain 样本外预测
沿用上述范例,样本外,比较真实 y 值与神经网络预测的 ybrain 。
clear
set seed 1000  //设定训练集的种子值
set obs 100    //生成100个观测值
gen x1 = invnorm(uniform())  //生成服从正态分布的变量x1
gen x2 = invnorm(uniform())  //生成服从正态分布的变量x2
gen y = x1 + x2 + x1^2 + x2^2 + x1*x2  //生成一个与x1、x2存在非线性关系的变量y

brain define, input(x1 x2) output(y) hidden(10 10)  //定义神经元,隐藏10层

brain train, iter(500) eta(1) nosort  //迭代500次,训练因子设定为1
brain save nnmodel  //将训练好的神经网络模型保存为nnmodel
读入新的样本外数据
clear
set seed 2000  //设定样本外数据的种子值
set obs 100   //同样生成100个观测值
gen x1 = invnorm(uniform())  //变量生成方法与训练集一致
gen x2 = invnorm(uniform())
gen y = x1 + x2 + x1^2 + x2^2 + x1*x2  //计算真实的y用于比较
调用神经网络
brain load nnmodel  //调用训练好的名为nnmodel的神经网络模型
神经网络模型预测
brain think ybrain    //得到y的样本外预测值,保存为新变量 ybrain 
计算神经网络预测的
sum y
scalar ymean = r(mean)
egen sst = sum((y-ymean)^2)
egen rbrain = sum((y-ypred)^2)

di “R-sq. = ” 1-rbrain/sst
   R-sq. = .7723573
可见,神经网络模型的预测效果不错。通过绘制图形进行对比:
gen t = _n
twoway line y* t, legend(ring(0) pos(11) col(1))
输出预测结果对比图:
可以发现,通过神经网络模型的样本外预测得到的预测值与真实值之间差异并不大,进一步验证了神经网络模型较为优良的样本外预测效果。
4.2 Stata 范例 2将 OLS 与brain的非线性函数比较
clear
gen x = 4*_pi/200 *_n

predict yreg
用神经网络预测y值,通过定义神经网络结构,输入 x  ,隐藏20层。
brain define, input(x) output(y) hidden(20) 
利用定义的神经网络进行训练,迭代次数为 500 次,eta数值为 2 。
brain train, iter(500) eta(2)
得出神经网络对 y 的预测值变量 ybrain
brain think ybrain
绘制图形:
twoway (scatter y x, sort) (line yreg x, sort) (line ybrain x, sort), ///
         legend(ring(0) pos(1) col(1))
graph export “OLS_Brain_NLS.png”, replace
输出图形为:
从上图可知,神经网络可以很好地解决非线性问题。
?
5.  参考资料West P M, Brockett P L, Golden L L. A comparative analysis of neural networks and statistical methods for predicting consumer choice[J]. Marketing Science, 1997, 16(4): 370-391.-link-Yao X. Evolving artificial neural networks[J]. Proceedings of the IEEE, 1999, 87(9): 1423-1447.神经网络——brainStata: BP 神经网络的样本外预测 brain?
? ? ? ?
连享会主页:? www.lianxh.cn
直播视频:lianxh.duanshu.com
?

免费公开课:
直击面板数据模型:https://gitee.com/arlionn/PanelData – 连玉君,时长:1小时40分钟Stata 33 讲:https://gitee.com/arlionn/stata101 – 连玉君, 每讲 15 分钟.部分直播课课程资料下载 ? https://gitee.com/arlionn/Live (PPT,dofiles等)温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。
?
?
关于我们? 连享会 ( 主页:lianxh.cn ) 由中山大学连玉君老师团队创办,定期分享实证分析经验。? 直达连享会:【百度一下:连享会】即可直达连享会主页。亦可进一步添加 主页,知乎,面板数据,研究设计 等关键词细化搜索。?  连享会小程序:扫一扫,看推文,看视频……
? 扫码加入连享会微信群,提问交流更方便
? 连享会学习群-常见问题解答汇总:
?  https://gitee.com/arlionn/WD
?
? 空间计量 专题 ? ? 2020.12.10-13
? 主讲:杨海生 (中山大学);范巧 (兰州大学)
? 课程主页:https://gitee.com/arlionn/SP | 微信版
? 诚邀助教 10 名,详见课程主页。

人工神经网络相关文章