最近deep learning的研究和话题开始又火了起来。然而我却还停留在RBF神经网络的阶段。真是屌丝得不能再屌丝。对SVM也还是一知半解,机器学习最多也就是个入门级别,看来离成为一名数据科学家和数据工作者的道路还很远。这一周时间在研究神经网络,当然内容是很初级的。所以这篇日志比较适合入门者。我写下它也权当是学习过程的记录。写了点R代码,也共享出来。这篇日记不涉及任何数学公式。RBF在我看来,本质上就是非参数回归模型(参见Element of statistical learning的11章)。依据Cover的理论,它先将数据非线性映射到一个更高维度的空间中,然后再在高维空间用线性模型来做回归或者分类。从而得到一个较好的效果。Vapnik曾经说过,一个好的理论是最为实用的。Cover的理论体现了这一点。Cover理论是说,数据在高维空间更倾向于线性可分的,或者更倾向于用线性模型来拟合。从这个理论出发,发展出来了一系列模型。都取得了不错的效果。RBF神经网络,是首先利用RBF,即径向基函数,来首先将数据映射到一个更高的空间。关于RBF,可以参看我的读书笔记。之后的在高维空间上的线性模型,是比较容易实现的。这里就不多说了。基于上面的描述,RBF神经网络的学习过程包含了两步,第一步要学习RBF的参数。一般来说选择Gaussian函数作为RBF,则其参数包括两个,位置参数和刻度参数,即center和width。最简单的方法是用kmeans聚类,学习出center,而用每个聚类中的方差来作为width的估计。学习完RBF的参数之后,我们需要学习高维空间中线性模型的系数,该系数,可以使用基本的最小二乘方法,但是很可能遇见矩阵求逆很麻烦的情况。因此,往往是用递归最小二乘RLS,给出其中需要求逆的矩阵的一个递归形式,使得计算上比较方便。关于RBF神经网络更多的内容,请参看神经网络与机器学习一书。闲话不多说了,下面直接上代码。代码用R语言写成,其中包含3个函数,simData用来生成模拟的数据,用以RBF网络的训练和检测。Euc_dist用以计算两个向量的欧式距离。mysign则给出某个值的符号。训练RBF的算法即为上述的,最为基础和简单的Kmeans和RLS。simData=function(radius,width,distance,sample_size){aa1=runif(sample_size/2)aa2=runif(sample_size/2)rad=(radius-width/2)+width*aa1theta=pi*aa2x=rad*cos(theta)y=rad*sin(theta)label=1*rep(1,length(x))x1=rad*cos(-theta)+rady1=rad*sin(-theta)-distancelabel1=-1*rep(1,length(x1))n_row=length(x)+length(x1)data=matrix(rep(0,3*n_row),nrow=n_row,ncol=3)data[,1]=c(x,x1)data[,2]=c(y,y1)data[,3]=c(label,label1)data}dataSim=simData(radius=10,width=6,distance=-6,sample_size=3000)plot(dataSim[,1],dataSim[,2],col=ifelse(dataSim[,3]==1,"red","green"),xlab="x",ylab="y")

Euc_dist=function(a,b){sqrt(sum((a-b)^2))}mysign=function(d){1*(d>=0)+(-1)*(d<0)}#############算法主体部分######################################num_input=dim(dataSim)[2]-1 #输入训练样本为矩阵num_hidden_node=6 #隐层结点数num_out=1 #输出层结点数data_train=dataSimnum_train=dim(data_train)[1]########初始化c_threshold=1e-3c_delta=Infw=matrix(rep(0,num_hidden_node*num_out),nrow=num_hidden_node,ncol=num_out) #权重矩阵sig=0.01P=matrix(rep(0,6^2),nrow=6) #RLS算法中的R^-1for(i in 1:6){P[i,i]=1*sig^(-1)}c=simData(radius=10,width=6,distance=-6,sample_size=num_hidden_node) #RBF中心的初值c=c[,-3]iter_train_min=10 #训练次数epochs=50 #轮次w_threshold=1e-8mse_threshold=1e-6w_delta=Infn=1m=1eta=1 #学习速率err=0 #错误检测计数器pos_vector=rep(1,num_train) #位置向量,用以标记属于某个聚类的样本的位置mse=vector()ee=vector()################Kmeans算法while(c_delta>c_threshold && n<=num_train){x=data_train[n,-3]y=data_train[n,3]eu_dist=vector()for(i in 1:num_hidden_node){eu_dist[i]=Euc_dist(x,c[i,])}eu_min_value=min(eu_dist)eu_min_pos=order(eu_dist)[1]c[eu_min_pos,]=c[eu_min_pos,]+eta*(x-c[eu_min_pos,])pos_vector[n]=eu_min_posn=n+1}############计算每个聚类中的方差tem_vec=vector()sigma=vector()for(i in 1:num_hidden_node){tem_vec=(pos_vector==i)dist_temp=0for(j in 1:num_train){if(tem_vec[j]==TRUE)dist_temp=Euc_dist(c[i,],data_train[j,-3])+dist_temp}sigma[i]=dist_temp/sum(tem_vec)}g=matrix(rep(0,num_hidden_node),nrow=num_hidden_node)#####################训练输出层权重for(epoch in 1:epochs){random_seq=sample(seq(1:num_train),replace=FALSE)data_randomized_tr=data_train[random_seq,]for(m in 1:num_train){x=data_randomized_tr[m,-3]d=data_randomized_tr[m,3]for(i in 1:num_hidden_node)g[i,]=exp(-t(x-c[i,])%*%(x-c[i,])/(2*sigma[i]^2))#########RLS算法pai=P%*%gkk=pai/(1+t(g)%*%pai)[1,1]e=d-mysign(t(w)%*%g)w_delta=t(kk*e[1,1])ee[m]=d-mysign(t(w)%*%g)w=w+t(w_delta)P=P-kk%*%t(g)%*%P}mse[epoch]=mean(ee^2)if(mse[epoch]1e-6)err=err+1}err/num_test最后得到的效果还行,3000个训练样本,2000个检测样本,最终分类错误率在8%以内。当然,由于随机数,如果你在自己机器上跑上述代码,获得的结果应该与我的不同。上一篇:R语言学习系列(数据挖掘之决策树算法实现--ID3代码篇)

