联系客服
客服二维码

联系客服获取更多资料

微信号:LingLab1

客服电话:010-82185409

意见反馈
关注我们
关注公众号

关注公众号

linglab语言实验室

回到顶部
Stata:BP神经网络的样本外预测 brain

2315 阅读 2020-08-31 09:48:02 上传

以下文章来源于 BrainTechnology

文 / 汪奕鹏


目  录

一、导读

二、brain命令的基本用法

  1. 定义神经网络模型
  2. 训练神经网络模型
  3. 保存神经网络模型
  4. 调用神经网络模型
  5. 神经网络模型预测

三、用brain命令进行样本外预测的例子

  1. 调用训练集数据
  2. 定义和训练神经网络模型
  3. 读入新的样本外数据
  4. 用神经网络模型进行样本外预测
  5. 预测效果

参考资料


一、导读

随着机器学习越来越多地应用于经济金融研究,Stata也出现了不少用于机器学习的程序包,如discrimsvmachinescrtreesrandomforestboostbrain等。一周前,Stata and Python数据分析公众号推送了一篇文章《神经网络——brain,介绍了如何在Stata中使用brain命令来对BP神经网络进行预测,但这篇文章主要是通过与OLS的比较来突出brain命令的样本内预测效果,而事实上brain命令还能很方便地进行样本外预测,且预测效果也颇为不错,本推文将通过一个例子介绍该内容。

二、brain命令的基本语法

1. 定义神经网络模型

    brain define [if] [in], input(varlist) output(varlist) [hidden(numlist)] [spread(default = 0.25)]

    input(varilist)output(varlist)用于定义输入神经元和输出神经元。例如,input(x1 x2) output(y)表示输入神经元为x1x2,输出神经元为y,即用x1x2预测yhidden(numlist)表示隐藏的层,用于产生神经网络模型简单的感知器。spread表示反向传播起始值均匀分布的范围,例如,spread(0.25)表示反向传播的起始值均匀分布在之间。

    2. 训练神经网络模型

      brain train [if] [in], iter(default = 0) [eta(default = 0.25)] [nosort]

      iter()表示迭代次数,eta为训练因子,选项nosort可防止对训练集进行随机排序。若样本量较大且迭代次数较多,训练过程将耗费相当长的时间。

      3. 保存神经网络模型

        brain save filename

        将训练完毕的神经网络模型保存,并进行命名。

        4. 调用神经网络模型

          brain load filename

          调用已训练好且已保存的神经网络模型。

          5. 神经网络模型预测

            brain think output_varlist [if] [in]

            使用训练好的神经网络模型进行预测,来创建或覆盖指定的输出神经元。

            三、用brain命令进行样本外预测的例子

            1. 调用训练集数据

              clearset seed 1122  //设定训练集的种子值set obs 100    //生成100个观测值gen x1 = invnorm(uniform())  //生成服从正态分布的变量x1gen x2 = invnorm(uniform())  //生成服从正态分布的变量x2gen y = x1 + x2 + x1^2 + x2^2 + x1*x2  //生成一个与x1、x2存在非线性关系的变量y

              2. 定义和训练神经网络模型

              • 2.1 定义神经网络模型
                brain define, input(x1 x2) output(y) hidden(10 10)  //定义神经元,隐藏10层

                输出结果为:

                  Defined matrices:   input[4,2]   output[4,1]   neuron[1,23]   layer[1,4]   brain[1,151]
                  • 2.2 训练神经网络模型
                    brain train, iter(10000) eta(1) nosort  //迭代10000次,训练因子设定为1

                    输出结果为每次迭代的ErrorDelta值,此处略。

                    • 2.3 保存神经网络模型
                      brain save nnmodel  //将训练好的神经网络模型保存为nnmodel

                      3. 读入新的样本外数据

                        clearset seed 3344  //设定样本外数据的种子值set obs 100   //同样生成100个观测值gen x1 = invnorm(uniform())  //变量生成方法与训练集一致gen x2 = invnorm(uniform())gen y = x1 + x2 + x1^2 + x2^2 + x1*x2  //计算真实的y用于比较

                        4. 用神经网络模型进行样本外预测

                        • 4.1 调用神经网络模型
                          brain load nnmodel  //调用训练好的名为nnmodel的神经网络模型

                          输出结果为:

                            Loaded matrices:   input[4,2]   output[4,1]   neuron[1,23]   layer[1,4]   brain[1,151]
                            • 4.2 神经网络模型预测
                              brain think ypred    //得到y的样本外预测值,保存为新变量ypred

                              5. 预测效果

                              • 5.1 计算神经网络预测的
                                qui sum yqui scalar ymean = r(mean)qui egen sst = sum((y-ymean)^2)qui egen rbrain = sum((y-ypred)^2)di "R-sq. = " 1-rbrain/sst

                                输出结果为:

                                  R-sq. = .93685426

                                  可见,神经网络模型的预测效果还是挺不错的,接下来我们来直观地感受下真实值和预测值之间的差异:

                                  • 5.2 比较真实值和预测值
                                    list y ypred in 1/20   //展示真实y和神经网络预测的ypred的前20行

                                    输出结果为:

                                           +------------------------+     |         y        ypred |     |------------------------|  1. |  1.886241    1.8421531 |  2. |  .5253163    .37239221 |  3. |   4.18558    4.3560613 |  4. |  2.166967    2.3977751 |  5. | -.2777721   -.08712226 |     |------------------------|  6. |  4.259432    4.3541003 |  7. |  1.294825    1.3320833 |  8. |  1.483941    1.5586018 |  9. |  1.578716    1.5306694 | 10. |  2.904035    2.8614747 |     +------------------------+

                                      可以发现,通过神经网络模型的样本外预测得到的预测值与真实值之间差异并不大,且在符号和大小变动趋势上也较为类似,进一步验证了神经网络模型较为优良的样本外预测效果。

                                      参考资料

                                      1. Stata and Python数据分析推文《神经网络——brain》
                                      2. brain命令的帮助文档:help brain

                                      o@uone-tech.cn。

                                      点赞
                                      收藏
                                      表情
                                      图片
                                      附件