RBFNN训练

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
import eva
import datetimestart = datetime.datetime.now()def tanh(x):return (np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x))
def de_tanh(x):return (1-x**2)#参数设置
samnum = 62
hiddenunitnum = 8
indim = 4
outdim = 1
maxepochs = 100
errorfinal = 0.65*10**(-3)
learnrate = 0.0001df = pd.read_csv("./data/Cr1.csv")  # 返回一个DataFrame的对象,这个是pandas的一个数据结构
df.columns = ["x", "y", "high", "use", "Cr"]
longtitude = df["x"] # 抽取前四列作为训练数据的各属性值
longtitude = np.array(longtitude)
latitude = df["y"]
latitude = np.array(latitude)
elevation = df["high"]
elevation =np.array(elevation)
functional = df["use"]
functional = np.array(functional)
ag=df["Cr"]
ag=np.array(ag)samplein = np.mat([longtitude,latitude,elevation,functional])  #4*1000
sampleinminmax = np.array([samplein.min(axis=1).T.tolist()[0],samplein.max(axis=1).T.tolist()[0]]).transpose()#对应最大值最小值
sampleout = np.mat([ag])
sampleoutminmax = np.array([sampleout.min(axis=1).T.tolist()[0],sampleout.max(axis=1).T.tolist()[0]]).transpose()#对应最大值最小值
sampleinnorm = ((np.array(samplein.T)-sampleinminmax.transpose()[0])/(sampleinminmax.transpose()[1]-sampleinminmax.transpose()[0])).transpose()
sampleoutnorm = ((np.array(sampleout.T)-sampleoutminmax.transpose()[0])/(sampleoutminmax.transpose()[1]-sampleoutminmax.transpose()[0])).transpose()sampleinmax = np.array([sampleinnorm.max(axis=1).T.tolist()]).transpose()
sampleinmin = np.array([sampleinnorm.min(axis=1).T.tolist()]).transpose()
sampleoutmax = np.array([sampleoutnorm.max(axis=1).T.tolist()]).transpose()
sampleoutmin = np.array([sampleoutnorm.min(axis=1).T.tolist()]).transpose()
noise = 0.03*np.random.rand(sampleoutnorm.shape[0],sampleoutnorm.shape[1])
sampleoutnorm += noisex = sampleinnorm.transpose()
estimator=KMeans(n_clusters=8,max_iter=10000)
estimator.fit(x)
w1 = estimator.cluster_centers_#b为8*1
b1 = np.mat(np.zeros((hiddenunitnum,outdim)))
for i in range(hiddenunitnum):cmax = 0for j in range(hiddenunitnum):temp_dist=np.sqrt(np.sum(np.square(w1[i,:]-w1[j,:])))if cmax<temp_dist:cmax=temp_distb1[i] = cmax/np.sqrt(2*hiddenunitnum)#生成方法1
scale = np.sqrt(3/((indim+outdim)*0.5))
w2 = np.random.uniform(low=-scale,high=scale,size=[hiddenunitnum,outdim])
b2 = np.random.uniform(low=-scale, high=scale, size=[outdim,1])inputin=np.mat(sampleinnorm.T)
w1=np.mat(w1)
b1=np.mat(b1)
w2=np.mat(w2)
b2=np.mat(b2)errhistory = np.mat(np.zeros((1,maxepochs)))
#开始训练
for i in range(maxepochs):hidden_out = np.mat(np.zeros((samnum,hiddenunitnum)))
#前向计算:for a in range(samnum):for j in range(hiddenunitnum):d=(inputin[a, :] - w1[j, :]) * (inputin[a, :] - w1[j, :]).Tc=2 * b1[j, :] * b1[j, :]hidden_out[a, j] = np.exp((-1.0 )* (d/c))# print(hidden_out.shape,"33333333333")output = tanh(hidden_out * w2 + b2)# output = sigmod(hidden_out * w2)# 计算误差out_real = np.mat(sampleoutnorm.transpose())err = out_real - outputloss = np.sum(np.square(err))if loss < errorfinal:breakerrhistory[:,i] = loss
#反向计算output=np.array(output.T)belta=de_tanh(output).transpose()dw1now = np.zeros((8,4))db1now = np.zeros((8,1))dw2now = np.zeros((8,1))db2now = np.zeros((1,1))for j in range(hiddenunitnum):sum1 = 0.0sum2 = 0.0sum3 = 0.0sum4 = 0.0for a in range(samnum):#1*4sum1 +=err[a,:] * belta[a,:] * hidden_out[a,j] * (inputin[a,:]-w1[j,:])#1*1sum2 +=err[a,:] * belta[a,:] * hidden_out[a,j] * (inputin[a,:]-w1[j,:])*(inputin[a,:]-w1[j,:]).T#1*1sum3 +=err[a,:] * belta[a,:] * hidden_out[a,j]sum4 +=err[a,:] * belta[a,:]dw1now[j,:]=(w2[j,:]/(b1[j,:]*b1[j,:])) * sum1db1now[j,:] =(w2[j,:]/(b1[j,:]*b1[j,:]*b1[j,:])) * sum2dw2now[j,:] =sum3db2now = sum4w1 += learnrate * dw1nowb1 += learnrate * db1noww2 += learnrate * dw2nowb2 += learnrate * db2nowprint("the iteration is:",i+1,",the loss is:",loss)print('更新的权重w1:',w1)
print('更新的偏置b1:',b1)
print('更新的权重w2:',w2)
print('更新的偏置b2:',b2)
print("The loss after iteration is :",loss)np.save("RBFNN_w1.npy",w1)
np.save("RBFNN_b1.npy",b1)
np.save("RBFNN_w2.npy",w2)
np.save("RBFNN_b2.npy",b2)
np.save("RBFNN_rbf_err.npy",errhistory)diff = sampleoutminmax[:,1]-sampleoutminmax[:,0]
predict_train = (output+1)/2
predict_train = predict_train*diff+sampleoutminmax[0][0]
predict_train = predict_train.flatten()#降成一维数组
np.savetxt('./result/RBFNN/predict_train.csv', predict_train, delimiter = ',')err_train =  ag - predict_train
# print("err1:",err_train)
np.savetxt('./result/RBFNN/err_train.csv', err_train, delimiter = ',')rmse, mae, mape = eva.err(ag, predict_train)
# print("mape:",mape)
error_train = np.zeros(3)
error_train[0] = rmse
error_train[1] = mae
error_train[2] = mape
print("error:",error_train)
np.savetxt('./result/RBFNN/error_train.csv', error_train, delimiter = ',')end = datetime.datetime.now()
time = end - start
print("运行时间总计:",time)

