Python 3.x 基于keras的多项式回归

Python 3.x 基于keras的多项式回归,python-3.x,keras,regression,Python 3.x,Keras,Regression,嗨,我是keras的新手,我只是想知道ann适合多项式回归任务还是我们只是 使用sklearn for exmaple我编写此脚本 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, activat

嗨,我是keras的新手,我只是想知道ann适合多项式回归任务还是我们只是 使用sklearn for exmaple我编写此脚本

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来做多项式回归。
谢谢。

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

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)
请注意,我将纪元数从2000改为75。这是因为对于一个神经网络来说,2000个纪元是相当高的,而且需要大量的时间来训练。您的X数据集仅包含100个值,因此我建议的最大纪元数为75

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

这些变化应该确保你的神经网络产生更准确的预测


希望这会有所帮助。

我不是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)
请注意,我将纪元数从2000改为75。这是因为对于一个神经网络来说,2000个纪元是相当高的,而且需要大量的时间来训练。您的X数据集仅包含100个值,因此我建议的最大纪元数为75

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

这些变化应该确保你的神经网络产生更准确的预测

希望这有帮助