python神经网络模型调用后预测值不变_用R语言实现神经网络预测股票实例

用神经网络训练模型

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

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

根据hidden =(2,1)公式将隐藏层数设置为(2,1)

给定自变量对因变量(被除数)的影响假设是非线性的,linear.output变量设置为FALSE

阈值设置为0.01,这意味着如果迭代期间的误差变化小于1%,则模型不会进行进一步的优化

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

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

R

1

2

3

4

nn$result.matrix

plot(nn)

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

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

测试模型的准确性

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

R

1

2

3

4

temp_test

head(temp_test)

nn.results

结果

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

0.9​99985252611

混淆矩阵

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

R

1

2

3

4

5

6

7

8

table(actual,prediction)

prediction

actual01

0170

1320

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

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

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

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

数据规范化

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

R

1

2

3

4

5

6

7

#最大最小标准化

normalize

}

#训练和测试数据

trainset

testset

神经网络输出

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

R

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Intercept.to.1layhid11.401987575173

capacity.to.1layhid11.307794013481

gasoline.to.1layhid1-3.102267882386

hours.to.1layhid1-3.246720660493

Intercept.to.1layhid2-0.897276576566

capacity.to.1layhid2-1.934594889387

gasoline.to。1layhid23.739470402932

hours.to.1layhid21.973830465259

Intercept.to.2layhid1-1.125920206855

1layhid.1.to.2layhid13.175227041522

1layhid.2.to.2layhid1-2.419360506652

Intercept.to.consumption0.683726702522

2layhid.1.to.consumption-0.545431580477

生成神经网络

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

模型验证

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

准确性

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

R

1

2

3

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

accuracy

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

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

R

1

2

3

accuracy=1-abs(mean(deviation))

accuracy

[1]0.9577401232

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 PaddlePaddle 中,训练神经网络模型的代码语句通常包括以下步骤: 1. 定义模型: ```python import paddle.nn as nn class Net(nn.Layer): def __init__(self): super(Net, self).__init__() self.linear = nn.Linear(10, 1) def forward(self, x): y = self.linear(x) return y model = Net() ``` 这里我们定义了一个简单的全连接神经网络模型,包含一层线性层 `linear`。在 `__init__` 方法中,我们定义了模型的结构,并在 `forward` 方法中定义了模型的前向计算过程。 2. 定义损失函数: ```python loss_fn = nn.MSELoss() ``` 这里我们使用均方误差损失函数 `MSELoss()`。 3. 定义优化器: ```python optimizer = paddle.optimizer.SGD(learning_rate=0.001, parameters=model.parameters()) ``` 这里我们使用随机梯度下降优化器 `SGD()`,指定学习率为 `0.001`,同时将模型的参数传递给优化器。 4. 训练模型: ```python for epoch in range(10): for batch_id, data in enumerate(train_loader()): x_data = data[0] y_data = data[1] predicts = model(x_data) loss = loss_fn(predicts, y_data) loss.backward() optimizer.step() optimizer.clear_grad() ``` 这里我们使用一个双重循环,外层循环控制训练轮数,内层循环遍历训练数据集。在每个批次中,我们首先将输入数据 `x_data` 和标签数据 `y_data` 传递给模型,得到预测结果 `predicts`。然后计算预测结果与真实标签之间的损失 `loss`,并调用 `backward()` 方法计算梯度。最后使用优化器 `optimizer` 更新模型参数,并清除当前梯度。 其中,`train_loader()` 是一个生成器函数,用于生成训练数据集中的小批量数据。在 PaddlePaddle 中,可以使用 `paddle.io.DataLoader` 类来构建数据加载器,从而方便地实现批量读取数据。 在训练过程中,还可以使用其他工具,如 `paddle.metric.Accuracy` 类来计算准确率等指标。同时,也可以在训练过程中保存模型参数,以便在之后使用该模型进行测试或部署。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值