RBFNN预测数据(回归)

import numpy as np
import pandas as pd
import datetime
import eva
start = datetime.datetime.now()def tanh(x):return (np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x))
def de_tanh(x):return (1-x**2)testnum = 20
hiddenunitnum = 8df = pd.read_csv("./data/Cr2.csv")
df.columns = ["x", "y", "high", "use", "Cr"]
longtitude = df["x"]
longtitude = np.array(longtitude)
latitude = df["y"]
latitude = np.array(latitude)
elevation = df["high"]
elevation =np.array(elevation)
functional = df["use"]
functional = np.array(functional)
As=df["Cr"]
As=np.array(As)
ag=As#对数据进行最大最小归一化处理,mat为矩阵,t.tolist将矩阵转换成列表,然后由array转换成数组
samplein = np.mat([longtitude,latitude,elevation,functional])  #4*1000
# print("ag:\n",samplein)
#4*2
sampleinminmax = np.array([samplein.min(axis=1).T.tolist()[0],samplein.max(axis=1).T.tolist()[0]]).transpose()#对应最大值最小值
# print("sampleinminmax:\n",sampleinminmax)
sampleout = np.mat([ag])#1*299
# print("sampleout:\n",sampleout)
sampleoutminmax = np.array([sampleout.min(axis=1).T.tolist()[0],sampleout.max(axis=1).T.tolist()[0]]).transpose()#对应最大值最小值,4*299
# print("sampleoutminmax:\n",sampleoutminmax)
sampleinnorm = (2*(np.array(samplein.T)-sampleinminmax.transpose()[0])/(sampleinminmax.transpose()[1]-sampleinminmax.transpose()[0])-1).transpose()#1*299
# print("sampleinnorm:\n",sampleinnorm)
sampleoutnorm = (2*(np.array(sampleout.T)-sampleoutminmax.transpose()[0])/(sampleoutminmax.transpose()[1]-sampleoutminmax.transpose()[0])-1).transpose()
# print("sampleoutnorm:\n",sampleoutnorm)
#给输出样本添加噪音
noise = 0.03 * np.random.rand(sampleoutnorm.shape[0],sampleoutnorm.shape[1])
sampleoutnorm += noise
# print("noise:\n",noise)
# print("sampleoutnorm:\n",sampleoutnorm)#测试w1=np.load('w1.npy')
w2=np.load('w2.npy')
b1=np.load('b1.npy')
b2=np.load('b2.npy')
w1 = np.mat(w1)
w2 = np.mat(w2)
b1 = np.mat(b1)
b2 = np.mat(b2)df = pd.read_csv("./data/Cr1.csv")  # 返回一个DataFrame的对象,这个是pandas的一个数据结构
df.columns = ["x", "y", "high", "use", "Cr"]
longtitude = df["x"] # 抽取前七列作为训练数据的各属性值
longtitude = np.array(longtitude)
latitude = df["y"]
latitude = np.array(latitude)
elevation = df["high"]
elevation =np.array(elevation)
functional = df["use"]
functional = np.array(functional)
As=df["Cr"]
As=np.array(As)
input=np.mat([longtitude,latitude,elevation,functional])
inputnorm=(np.array(input.T)-sampleinminmax.transpose()[0])/(sampleinminmax.transpose()[1]-sampleinminmax.transpose()[0])hidden_out2 = np.mat(np.zeros((testnum,hiddenunitnum)))for a in range(testnum):for j in range(hiddenunitnum):d = (inputnorm[a, :] - w1[j, :]) * (inputnorm[a, :] - w1[j, :]).Tc = 2 * b1[j, :] * b1[j, :].Thidden_out2[a, j] = np.exp((-1.0) * (d / c))
output = tanh(hidden_out2 * w2 + b2)diff = sampleoutminmax[:,1]-sampleoutminmax[:,0]
networkout2 = output*diff+sampleoutminmax[0][0]
networkout2 = np.array(networkout2).transpose()
output1=networkout2.flatten()
output1=output1.tolist()# diff = sampleoutminmax[:,1]-sampleoutminmax[:,0]
# networkout2 = (output+1)/2
# networkout2 = networkout2*diff+sampleoutminmax[0][0]
# output1=networkout2.flatten()#降成一维数组
# # print("output1",output1)
# output1=output1.tolist()np.savetxt('./result/RBFNN/predict_test.csv', output1, delimiter = ',')err_test =  ag - output1
np.savetxt('./result/RBFNN/err_test.csv', err_test, delimiter = ',')rmse, mae, mape = eva.err(ag, output1)
print("mape:",mape)
error_train = np.zeros(3)
error_train[0] = rmse
error_train[1] = mae
error_train[2] = mape
# print("error:",error)
np.savetxt('./result/RBFNN/error_test.csv', error_train, delimiter = ',')# 精度保持两位
for i in range(testnum):output1[i] = float('%.2f'%output1[i])end = datetime.datetime.now()
time = end - start
print("运行时间总计:",time)print("the prediction is:",output1)

