实现一个方差跟权值直接确定的简单RBF神经网络。

来源:互联网 发布:ubuntu 16.04 升级 编辑:程序博客网 时间:2024/06/07 02:09
# -*- coding: utf-8 -*-import scipy.io as sio import scipy.linalg as sli #import matplotlib.pyplot as pltfrom pylab import *import numpy as npimport matplotlib.pyplot as plt import numpy as np   #把训练数据中的矩阵变成数组matfn = u'E:\iris_train.mat'  trainMat = sio.loadmat(matfn)  trainMat =mat(trainMat['iris_train'])#统一 地 计 算 和 确 定 训练 样本 各 方 差 σ i ( i = 1, 2, …,n)trainConet = trainMat [:,:4]L = np.zeros((90,90))for i in range(90):    for j in range(90):        L[i][j] =  np.linalg.norm(trainConet[j,:]-trainConet[i,:]) #计算泛数,并把每一行的泛数存放在L数组中  #  定义Lmax存放最大泛数          Lmax = L[0][0]            for i in range(90):    #求出最大值的泛数    for j in range(90):               if L[i][j]>Lmax:             Lmax = L[i][j]oi=Lmax/((2*90)**0.5) #求出方差#基于矩阵伪逆思想直接确定 RBF 网络连接权值 w ijtrainOut = trainMat[:,4:7]#决定输入高基函数ri=exp(-L/(2*oi*oi))t = sli.pinv(ri)wij = t*trainOut###输入测试matfj = u'E:\iris_test.mat' testMat = sio.loadmat(matfj)  testMat =mat(testMat['iris_test'])print testMat[:,4:7]#统一 地 计 算 和 确 定 测试 样本 各 方 差 σ i ( i = 1, 2, …,n)testConet =testMat[:,:4]L2 = np.zeros((60,90))for i in range(60):    for j in range(90):        L2[i][j] =  np.linalg.norm(trainConet[j,:]-testConet[i,:]) #计算泛数,并把每一行的泛数存放在L2矩阵中 #定义L2max存放最大泛数          L2max = L2[0][0]            for i in range(60):    #求出最大值的泛数    for j in range(90):               if L2[i][j]>L2max: L2max = L2[i][j]       oi2=L2max/((2*90)**0.5) #求出方差'''r2 = exp(-L2/(2*oi2*oi2))y = r2*wij  #计算出分类结果for i in range(60):    if y[i,0]==max(y[i,0],y[i,1],y[i,2]):        y[i,0]=1        y[i,1]=0        y[i,2]=0    if y[i,1]==max(y[i,0],y[i,1],y[i,2]):        y[i,0]=0        y[i,1]=1        y[i,2]=0    if y[i,2]==max(y[i,0],y[i,1],y[i,2]):        y[i,0]=0        y[i,1]=0        y[i,2]=1print y##定义一个画图方法:subnum选择画图区域,mat为要画的矩阵!!!def draw(subnum,mat):    plt.sca(subplot(3,2,subnum))    plt.plot(mat)        # 画出测试的数据散点图fig1 = plt.figure()# 分别创立3个子表画4,5,6列的理想输出图和网络输出图draw(1,testMat[:,[4]])draw(3,testMat[:,[5]])draw(5,testMat[:,[6]])draw(2,y[:,0])draw(4,y[:,1])draw(6,y[:,2])plt.show()<span style="white-space:pre"></span>
最近和同学参加了一个数据挖掘的项目,这是一个实现RBF的简单程序。
0 0
原创粉丝点击