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()
    



  • 相关阅读:
    hdu 5795 A Simple Nim 博弈sg函数
    hdu 5724 Chess 博弈sg+状态压缩
    hdu 3094 A tree game 树上sg
    2017"百度之星"程序设计大赛
    hdu 6134 Battlestation Operational 莫比乌斯反演
    HDU 6143 Killer Names DP+快速密
    HDU 6107 Typesetting 倍增
    HDU 6096 String 排序 + 线段树 + 扫描线
    HDU 6086 Rikka with String AC自动机 + DP
    HDU 6073 Matching In Multiplication dfs遍历环 + 拓扑
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3285855.html
Copyright © 2011-2022 走看看