神经网络——brain
本文作者:陈志玲
文字编辑:张馨月
Stata暑期线上课程火热招生中~
爬虫俱乐部将于2020年7月11日至14日在线上举行为期四天的Stata编程技术定制培训。课程通过案例教学模式,旨在帮助大家在短期内掌握Stata的基本命令、编程、数据处理以及结果输出等技术,并针对最新版Stata中的实用新功能做出详细介绍,包括框架功能(frame:读入多个数据集)等等。同时,此次云端课程提供录播,提供线上答疑。详细培训大纲及报名方式请查看《Stata云端课程来啦》,或点击文末阅读原文直接提交报名信息呦~
导读
在算法模型中,我们经常听到一个叫做神经网络的算法,它是模仿生物神经网络的结构和功能的数学模型,主要用于对函数进行估计和近似。神经网络一般由输入层、隐藏层、输出层构成,包括前向传播和反向传播。前向传播:从输入层到输入层计算每一层的每一个神经元的激活值,最后计算出输出层神经元的激活值,得到结果;反向传播:是根据前向传播计算出来的激活值,来计算每一层参数的梯度,并从后往前进行参数的更新。在Stata中也有一个关于神经网络的命令——brain,用于反向传播算法的简单实现。接下来,我们一起来看看brain的具体用法。
首先安装该命令:
ssc install brain
然后可以查看help文档。
brain define [if] [in],input(varlist) output(varlist) [hidden(numlist)] [spread(default = 0.25)]
该语法功能为:定义神经网络的结构。input和output是基于活动数据,确定用于标准化[0,1]之间的输入和输出变量的参数。hidden使得隐藏的层可以省略,从而产生简单的感知器。spread的起始值均匀分布在[-spread,+ spread]之间。即默认在[-0.25, 0.25]之间。
brain train [if] [in], iter(default = 0) [eta(default = 0.25)] [nosort]
使用训练因子eta进行迭代的反向传播训练,eta默认值为0.25。选项nosort可以防止对训练数据进行随机排序。
brain think output_varlist [if] [in]
使用网络预测来创建或覆盖指定的输出变量。输出变量的数量必须与输出神经元的数量匹配。
二.brain的运用
1.将brain与OLS的拟合效果进行比较
首先生成两个服从正态分布的参数x1,x2,和一个与x1、x2存在非线性关系的变量y。
程序如下:
set obs 100
gen x1 = invnorm(uniform()) //生成标准正态分布 N(0,1)
gen x2 = invnorm(uniform())
gen y = x1 + x2 + x1^2 + x2^2 + x1*x2
然后进行简单回归,用x1和x2预测y,得到回归方程的R的平方,即回归的拟合效果。
sum y //汇总统计信息
scalar ymean = r(mean) //生成一个标量为y的均值
egen sst = sum((y-ymean)^2) //总平方和sst
reg y x1 x2 //回归
predict yreg //y的预测值
egen rreg = sum((y-yreg)^2) // 残差平方和 ssr
di "R-squared reg: " 1-rreg/sst //即判定系数 R的平方
现在,我们用神经网络来预测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)
指定输出变量ybrain ,即神经网络对y的预测值,并计算此时的残差平方和,最后得到神经网络判定系数R的平方。
brain think ybrain
egen rbrain = sum((y-ybrain)^2)
di "R-sq. brain: " 1-rbrain/sst
由最终的判定系数,可以看出,神经网络对上述的非线性关系进行预测得到的拟合效果比用简单的回归得到的拟合效果要好。因为我们设置的变量不是简单的线性关系,直接用OLS就会使得预测效果很差,而神经网络能很好的解决非线性问题。
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。