首页 > 解决方案 > 使用 keras 的多项式回归

问题描述

嗨,我是 keras 的新手,我只是想知道 ann 对多项式回归任务有什么好处,或者我们应该只使用 sklearn 例如我写这个脚本

import numpy as np
import keras
from keras.layers import Dense
from keras.models import Sequential


x=np.arange(1, 100)
y=x**2

model = Sequential()
model.add(Dense(units=200, activation = 'relu',input_dim=1))
model.add(Dense(units=200, activation= 'relu'))
model.add(Dense(units=1))

model.compile(loss='mean_squared_error',optimizer=keras.optimizers.SGD(learning_rate=0.001))

model.fit(x, y,epochs=2000)

但是在对一些数字进行测试后,我没有得到像这样的好结果:

model.predict([300])
array([[3360.9023]], dtype=float32)

我的代码中是否有任何问题,或者我不应该将 ann 用于多项式回归。谢谢你。

标签: python-3.xkerasregression

解决方案


我不是 100% 肯定,但我认为你得到如此糟糕的预测的原因是因为你没有扩展你的数据。人工神经网络的计算量非常大,因此必须进行缩放。缩放数据,如下所示:

import numpy as np
import keras
from keras.layers import Dense
from keras.models import Sequential


x=np.arange(1, 100)
y=x**2

from sklearn.preprocessing import StandardScaler
sc_x = StandardScaler()
x = sc_x.fit_transform(x)
sc_y = StandardScaler()
y = sc_y.fit_transform(y)

model = Sequential()
model.add(Dense(units=5, activation = 'relu',input_dim=1))
model.add(Dense(units=5, activation= 'relu'))
model.add(Dense(units=1))

model.compile(loss='mean_squared_error',optimizer=keras.optimizers.SGD(learning_rate=0.001))

model.fit(x, y,epochs=75, batch_size=10)

prediction = sc_y.inverse_transform(model.predict(sc_x.transform([300])))
print(prediction)

请注意,我将 epoch 的数量从 2000 更改为 75。这是因为 2000 epoch 对于神经网络来说太高了,并且需要大量时间来训练。您的 X 数据集仅包含 100 个值,因此我建议的最大时期数为 75。

此外,我还将每个隐藏层中的神经元数量从 200 个更改为 5 个。这是因为 200 个神经元对于大多数数据集来说远远不够,更不用说长度为 100 的小数据集了。

这些更改应确保您的神经网络产生更准确的预测。

希望有帮助。


推荐阅读