用R语言实现神经网络预测股票实例

news2024/12/26 13:03:54

 神经网络是一种基于现有数据创建预测的计算系统。最近我们被客户要求撰写关于神经网络的研究报告,包括一些图形和统计输出。

如何构建神经网络?

神经网络包括:

  • 输入层:根据现有数据获取输入的层
  • 隐藏层:使用反向传播优化输入变量权重的层,以提高模型的预测能力
  • 输出层:基于输入和隐藏层的数据输出预测

用神经网络解决分类问题

在这个特定的例子中,我们的目标是开发一个神经网络来确定股票是否支付股息。

因此,我们使用神经网络来解决分类问题。通过分类,我们指的是按类别对数据进行分类的分类。例如,水果可分为苹果,香蕉,橙等。

我们的自变量如下:

  • fcfps:每股自由现金流量
  • income_growth:过去一年的盈利增长(%)
  • de:债务与权益比率
  • mcap:股票的市值
  • current_ratio:流动比率(或流动资产/流动负债)

我们首先设置目录并将数据加载到R环境中:

setwd("你的工作文件目录")
attach(mydata)

形成神经网络时最重要的过程之一是数据标准化。这涉及将数据调整到一致的比例,以便准确地比较预测值和实际值。无法对数据进行标准化通常会导致所有观察结果中的预测值保持不变,而与输入值无关。

我们在下面实现了这两种技术,但选择使用max-min标准化技术。

缩放标准化

scaleddata <-scale(mydata)

最大最小标准化

对于此方法,我们调用以下函数来标准化我们的数据:

normalize < -  function(x){ 
  return((x  -  min(x))/(max(x) -  min(x)))
} 

然后,我们使用lapply在我们现有的数据上运行该函数(我们将数据集称为加载到R中的数据集为mydata):

我们现在已经标准化了我们的新数据集并将其保存到名为maxmindf的数据框中:

我们的训练数据(训练集)基于80%的观测值。测试数据(测试集)基于剩余的20%的观察结果。

#训练和测试数据
trainset <- maxmindf[1:160, ]
testset <- maxmindf[161:200, ]

用神经网络训练模型

我们现在将神经网络库加载到R.

使用神经网络将依赖的“红利”变量“回归” 到其他自变量

  • 根据hidden =(2,1)公式将隐藏层数设置为(2,1)
  • 给定自变量对因变量(被除数)的影响假设是非线性的,linear.output变量设置为FALSE
  • 阈值设置为0.01,这意味着如果迭代期间的误差变化小于1%,则模型不会进行进一步的优化

确定神经网络中隐藏层的数量并不是一门精确的科学。事实上,有些情况下,没有任何隐藏层,准确度可能会更高。因此,反复试验在这一过程中起着重要作用。

一种可能性是比较预测的准确性如何随着我们修改隐藏层的数量而改变。例如,对于该示例,使用(2,1)参数配置最终产生92.5%的分类准确度。

 
 
nn $ result .matrix 
plot(nn)

我们的神经网络看起来像这样:

我们现在生成神经网络模型的误差,以及输入,隐藏层和输出之间的权重:

测试模型的准确性

如前所述,我们的神经网络是使用训练数据创建的。然后,我们将其与测试数据进行比较,以评估神经网络预测的准确性。

temp_test < - subset(testset,select = c(“fcfps”,“earnings_growth”,“de”,“mcap”,“current_ratio”)) 
head(temp_test) 
nn.results < - compute(nn, temp_test) 
结果< - data.frame(actual = testset $ dividend,prediction = nn.results $ net.result)

将预测结果与实际结果进行比较:

0.999985252611 

混淆矩阵

然后,我们使用sapply对结果进行舍入,并创建一个混淆矩阵来比较真/假阳性和阴性的数量:


 
table(actual,prediction)
      prediction 
actual 0 1 
     0 17 0 
     1 3 20 

混淆矩阵用于确定由我们的预测生成的真实和错误的数量。该模型生成17个真阴性(0),20个真阳性(1),而有3个假阴性。

最终,我们在确定股票是否支付股息时产生92.5%(37/40)的准确率。

使用神经网络解决回归问题

在这个例子中,我们希望分析解释变量容量汽油小时数对因变量消费的影响

数据标准化

同样,我们将数据标准化并分为训练和测试数据:

#最大最小标准化
normalize < -  function(x){ 
} 

