python最小二乘和神經網路擬合曲線比較

2021-08-09 05:21:50 字數 2420 閱讀 3561

最近在學深度學習,涉及到神經網路。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.linspace(0,10,50,dtype=np.float)

k0=random.random()

b0=random.random()

y=k0*x+b0+np.random.randn(50)

# reshape

x=np.reshape(x,(50,1))

y=np.reshape(y,(50,1))

#%% ann

with tf.name_scope('input'):

x_in=tf.placeholder('float',shape=[none,1])

y_in=tf.placeholder('float',shape=[none,1])

with tf.name_scope('layer'):

w1=tf.variable(tf.random_normal([1,4],mean=1,stddev=0.2),name='w1')

b1=tf.variable(tf.constant(0.1,shape=[4],dtype=tf.float32),name='b1')

out1=tf.nn.sigmoid(tf.add(tf.matmul(x_in,w1),b1))

with tf.name_scope('output'):

w2=tf.variable(tf.random_normal([4,1],mean=1,stddev=0.2),name='w2')

b2=tf.variable(tf.constant(0.1,shape=[1],dtype=tf.float32),name='b2')

out2=tf.add(tf.matmul(out1,w2),b2)

with tf.name_scope('evaluate'):

loss=tf.reduce_mean(tf.square(out2-y_in))

trainstep=tf.train.gradientdescentoptimizer(0.1).minimize(loss)

#%% train

with tf.session() as sess:

step=0

sess.run(tf.global_variables_initializer())

while step<100:

tstep=sess.run(trainstep,feed_dict=)

if step%3==0:

loss=sess.run(loss, feed_dict=)

print('train step: ',tstep)

print('loss: ',loss)

step+=1

# print(sess.run(w1))

# print(sess.run(b1))

# print(sess.run(w2))

# print(sess.run(b2))

# test

y_=sess.run(out2,feed_dict=)

plt.plot(x,y,x,y_)

plt.show()

神經網路的擬合結果:

原 python最小二乘

import numpy as np from scipy.optimize import leastsq 取樣點 xi,yi xi np.array 8.19,2.72,6.39,8.71,4.7,2.66,3.78 yi np.array 7.01,2.78,6.47,6.71,4.1,4.23...

最小二乘 加權最小二乘 matlab實現

最小二乘 最小二乘法 又稱最小平方法 是一種數學優化技術。它通過最小化誤差的平方和尋找資料的最佳函式匹配。利用最小二乘法可以簡便地求得未知的資料,並使得這些求得的資料與實際資料之間誤差的平方和為最小 最小二乘法還可用於曲線擬合,其他一些優化問題也可通過最小化能量或最大化熵用最小二乘法來表達。加權最小...

最小二乘擬合 6 7 最小二乘擬合問題

資料擬合問題的一般形式 任給一組離散資料 注 這裡的擬合函式不一定為多項式函式 記殘量的平方和為 求使得殘量平方和最小得一組係數就是線性最小二乘問題,為最小二乘問題得基函式,求得的擬合函式為資料的最小二乘擬合。求解 利用偏導數為零得到極值點的原理可以得到最小二乘問題滿足的方程組,求解方程組中未知係數...