查看原文
其他

神经网络——brain

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:陈志玲

文字编辑:张馨月

技术总编:张计宝



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 100gen 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) // 残差平方和 ssrdi "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 ybrainegen rbrain = sum((y-ybrain)^2)di "R-sq.   brain: " 1-rbrain/sst

由最终的判定系数,可以看出,神经网络对上述的非线性关系进行预测得到的拟合效果比用简单的回归得到的拟合效果要好。因为我们设置的变量不是简单的线性关系,直接用OLS就会使得预测效果很差,而神经网络能很好的解决非线性问题。







对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
marktouse标记使用变量
换种视角看问题——支持向量机(SVM)
提取PDF文本信息:入门
毕业季|b站《入海》评论爬取
Stata云端课程来啦
利用广义线性模型实现的分类——Logistic回归
Requests get爬虫之设置headers
数据分析薪资待遇如何?——跟我来,带你看
Vardistinct一键去重计数
从statsmodels到线性回归
Pandas的GroupBy机制
首行数据如何快速转变量名?
文件太多乱乱的?合并一下吧!
线性回归的正则化 ——岭回归与LASSO回归
Pandas中节约空间的小tip—categorical类型
Ftools命令组之flevelsof命令介绍
疫情下的家庭关系|《请回答1988》影评爬取

关于我们



微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存