Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

数学之路(3)-机器学习(3)-机器学习算法-神经网络[19]

$
0
0

本博客所有内容是原创,如果转载请注明来源

http://blog.csdn.net/u010255642

我们也可以尝试用多层感知器网络对一组数据建立模型,在输入与输出数据之间建立非线性关系,用神经网络拟合输出数据,训练好后,输入其它值,能得到一个较精确的仿真输出数据
下面是钢包使用次数与容积实测数据
钢包使用次数与容积实测数据
使用次数x 容积y  
2 106.42  
3 108.2  
4 109.58  
5 109.5  
7 110  
8 109.93  
10 110.49  
11 110.59  
14 110.6  
15 110.9  
16 110.7  
18 111  
19 111.2  

我们用多层感知器对这组数据进行训练,以使用次数为输入,以容积为输出,建立它们之间的关系。
部分python代码如下:
#!/usr/bin/env python
#-*- coding: utf-8 -*-
#bp ann
import numpy as np
import matplotlib.pyplot as plt
import random
import copy



isdebug=False


#x和d样本初始化
#x和d样本初始化
train_x =[]
d=[]
f = open("cubage.csv")  
try:  
    f_text = f.read( ) 
finally:  
    f.close( ) 
x_text=f_text.split('\n')
for line_i in xrange(0,len(x_text)):
    line=x_text[line_i]
    if line_i>1 and len(line)>0:
        train_x.append([])
        hdata=line.split(',')
        train_x[line_i-2].append(float(hdata[0]))
        d.append([float(hdata[1])])
    


myinput=np.array(train_x)  
mytarget=np.array(d)
mymax=np.max(d)
tz=(0.1**(len(str(int(mymax)))))*5
myinput=tz*myinput
mytarget=tz*mytarget
train_x=myinput
d=mytarget
......................
def simulate(myx,sigmoid_func,delta_sigfun):
        '''一个样本的仿真计算'''
        print u"仿真计算中"        
        global ann_yi
        global ann_w
        global ann_wj0
        global ann_y0
        global hidelevel_count
        global alllevel_count
        global d
        global mylnww

        myd=d[0]
        

        myx=np.array(myx)
        n=len(myx)


        
        #清空yi输出信号数组        
        hidelevel=hidelevel_count
        alllevel=alllevel_count
        for i in xrange(0,alllevel):
                #第一维是层数,从0开始
                for j in xrange(0,n):
                        #第二维是神经元
                        ann_yi[i][j]=0.0
        ann_yi=np.array(ann_yi)
        yi=ann_yi


        #前向计算

        myy=np.array([])
            

        for nowlevel in xrange(0,alllevel):
                #一层层向前计算
                #计算诱导局部域
                my_y=[]
                myy=yi[nowlevel-1]
                myw=ann_w[nowlevel-1]                
                if nowlevel==0:
                        #第一层隐藏层
                        my_y=myx
                        yi[nowlevel]=my_y                        
                elif nowlevel==(alllevel-1):
                        #线性输出层
                        my_y=o_func(yi[nowlevel-1,:len(myd)])
                        yi[nowlevel,:len(myd)]=my_y                       
                elif nowlevel==(hidelevel-1):
                        #最后一层隐藏输出层
                        for i in xrange(0,len(myd)):
                                temp_y=sigmoid_func(np.dot(myw[:,i],myy))
                                my_y.append(temp_y)                        
    
                        yi[nowlevel,:len(myd)]=my_y 
                else:
                        #中间隐藏层
                        #中间隐藏层需要加上偏置
                        for i in xrange(0,len(myy)):
                                temp_y=sigmoid_func(np.dot(myw[:,i],myy))
                                my_y.append(temp_y)
                        yi[nowlevel]=my_y
        if isdebug:
            print "============="
            print u"***权值矩阵***"  
            print ann_w
            print u"***输出矩阵***" 
            print yi
            print "============="
        return yi[alllevel-1,:len(myd)]


        
        
train()

delta_sigfun=ann_delta_atanh
sigmoid_func=ann_atanh


simd=[]
for xn in xrange(0,len(x)):
        mysimout=simulate(x[xn],sigmoid_func,delta_sigfun)
        simd.append(mysimout[0])


temp_x=[]
temp_d=[]
i=0
for mysamp in train_x:
     temp_x.append(mysamp[0])
     temp_d.append(d[i][0])
     i+=1

simd=np.array(simd)
simd/=tz
temp_x=np.array(temp_x)
temp_x/=tz   
temp_d=np.array(temp_d)
temp_d/=tz  
temp_y=simd
              
x_max=max(temp_x)
x_min=min(temp_x)
y_max=max(temp_y)
y_min=min(temp_y)
    
plt.subplot(211)
plt.xlabel(u"x")
plt.xlim(x_min, x_max)
plt.ylabel(u"y")
plt.ylim(y_min, y_max)
plt.title(u"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*')



errx_max=len(err)
errx_min=1
erry_max=max(err)+0.1
erry_min=0.
plt.subplot(212)
plt.xlabel(u"traincount")
plt.xlim(errx_min, errx_max)
plt.ylabel(u"mse")
plt.ylim(erry_min, erry_max)

lp_x1 = xrange(1,len(err)+1)
lp_x2 = err
plt.plot(lp_x1,lp_x2,'g-')
plt.show()

拟合的效果如下:


作者:u010255642 发表于2013-9-3 21:59:01 原文链接
阅读:14 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>