#训练和测试数据
trainset < -  maxmindf [1:32,] 
testset < -  maxmindf [33:40,] 

神经网络输出

然后我们运行我们的神经网络并生成我们的参数:


  
 Intercept.to.1layhid1 1.401987575173 
capacity.to.1layhid1 1.307794013481 
gasoline.to.1layhid1 -3.102267882386 
hours.to.1layhid1 -3.246720660493 
Intercept.to.1layhid2 -0.897276576566 
capacity.to.1layhid2 -1.934594889387 
gasoline.to。 1layhid2 3.739470402932

hours.to.1layhid2 1.973830465259 
Intercept.to.2layhid1 -1.125920206855 
1layhid.1.to.2layhid1 3.175227041522 
1layhid.2.to.2layhid1 -2.419360506652 
Intercept.to.consumption 0.683726702522 
2layhid.1.to.consumption -0.545431580477 

生成神经网络

以下是我们的神经网络的可视化结果:

模型验证

然后,我们通过比较从神经网络产生的估计汽油消费与测试输出中报告的实际消费来验证(或测试我们模型的准确性):

 

准确性

在下面的代码中,我们然后将数据转换回其原始格式,在平均绝对偏差的基础上产生90%的准确度(即估计和实际汽油消费之间的平均偏差平均为10%)。请注意,我们还将数据转换回标准值,因为它们之前使用max-min标准化方法进行了调整:

predicted=results$prediction * abs(diff(range(consumption))) + min(consumption)
 
accuracy

可以看到我们使用(2,1)隐藏配置获得90%的准确率。这非常好,特别是考虑到我们的因变量是区间格式。但是,让我们看看我们是否可以让它更高!

如果我们现在在神经网络中使用(5,2)隐藏层节点配置会发生什么?这是生成的输出:

accuracy=1-abs(mean(deviation))
accuracy
[1] 0.9577401232

我们看到我们的准确率现已增加到近96%,表明修改隐藏节点的数量已经提高了我们的模型!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/46349.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于PHP+MySQL动漫周边商城销售网站的开发与设计

随着时代的发展,人们对动漫周边产品的关注度越来越高,尤其是对当代的年轻人来说,对一些动漫的手办和玩具等商品都非常的热爱。但是当下时长上的动漫周边产品销售网站还很少,这对钟爱动漫周边产品的来说是一件很痛苦的事情,明明知道一件出现了这些相关产品,但是没有渠道能够购买…

【简单、实用】kubernetes的etcd备份与恢复实现恢复集群配置

学习目标 内容 提示:由于牵涉概念过多,本章主要讲解具体的备份恢复,其他概述 官网:https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster 一. etcd的工作原理 可将其分成两层次:Http层请求、接收消息;剩下的…

家电专用降压DC-DC方案PL8310

PL8310是一个单片36V, 1A降压开关监管机构。PL8310集成了一个36V 250mΩ高侧和一个36V, 140mΩ低侧mosfet提供1A持续负载电流超过4.5V至36V宽工作输入电压带33V输入过电压保护。峰值电流模式控制速度快瞬态响应和逐周电流限制。PL8310具有可配置的线路下降补偿&#xff0c;可配…

CenterNet算法代码剖析

目录 一、图片预处理 1、cv读取原始图片 2、读取图片的中心点 3、计算仿射变化2*3的矩阵 4、基于双线性插值的仿射变化&#xff0c;将原始图片映射到dst图片 5、将原始图片的值归一化到0~1之间 6、使用样本集的mean和std再进行z-score归一化 7、计算特征图的大小&#…

linux mailxdingding机器人报警

前言&#xff1a;采用devops的思想来确认做本文内容目的 作为 <用户角色> 我想要 <结果> 以便于 <目的> 作为运维人员&#xff0c;我想要服务器故障时候能够进行报警&#xff0c;以便于即使处理服务器故障、保障服务器稳定运行 两种方式 邮箱 客户端授权码 …

Kafka - 10 Kafka副本 | 分区副本分配 | 手动调整分区副本 | Leader Partition 负载平衡 | 增加副本因子

文章目录1. 分区副本分配2. 手动调整分区副本3. Leader Partition 负载平衡4. 增加副本因子1. 分区副本分配 如果 kafka 服务器只有 4 个节点&#xff0c;那么设置 kafka 的分区数大于服务器台数&#xff0c;在 kafka底层如何分配存储副本呢&#xff1f; ① 创建 16 分区&…