下一篇:用R语言求置信区间

rbf神经网络 c语言,RBF神经网络极简介绍及其算法R语言实现相关推荐

  1. R极简教程-10:R语言绘图基础

    R语言最强大的一点就是画图,那个无比强大的画图系统,再加上各种各样的神级R包,让我写R语言中最喜欢的一点就是写绘图代码. 简单来说,R语言原生的绘图系统已经非常强大了,根本不需要其他东西的辅助,就可以 ...

  2. 统计学习导论之R语言应用(四):分类算法R语言代码实战

    统计学习导论之R语言应用(ISLR) 参考资料: The Elements of Statistical Learning An Introduction to Statistical Learnin ...

  3. 前馈神经网络_BP算法+R语言程序运行实例

    前馈神经网络_BP算法+R语言程序运行实例 目录 关于神经网络的介绍 前馈神经网络 应用到机器学习 参数学习 误差反向传播 程序实例(R语言) 前言 今天是小白学习神经网络的第一次博客文章,希望以后的 ...

  4. r语言x c(-1 -2),【软件】R语言入门之向量

    "R语言入门开篇,向量(vector)相关知识的介绍" R语言是一款优秀统计学编程语言,本文介绍R语言的几个重要命令,以及R语言中非常重要的一种数据结构-向量(Vector)的相关 ...

  5. r语言library什么意思_医学统计与R语言:百分条图与雷达图

    微信公众号:医学统计与R语言如果你觉得对你有帮助,欢迎转发 百分条图-输入1: library(ggplot2) 结果1: year 输入2: percentbar <- gather(perc ...

  6. 语言nomogram校准曲线图_医学统计与R语言:Meta 回归作图(Meta regression Plot)

    微信公众号:医学统计与R语言如果你觉得对你有帮助,欢迎转发 输入1: install.packages("metafor") library(metafor) dat.bcg 结果 ...

  7. r 语言 ggplot上添加平均值_技术贴 | R语言:ggplot堆叠图、冲积图、分组分面、面积图...

    点击蓝字↑↑↑"微生态",轻松关注不迷路 利用R语言堆叠图,我们可以将一个项目中所有样品的物种组成展示出来.下面介绍如何利用R语言进行物种组成分析和可视化.过程分为以下几步: 1) ...

  8. r语言nonzerocoef函数_lars算法R语言操作指南.pdf

    lars算法R语言操作指南.pdf Package 'lars' February 20, 2015 Type Package Version 1.2 Date 2013-04-23 Title Le ...

  9. R语言学习笔记——入门篇:第一章-R语言介绍

    R语言 R语言学习笔记--入门篇:第一章-R语言介绍 文章目录 R语言 一.R语言简介 1.1.R语言的应用方向 1.2.R语言的特点 二.R软件的安装 2.1.Windows/Mac 2.2.Lin ...

  10. R语言与数据分析练习:创建和使用R语言数据集数据的导入导出

    R语言与数据分析练习:创建和使用R语言数据集&数据的导入导出 实验一 创建和使用R语言数据集 一.实验目的: 了解R语言中的数据结构. 熟练掌握他们的创建方法,和函数中一些参数的使用. 对创建 ...

最新文章

  1. springboot整合hibernate_峰哥说技术系列-17 .Spring Boot 整合 Spring Data JPA
  2. java 字段映射注解_mybatis注解开发中实体属性和表字段不对应问题
  3. tomcat源码阅读之StandardHost和StandardEngine
  4. 正则基础之——神奇的转义
  5. 连通图遍历策略之广度优先搜索(C语言)
  6. virtualbox+oracle linux 6.3 下安装oracle 11.2.3.0
  7. 基本的SVG样式属性
  8. pdf在线翻译_如何将英文的PDF文档翻译成中文简体?
  9. JavaWeb学习之路
  10. java购物系统需求分析_java网上购物系统需求分析.doc
  11. IOS-objectiveC【语法】修饰符 static extern const
  12. mysql 日文乱码_Mysql 导入日文数据乱码问题
  13. 第6章 Stata方差分析
  14. [转载]视频格式介绍
  15. L1-7 机工士姆斯塔迪奥【C语言】
  16. django之 报错(1146, “Table ‘demo2.web‘ doesn‘t exist“)
  17. FleaPHP 开发指南 - 3. 应用程序入口
  18. python自动刷手机视频_万能自动刷视频
  19. mysql错误代码145_MYSQL 错误#145解决方法
  20. Ubuntu18.04使用Systemback制作系统镜像并还原(亲测)

热门文章

  1. MySQL设计说明书_数据库详细设计说明书-模板.doc
  2. 最新版chrome安装adblock插件
  3. Stata | 初试
  4. BT601 BT656 BT709 BT1120 解析
  5. 【知识点总结】大数据技术原理与应用
  6. Appium desktop下载安装
  7. 《Redis开发与运维》----- 客户端
  8. Gridgen v15 中文教程
  9. 网上测试性格的软件依据是什么意思,(观点)mbti性格测试如此流行,它有科学依据吗?...
  10. Matlab颜色对照(RGB三元组、十六进制表示)