zoukankan      html  css  js  c++  java
  • 数学之路(3)-机器学习(3)-机器学习算法-神经网络[14]



    曲线拟合,俗称拉曲线,是一种把现有数据透过数学方法来代入一条数式的表示方式。科学和工程问题可以通过诸如采样、实验等方法获得若干离散的数据,根据这些数据,我们往往希望得到一个连续的函数(也就是曲线)或者更加密集的离散方程与已知数据相吻合,这过程就叫做拟合 (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()
    



  • 相关阅读:
    题解 CF171G 【Mysterious numbers
    题解 P1157 【组合的输出】
    题解 P3955 【图书管理员】
    题解 P2036 【Perket】
    题解 CF837A 【Text Volume】
    题解 CF791A 【Bear and Big Brother】
    题解 CF747A 【Display Size】
    题解 P1332 【血色先锋队】
    题解 P2660 【zzc 种田】
    题解 P4470 【[BJWC2018]售票】
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3285855.html
Copyright © 2011-2022 走看看