[附源码]计算机毕业设计springboot高校学生宿舍管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

HashMap(2)-----哈希表

自己实现一个哈希表 class Node { int data;String val;Node next;public Node(int data,String val){ this.valval;this.datadata;} } class myhashtable { Node arr1[];Node headnull;Node tailnull;int count0;private double load0.75;public myhashtable() {this…

ESIM:Enhanced LSTM for Natural Language Inference

原文链接&#xff1a;https://aclanthology.org/P17-1152.pdf 概述 对于自然语言推理任务&#xff0c;Bowman等人在2015年提出了一个大数据集&#xff0c;大多数工作就开始使用神经网络来对该任务进行训练。但作者认为序列模型的潜力还没有完全被挖掘&#xff0c;因此提出了一个…

自建网上商城平台该如何做好运营?

现在很多企业都在自建网上商城系统&#xff0c;但很多都以为建好商城上线就万事大吉了。其实&#xff0c;自建网上商城系统只是一个开始&#xff0c;后期的运营才最重要。如果经营不好&#xff0c;这个商城就白做了&#xff0c;今天小编给大家整理了几个网上商城平台运营方向&a…

[附源码]计算机毕业设计springboot港口集团仓库管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【python】list 删除列表中某个元素的3种方法;附加删除numpy数组中的指定索引元素的方法

方法 python中关于删除list中的某个元素&#xff0c;一般有三种方法: remove、pop、del实例 1.remove: 删除单个元素&#xff0c;删除首个符合条件的元素&#xff0c;按值删除 2.pop: 删除单个或多个元素&#xff0c;按位删除(根据索引删除) 3.del&#xff1a;它是根据索…

校内评奖评优|基于Springboot+Vue实现高校评优管理系统

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

[附源码]计算机毕业设计SpringBoot海南与东北的美食文化差异及做法的研究展示平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

新型超导Fluxonium量子比特正加速量子计算机的创建

量子处理器的一部分&#xff08;图片来源&#xff1a;网络&#xff09; 来自国立科技大学MISIS和鲍曼莫斯科国立技术大学的俄罗斯科学家是世界上最早使用超导Fluxonium量子比特实现双量子比特操作的科学家之一。Fluxonium具有更长的生命周期和更高的操作精度&#xff0c;因此它…

预约陪诊系统开发,跨省就医也能省时省力

就医陪护服务这几年一直受到人们的好评&#xff0c;有了预约陪诊系统开发之后一些无法居家照顾老人的子女可以通过就医陪护为老人预约服务&#xff0c;预约陪诊平台的出现还让陪诊员有了正规的接单平台&#xff0c;不仅方便了人们下单找就医陪诊员还可以对陪诊人员实行正规的管…

树状数组模板2【区间修改,单点询问】(线段树)

题目描述: 已知一个数列&#xff0c;你需要进行下面两种操作&#xff1a; 1.将某区间每一个数数加上x 2.求出该数列某个数的值 输入格式: 第一行包含两个整数N、M&#xff0c;分别表示该数列数字的个数和操作的总个数。 第二行包含N个用空格分隔的整数&#xff0c;其中第…

功率放大器可靠性怎么设计的好

功率放大器可靠性怎么设计怎么做&#xff0c;是很多工程师们心里一直存在的疑惑&#xff0c;像功率放大器这些有源放大电路&#xff0c;工作的可靠性在某些情况下比性能指标更重要。下面就来为大家介绍功率放大器可靠性怎么设计的好。 功率放大器电路设计过程中其可靠性主要分为…

hive报错 Too many bytes before newline: 2147483648

报错 Caused by: java.lang.RuntimeException: java.io.IOException: java.io.IOException: Too many bytes before newline: 2147483648at org.apache.hadoop.mapred.split.TezGroupedSplitsInputFormat$TezGroupedSplitsRecordReader.initNextRecordReader(TezGroupedSplits…

flex布局

flex是flexible Box的缩写&#xff0c;意为”弹性布局”&#xff0c;用来为盒状模型提供最大的灵活性&#xff0c;任何一个容器都可以指定为flex布局。 当我们为父盒子设为flex布局以后&#xff0c;子元素的float、clear和vertical-align属性将失效。 伸缩布局弹性布局伸缩盒布…