gpt4 book ai didi

python - 用 Python 开发神经网络来预测出勤率

转载 作者:行者123 更新时间:2023-11-30 09:17:39 26 4
gpt4 key购买 nike

我对机器学习和神经网络还很陌生。我关注了https://www.analyticsvidhya.com/blog/2017/05/neural-network-from-scratch-in-python-and-r/了解我正在查看的内容的基本概念。

我的目标是根据温度、工作日/周末、下雨、 Storm 、假期、公司事件等因素预测商店的客流量。

我想我可以将其中大部分分解为 0 或 1,例如 0 表示周末、无雨、无 Storm 、无假期、无事件,1 表示工作日、下雨、 Storm 、事件、假期

对于温度,我尝试使用 T-T0/T1-T0 进行归一化,并近似该区域的最大和最小温度

我遇到的一些问题是示例中给出的代码总是返回 0 或 1 之间的值,这让我觉得我必须标准化输出(出勤)。我尝试了与我相同的方式温度,但预测最小值和最大值很困难,即使使用 0 和像 5000 这样荒谬的值(平均值约为 1100),神经网络也不会给出正确的值

我假设这与 Sigmoid 函数有关,我可能需要使用不同的激活函数,但我对此仍然陌生,很容易忽略其他东西

示例数据:

Temp: 104
Rain: 0
Holiday: 0
Weekday: 1
Attendance: 410

Temp: 106
Rain: 0
Holiday: 0
Weekday: 0
Attendance: 2338

Temp: 88
Rain: 1
Holiday: 0
Weekday: 1
Attendance: 361

我最近的代码(我回到原来的代码,因为我的编辑导致它的性能更差)

import numpy as np

#Input array
X=np.array([[.88,1,1,1],[.92,0,0,0],[.56,1,1,1]])

#Output
y=np.array([[410],[2338],[361]])

#Sigmoid Function
def sigmoid (x):
return 1/(1 + np.exp(-x))

#Derivative of Sigmoid Function
def derivatives_sigmoid(x):
return x * (1 - x)

#Variable initialization
epoch=25000 #Setting training iterations
lr=0.1 #Setting learning rate
inputlayer_neurons = X.shape[1] #number of features in data set
hiddenlayer_neurons = 3 #number of hidden layers neurons
output_neurons = 1 #number of neurons at output layer

#weight and bias initialization
wh=np.random.uniform(size=(inputlayer_neurons,hiddenlayer_neurons))
bh=np.random.uniform(size=(1,hiddenlayer_neurons))
wout=np.random.uniform(size=(hiddenlayer_neurons,output_neurons))
bout=np.random.uniform(size=(1,output_neurons))

for i in range(epoch):

#Forward Propogation
hidden_layer_input1=np.dot(X,wh)
hidden_layer_input=hidden_layer_input1 + bh
hiddenlayer_activations = sigmoid(hidden_layer_input)
output_layer_input1=np.dot(hiddenlayer_activations,wout)
output_layer_input= output_layer_input1+ bout
output = sigmoid(output_layer_input)

#Backpropagation
E = y-output
slope_output_layer = derivatives_sigmoid(output)
slope_hidden_layer = derivatives_sigmoid(hiddenlayer_activations)
d_output = E * slope_output_layer
Error_at_hidden_layer = d_output.dot(wout.T)
d_hiddenlayer = Error_at_hidden_layer * slope_hidden_layer
wout += hiddenlayer_activations.T.dot(d_output) *lr
bout += np.sum(d_output, axis=0,keepdims=True) *lr
wh += X.T.dot(d_hiddenlayer) *lr
bh += np.sum(d_hiddenlayer, axis=0,keepdims=True) *lr

print output

预测这一点的好方法是什么?我是否需要改革我的神经网络,或者这个例子就足够了吗?

最佳答案

你的假设是正确的。 sigmoid 函数始终返回 0 到 1 之间的值。显然,这对您来说不是一个好的解决方案,因为您正在处理回归问题(而不是分类问题)。

只需完全放弃激活函数并使用线性函数即可。

  ...
hiddenlayer_activations = hidden_layer_input
...

关于python - 用 Python 开发神经网络来预测出勤率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50824819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com