曲线拟合,俗称拉曲线,是一种把现有数据透过数学方法来代入一条数式的表示方式。科学和工程问题可以通过诸如采样、实验等方法获得若干离散的数据,根据这些数据,我们往往希望得到一个连续的函数(也就是曲线)或者更加密集的离散方程与已知数据相吻合,这过程就叫做拟合 (fitting)
多层感知器的神经网络很适合做函数拟合,我们用500个数据点来拟合sin()*0.6函数
>>> runfile(r'H:ook_progann_bpnhalpha.py', wdir=r'H:ook_prog')
Epoch: 100; Error: 0.480138147288;
Epoch: 200; Error: 0.0688657443434;
Epoch: 300; Error: 0.0527599584601;
Epoch: 400; Error: 0.0450977295566;
Epoch: 500; Error: 0.0431671298117;
Epoch: 600; Error: 0.0349699301635;
Epoch: 700; Error: 0.0328906958784;
Epoch: 800; Error: 0.0304049082332;
The maximum number of train epochs is reached
>>>
本博客所有内容是原创,未经书面许可,严禁任何形式的转载
http://blog.csdn.net/u010255642
#!/usr/bin/env python #-*- coding: utf-8 -*- #bp ann 函数拟合sin*0.6 import neurolab as nl import numpy as np import matplotlib.pyplot as plt isdebug=False #x和d样本初始化 train_x =[] d=[] for yb_i in xrange(0,500): train_x.append([np.random.rand()*4*pi-2*pi]) for yb_i in xrange(0,500): d.append(np.sin(train_x[yb_i])*0.6) myinput=np.array(train_x) mytarget=np.array(d) bpnet = nl.net.newff([[-2*pi, 2*pi]], [5, 1]) err = bpnet.train(myinput, mytarget, epochs=800, show=100, goal=0.02) simd=[] for xn in xrange(0,len(train_x)): # print "=====================" # print u"样本:%f=> "%(train_x[xn][0]) simd.append(bpnet.sim([train_x[xn]])[0][0]) # print simd[xn] # print u"--正确目标值--" # print d[xn] # print "=====================" temp_x=[] temp_y=simd temp_d=[] i=0 for mysamp in train_x: temp_x.append(mysamp[0]) temp_d.append(d[i][0]) i+=1 x_max=max(temp_x) x_min=min(temp_x) y_max=max(max(temp_y),max(d))+0.2 y_min=min(min(temp_y),min(d))-0.2 plt.xlabel(u"x") plt.xlim(x_min, x_max) plt.ylabel(u"y") plt.ylim(y_min, y_max) plt.title("http://blog.csdn.net/myhaspl" ) lp_x1 = temp_x lp_x2 = temp_y lp_d = temp_d plt.plot(lp_x1, lp_x2, 'r*') plt.plot(lp_x1,lp_d,'b*') plt.show()