最近在学深度学习,涉及到神经网络。python里SciPy包中模块optimize的函数leastsq具有自动求解最小二乘解的能力,用它对形如y=kx+b的加噪直线进行拟合,须指定1个初始值,代码如下:
#%% In[ ]:
import numpy as np
from scipy.optimize import leastsq
import matplotlib.pyplot as plt
import random
X=np.linspace(0,10,50)
k0=random.random()
b0=random.random()
Y=k0*X+b0+np.random.randn(50)
#%% Optimize
def residuals(p,x,y_):
k,b=p
return y_-(k*x+b)
r=leastsq(residuals,[1,0],args=(X,Y))
#%% Test
k,b=r[0]
Yy=k*X+b
plt.plot(X,Y,X,Yy)
plt.show()
拟合结果:

但如果用神经网络,不需要固定模型的函数,但网络本身也是模型,节点、层数多了可能产生过拟合,少了可能欠拟合。这里采用1层隐层,4节点,代码:
import tensorflow as tf
import numpy as np
import random
import matplotlib.pyplot as plt
X=np.linsp