最近在學深度學習,涉及到神經網路。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 最小二乘擬合問題
資料擬合問題的一般形式 任給一組離散資料 注 這裡的擬合函式不一定為多項式函式 記殘量的平方和為 求使得殘量平方和最小得一組係數就是線性最小二乘問題,為最小二乘問題得基函式,求得的擬合函式為資料的最小二乘擬合。求解 利用偏導數為零得到極值點的原理可以得到最小二乘問題滿足的方程組,求解方程組中未知係數...