Keras实现回归预测(多维度输入输出)

接上次的keras回归预测,由于是自己的实验项目,所以上次把实验代码放上来之后被告知可能会对自己的研究工作有影响,所以之后很久一段时间没有更新后续。后来收到了评论想让我写后续,由于利益相关,所以不能把原版代码完整发出来,所以这里搞了一个demo过来。

老规矩,先上图,部分数据集如下

数据集是一个5输入多维输出的数据表,代码中只用了2个维度作为演示,可以根据自己需求调整。

划分训练集和测试集的数量可以根据自己的数据集大小调整。

归一化的操作的为了防止各维度的数据值相差过大影响预测效果。

还有个注意的点就是,我的数据集是在excel中手动乱序的,如果数据集不能手动乱序,可以使用shuffle函数去乱序。

ANN模型可以自己去调整,我这里没有加验证集,最好是划分出来验证集做对比来判断自己的模型是否过拟合或欠拟合。如果是欠拟合,可以试着增加模型深度,多叠几个网络层比增加神经元效果更猛。如果过拟合,就减小网络深度,然后试着加上一些防止过拟合的操作,比如dropout或者L2正则化之类的。keras对于dropout操作和正则化操作都有很好的封装,基本就是一行代码一个参数的事,主要还是要自己试参。

对于线性回归预测的话,一般只用relu激活,输出层用Linear或者不用激活函数。

demo代码如下:

df_delay=pd.read_excel("data.xlsx")
dataset_delay=df_delay.values
df_delay.head(10)

#划分训练集输入输出
X_delay = dataset_delay[:4000,0:5]
y_delay = dataset_delay[:4000,13:15]

#归一化
scalarX_delay, scalarY_delay = MinMaxScaler(), MinMaxScaler()
scalarX_delay.fit(X_delay)
scalarY_delay.fit(y_delay.reshape(4000,2))
X_delay = scalarX_delay.transform(X_delay)
y_delay = scalarY_delay.transform(y_delay.reshape(4000,2))

#网络架构
model_delay = Sequential()
model_delay.add(Dense(43, input_dim=5, activation='relu'))
model_delay.add(Dense(35, activation='relu'))
model_delay.add(Dense(29, activation='relu'))
model_delay.add(Dense(25, activation='relu'))
model_delay.add(Dense(20, activation='relu'))
model_delay.add(Dense(16, activation='relu'))
model_delay.add(Dense(12, activation='relu'))
model_delay.add(Dense(2, activation='linear'))
model_delay.compile(loss='mse', optimizer='adam')
history = model_delay.fit(X_delay, y_delay, epochs=200, verbose=1)

#测试集
X_test_delay = dataset_delay[4000:,0:5]
y_test_delay = dataset_delay[4000:,13:15]

#归一化
X_test_delay = scalarX_delay.transform(X_test_delay)

#预测
y_trainpred_delay = model_delay.predict(X_delay)

#反归一化   因为预测需要的是实际数值
y_trainpred2_delay = scalarY_delay.inverse_transform(y_trainpred_delay)
y_testpred_delay = model_delay.predict(X_test_delay)
y_testpred2_delay = scalarY_delay.inverse_transform(y_testpred_delay)
y_2_delay = scalarY_delay.inverse_transform(y_delay)

 注意反归一化操作,因为之前做的归一化,所以预测出来的值也是归一化的值而不是实际值,所以要进行一步反归一化来获取实际预测值。

如果还有其他的问题各位佬可以评论留言,小弟尽量解答。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值