使用Keras来拟合多项式回归

直接使用numpy来实现多项式回归

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
x = list(np.arange(0,4,0.1))
#给3次多项式添加噪音
y = list(map(lambda val: val**3*3 + np.random.random()*20 , x) )

plt.scatter(x, y)

#指明用3次多项式匹配
w = np.polyfit (x, y, 3)
fn = np.poly1d(w)

#打印适配出来的参数和函数
print(w)
print(fn)

plt.plot(x, fn(x))
[ 3.34727049 -2.08763962  1.78951724 12.1663519 ]
       3         2
3.347 x - 2.088 x + 1.79 x + 12.17





[]

使用Keras来拟合多项式回归_第1张图片

使用一层神经网络来拟合多项式回归

%matplotlib inline
import matplotlib.pyplot as plt
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers.core import Dense, Activation
from keras.layers.advanced_activations import LeakyReLU, PReLU
from keras.optimizers import SGD


model = Sequential()
#神经元个数越多,效果会越好,收敛越快,太少的话难以收敛到所需曲线
model.add(Dense(100, input_shape=(1,)))

#Relu,得到的是一条横线
#Tanh,稍稍好于Relu,但是拟合的不够
#sigmoid, 只要神经元个数足够(50+),训练1000轮以上,就能达到比较好的效果
model.add(Activation('sigmoid'))
#model.add(LeakyReLU(alpha=0.01))
#model.add(Dense(3))

model.add(Dense(1))
model.compile(optimizer="sgd", loss="mse")
model.fit(x, y, epochs=2000, verbose=0)

plt.scatter(x, y)
plt.plot(x, 
         model.predict(x) 
        )
[]

使用Keras来拟合多项式回归_第2张图片

print(type(fn(3)))
print(fn(1))
print(fn(3))

15.215500016873396
89.12245035357121

Code 下载

你可能感兴趣的:(机器学习,Python)