赞
踩
接上次的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)
注意反归一化操作,因为之前做的归一化,所以预测出来的值也是归一化的值而不是实际值,所以要进行一步反归一化来获取实际预测值。
如果还有其他的问题各位佬可以评论留言,小弟尽量解答。。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。