机器学习之径向基神经网络相关推荐

  1. 【机器学习】径向基(RBF)神经网络的tensorflow实现

    [机器学习]径向基(RBF)神经网络的tensorflow实现 一.tensorflow简介 1.1.基础概念 1.1.1计算图 1.1.2 Session会话 1.2.应用流程 二.RBF神经网络的 ...

  2. 机器学习 | MATLAB实现RBF径向基神经网络newrbe参数设定

    机器学习 | MATLAB实现RBF径向基神经网络newrbe参数设定 目录 机器学习 | MATLAB实现RBF径向基神经网络newrbe参数设定 基本介绍 函数描述 寄语生活 参考资料 开心一刻 ...

  3. 径向基神经网络(RBFNN)的实现(Python,附源码及数据集)

    文章目录 一.理论基础 1.径向基神经网络结构 2.前向传播过程 3.反向传播过程 4.建模步骤 二.径向基神经网络的实现 1.训练过程(RBFNN.py) 2.测试过程(test.py) 3.测试结 ...

  4. 深度学习 --- 径向基神经网络RBF详解

    上一节我们基本上打开了深度学习的大门,其实下一步应该是卷积神经网络即CNN了,但是呢卷积神经网络的最后一层采用的是径向基神经网络,为了以后到CNN不用再费力气将RBF和保持CNN的整体性和连贯性,因此 ...

  5. 径向基神经网络(实例故障分类)

    径向神经网络的创建: 调用格式: net=newrbe(p,t,spread) -------------------p  t分别为输入和输出样本,spread  为径向神经网络的散布常数 或者更高效 ...

  6. 【水位预测】基于matlab径向基神经网络地下水位预测【含Matlab源码 1939期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[水位预测]基于matlab径向基神经网络地下水位预测[含Matlab源码 1939期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方 ...

  7. 数据拟合 | MATLAB实现RBF径向基神经网络多输入数据拟合

    数据拟合 | MATLAB实现RBF径向基神经网络多输入数据拟合 目录 数据拟合 | MATLAB实现RBF径向基神经网络多输入数据拟合 基本介绍 程序设计 模型差异 参考资料 基本介绍 RBF神将网 ...

  8. 2-1径向基神经网络(RBF)代码

    点击查看完整代码http://www.daimapi.com/neuralnetwork2_1/ 径向基神经网络(Radial Basis Function Network),简写为RBF,该代码不使 ...

  9. 回归预测 | MATLAB实现RBF径向基神经网络多输入单输出

    回归预测 | MATLAB实现RBF径向基神经网络多输入单输出 目录 回归预测 | MATLAB实现RBF径向基神经网络多输入单输出 预测效果 基本介绍 模型结构 程序设计 参考资料 预测效果 基本介 ...

最新文章

  1. 如何使用Twitter Bootstrap获得中心内容?
  2. Ethernet II帧格式
  3. pip install pygame_使用 Python 和 Pygame 模块构建一个游戏框架!
  4. MAC电脑:安装mysql报ERROR 1045 (28000)Access denied
  5. ele表格操作区根据数据_Vue数据绑定
  6. python枪战项目计划书_人肉(共享)代购项目计划书(示例代码)
  7. java jar killed_容器中Java 程序OOMKilled原因浅析
  8. 【swupdate文档 五】从可信的来源更新镜像
  9. 语音识别 AI 挑战赛上线:用深度学习三种结构,对 50 种环境声音分类!
  10. [SQL]LeetCode180. 连续出现的数字 | Consecutive Numbers
  11. restapi(3)- MongoDBEngine : MongoDB Scala编程工具库
  12. Java 枚举和泛型
  13. POJ - 1625 Censored!(AC自动机+dp+高精度运算)
  14. python课后感想_谈谈对Python的感想
  15. No7.基本数据类型的包装类
  16. 【完整的WebGIS教程】7.1 ArcGIS API for JS行政区划导航(上)
  17. 第十二周 任务三
  18. 由一份诊断报告引发的思考
  19. python绘图打码_python实现的利用打码兔和超人打码封装的打码类
  20. 股价猛涨市值翻倍,百度熬过低谷了吗?

热门文章

  1. 2021年高考成绩查询梧州市,2021年梧州高考状元名单公布 今年梧州高考状元是谁资料和分数...
  2. noj 2112 拯救活动室的男女比例(最大费用最大流)
  3. 设置apps默认导包路径
  4. python进制运算
  5. Java String字符串转int数组
  6. 100行代码实现英语四六级高频单词的统计
  7. 【JS】DOM事件模型
  8. orange+pi+android+7,全志H6四核1.8GHZ的Orange pi 3来了!新一代ARM开发板,64位系统级芯片......
  9. 二叉堆简单实现与应用
  10. Android通讯录开发之通讯录联系人搜索功能最新实现,kotlin入门到精通pdf