RBF网络的matlab实现

2023-11-18

一、用工具箱实现函数拟合

参考:http://blog.csdn.net/zb1165048017/article/details/49407075

(1)newrb()

该函数可以用来设计一个近似径向基网络(approximate RBF)。调用格式为:

[net,tr]=newrb(P,T,GOAL,SPREAD,MN,DF)

其中P为Q组输入向量组成的R*Q位矩阵,T为Q组目标分类向量组成的S*Q维矩阵。GOAL为均方误差目标(Mean Squard Error Goal),默认为0.0;SPREAD为径向基函数的扩展速度,默认为1;MN为神经元的最大数目,默认为Q;DF维两次显示之间所添加的神经元数目,默认为25;ner为返回值,一个RBF网络,tr为返回值,训练记录。

用newrb()创建RBF网络是一个不断尝试的过程(从程序的运行可以看出来),在创建过程中,需要不断增加中间层神经元的和个数,知道网络的输出误差满足预先设定的值为止。

(2)newrbe()

该函数用于设计一个精确径向基网络(exact RBF),调用格式为:

net=newrbe(P,T,SPREAD)

其中P为Q组输入向量组成的R*Q维矩阵,T为Q组目标分类向量组成的S*Q维矩阵;SPREAD为径向基函数的扩展速度,默认为1

和newrb()不同的是,newrbe()能够基于设计向量快速,无误差地设计一个径向基网络。

(3)radbas()

该函数为径向基传递函数,调用格式为

A=radbas(N)

info=radbas(code)

其中N为输入(列)向量的S*Q维矩阵,A为函数返回矩阵,与N一一对应,即N的每个元素通过径向基函数得到A;info=radbas(code)表示根据code值的不同返回有关函数的不同信息。包括

derive——返回导函数的名称

name——返回函数全称

output——返回输入范围

active——返回可用输入范围

使用exact径向基网络来实现非线性的函数回归:

%%清空环境变量  
clc
clear
%%产生输入输出数据  
%设置步长  
interval=0.01;
%产生x1,x2  
x1=-1.5:interval:1.5;
x2=-1.5:interval:1.5;
%按照函数先求的响应的函数值,作为网络的输出  
F=20+x1.^2-10*cos(2*pi*x1)+x2.^2-10*cos(2*pi*x2);
%%网络建立和训练  
%网络建立,输入为[x1;x2],输出为F。spread使用默认  
net=newrbe([x1;x2],F);
%%网络的效果验证  
%将原数据回带,测试网络效果  
ty=sim(net,[x1;x2]);
%%使用图像来看网络对非线性函数的拟合效果  
figure
plot3(x1,x2,F,'rd');
hold on;
plot3(x1,x2,ty,'b-.');
view(113,36);
title('可视化的方法观察严格的RBF神经网络的拟合效果');
xlabel('x1')
ylabel('x2')
zlabel('F')
grid on

  结果:

二、自编函数实现拟合

clear;
%X=1:100;
X=[-4*pi:0.07*pi:8*pi];  
P=length(X);
Y=[];
M=10; 
centers=[];
deltas=[]; 
weights=[];
set = {}; 
gap=0.1; 
%**************************************************************************  
%构造训练样本X,Y  
X=[-4*pi:0.07*pi:8*pi];  
for i=1:P  
    Y(i)=sin(X(i));
end  
%**************************************************************************  
for i=1:M                          %先随意初始化M个中心点
    centers(i)= X( i*floor( P/10 ) );  
end  
done=0;  
while(~done)  
    for i=1:M  
       set{i}=[];  
    end  
    for i=1:P  
        distance=100;
        for j=1:M  
            curr=abs(X(i)-centers(j));  
            if curr<distance  
                sets=j;  
                distance=curr;  
            end  
        end  
        set{sets}=[set{sets},X(i)];        %聚类,找出M个中心点,并且样本分布在这十个点周围
    end 
    for i=1:M  
        new_centers(i)=sum(set{i})/length(set{i}); %重新计算中心点:M个类里每个类的中心点  
    end  
    done=0;  
     for i=1:M  
          sum1(i)=abs(centers(i)-new_centers(i));
     end  
     if sum(sum1)>gap  
            done=0;      %不断循环,直到找到最佳的中心点;
            centers=new_centers;  
     else  
            done=1;  
     end     
end

for i=1:M
    curr=abs( centers-centers(i));  
    [curr_2,b]=min(curr);  
    curr(b)=100;  
    curr_2=min(curr);  
    deltas(i)=1*curr_2;  
end
%{
for i=1:M
    sum=0;
    num=length(set{i});
    for j=1:num
        sum=sum+(set{i}(j)-centers(i))^2;
    end
    deltas(i)=(sum)^0.5/num;
end 
%}
for i=1:P  
    for j=1:M  
        curr=abs(X(i)-centers(j));  
        K(i,j)=exp( -curr^2/(2*deltas(j)^2) );  %隐含层的输出
    end  
end  
%计算权值矩阵  
weights=inv(K'*K)*K'*Y';  
%**************************************************************************  
%测试计算出函数的情况  
x_test=[-4*pi:0.07*pi:8*pi];    
for i=1:length(x_test)  
    sum=0;  
    for j=1:M  
        curr=weights(j)*exp(-abs(x_test(i)-centers(j))^2/(2*deltas(j)^2));  
        sum=sum+curr;  
    end  
    y_test(i)=sum;  
end  
figure(1)  
scatter(X,Y,'k+');  
hold on;  
plot(x_test,y_test,'r.-')

  

结果:

三、工具箱函数的RBF分类

train_data=LowDimFaces(1:10,:);  %train_data是一个10*20维的矩阵,其中行表示样本数,列数表示特征个数
train_label=[ones(1,5),zeros(1,5)]; %行向量

display('读入测试数据...');

test_data=LowDimFaces(201:210,:);
test_label=[ones(1,5),zeros(1,5)];

[train_data,minX,maxX] = premnmx(train_data);
test_data = tramnmx(test_data,minX,maxX) ;

%网络建立,输入为[x1;x2],输出为F。spread使用默认  
net=newrbe(train_data',train_label);
%%网络的效果验证  
%将原数据回带,测试网络效果  
ty=sim(net,test_data');
%%使用图像来看网络对非线性函数的拟合效果  
Y=[];
hitnum=0;
for i=1:10
    if ty(i)>0.5
        Y(i)=1;
    else
        Y(i)=0;
    end
    if Y(i)==test_label(i)
        hitnum=hitnum+1;
    end
end
fprintf('训练集中结果的正确率是%f%%\n',100*hitnum/10);

  

 

四、自编函数实现RBF分类

clear;
clc;
M=10; 
centers=[;];
deltas=[]; 
weights=[];
set = {}; 
gap=0.1; 
%**************************************************************************  
XA=ones(1,500);
YA=ones(1,500);  %初始化A类的输入数据
XB=ones(1,500);
YB=ones(1,500);  %初始化B类的输入数据
for i=1:500
    XA(i)=cos(2*pi*(i+8)/25-0.25*pi)*(i+8)/25;
    YA(i)=sin(2*pi*(i+8)/25-0.25*pi)*(i+8)/25-0.25;
    XB(i)=sin(2*pi*(i+8)/25+0.25*pi)*(i+8)/-25;
    YB(i)=cos(2*pi*(i+8)/25+0.25*pi)*(i+8)/25-0.25;
end
scatter(XA,YA,20,'b');
hold on;
scatter(XB,YB,20,'k');
hold off;
X1=cat(1,XA,YA);
X2=cat(1,XB,YB);
X=cat(2,X1,X2);  %得到训练数据集X,Y
Y=zeros(1,1000);
Y(1,1:500)=1;
k=rand(1,1000);
[m,n]=sort(k);
X=X(:,n(1:1000));
Y=Y(:,n(1:1000));
%**************************************************************************  
[X,minX,maxX] = premnmx(X);
P=length(X);
for i=1:M                          %先随意初始化M个中心点
    centers(:,i)= X(:,i*floor( P/10 ) );  
end  
done=0;  
while(~done)  
    for i=1:M  
       set{i}=[;];  
    end  
    for i=1:P  
        distance=100;
        for j=1:M  
            curr=norm(X(:,i)-centers(:,j));  
            if curr<distance  
                sets=j;  
                distance=curr;  
            end  
        end  
        set{sets}=[set{sets},X(:,i)];        %聚类,找出M个中心点,并且样本分布在这十个点周围
    end 
    for i=1:M  
        new_centers(:,i)=sum(set{i}')'/length(set{i}); %重新计算中心点:M个类里每个类的中心点  
    end  
    done=0;  
     for i=1:M  
          sum1(i)=norm(centers(:,i)-new_centers(:,i));
     end  
     if sum(sum1)>gap  
            done=0;      %不断循环,直到找到最佳的中心点;
            centers=new_centers;  
     else  
            done=1;  
     end     
end

for i=1:M
    curr=[;];
    curr=abs( bsxfun(@minus,centers,centers(:,i)));
    k=100;
    m=norm(curr(:,j));
    for j=1:M
        if m<k && m~=0
            k=m;
        end
    end
    deltas(i)=k; 
end


for i=1:P  
    for j=1:M  
        curr=norm(X(:,i)-centers(:,j));  
        K(i,j)=exp( -curr^2/(2*deltas(j)^2) );  %隐含层的输出
    end  
end  
%计算权值矩阵  
weights=inv(K'*K)*K'*Y';  
%**************************************************************************  
%测试计算出函数的情况  
x_test=X;
for i=1:length(x_test)  
    sum=0;  
    for j=1:M  
        curr=weights(j)*exp(-norm(x_test(:,i)-centers(:,j))^2/(2*deltas(j)^2));  
        sum=sum+curr;  
    end  
    y_test(i)=sum;  
end 
y_test(find(y_test<0.5))=0;
y_test(find(y_test>=0.5))=1;
count=0;
for j=1:length(y_test)
    if y_test(j)==Y(j)
        count=count+1;
    end
end
fprintf('分类正确率为:%.2f%%',100*count/length(y_test));
    

  

转载于:https://www.cnblogs.com/gaosheng12138/p/8063806.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RBF网络的matlab实现 的相关文章

  • 在 MATLAB 中模拟 C++ 模板

    我试图找出创建 C 模板或 Java 通用对象的替代方案的最佳方法 出于多种不同的原因 我过去曾多次想这样做 但现在我想做的是为几个相关的类创建 saveobj 和 loadobj 函数 我的想法是 我想要一组通用的例程来创建默认结构 然后
  • Matlab 图像数据的 hist 函数

    我是 Matlab 新手 我想制作自己的函数 与 imhist 显示图像数据的直方图 完成相同的工作 但我对此完全是新手 我不知道如何做开发这样的功能 我开始做一些东西 但它非常不完整 function output args myhist
  • Matlab:条形图中缺少标签

    使用 Matlab 2012 和 2013 我发现设置XTickLabel on a bar图表最多只能使用 15 个柱 如果条形较多 则标签会丢失 如下所示 绘制 15 个条形图 N 15 x 1 N labels num2str x d
  • 以 2 为底的矩阵对数

    Logm 取矩阵对数 并且log2 取矩阵每个元素以 2 为底的对数 我正在尝试计算冯 诺依曼熵 它涉及以 2 为底的矩阵对数 我该怎么做呢 如果将 以 2 为底 的矩阵指数定义为B expm log 2 A 或者如果您类似地通过特征分解直
  • Numpy 相当于 MATLAB 的 hist [重复]

    这个问题在这里已经有答案了 由于某种原因 Numpy 的 hist 总是返回比 MATLAB 的 hist 少 1 个 bin 例如在 MATLAB 中 x 1 2 2 2 1 4 4 2 3 3 3 3 Rep Val hist x un
  • Matlab的导入函数的范围是什么?

    我正在尝试将一些用 Matlab 编写的代码转换为独立的 编译的 Matlab 应用程序 然而 在出现一些奇怪的错误之后 我意识到代码大量使用了从路径中添加和删除的操作 以避免多次使用多个具有相同名称 但结果 计算不同 的函数这一事实 环顾
  • 将 Matlab 数组移植到 C/C++

    我正在将 matlab 程序移植到 C C 我有几个问题 但最重要的问题之一是 Matlab 将任何维度的数组都视为相同 假设我们有一个这样的函数 function result f A B C result A 2 B C A B and
  • FMINCON 的替代方案

    除了 fmincon 之外还有其他更快 更高效的求解器吗 我正在使用 fmincon 来解决特定问题 但对于中等大小的向量变量来说 我的内存不足 我也没有任何超级计算机或云计算选项可供使用 我知道任何替代解决方案仍然会耗尽内存 但我只是想看
  • 如何在 MATLAB 编译的应用程序中运行外部 .m 代码? [复制]

    这个问题在这里已经有答案了 我有一个 MATLAB 项目 我使用 MCC 对其进行编译以获得单个可执行文件 然后我想知道外部程序员是否可以在 exe 中执行他的一些 m 文件 而无需重新编译整个项目 重点是提供一个应用程序 其他开发人员可以
  • 将 kinect RGB 和深度值转换为 XYZ 坐标

    我正在寻找一种简单的方法将 kinect RGB 和深度值转换为 XYZ 坐标 使用 MATLAB 我的目标是一个输入为以下内容的函数 每个点的 RGB 和深度值Kinect相机 并输出 每个点的 x y 和 z 值 RGB 深度 RGB
  • 将向量(或弧)绘制到玫瑰图上。 MATLAB

    我有两个数据集 其中详细列出了angles 我正在绘制玫瑰图 angles 0 8481065519 0 0367932161 2 6273740453 n 另一个 从这组角度详细说明方向统计 angle error 0 848106563
  • 更新:随机将行添加到矩阵中,但遵循严格的规则

    以下是一个更大的矩阵的一部分 0 1 0000 1 0000 77 0000 100 0000 0 0 2500 0 1 0000 1 0000 72 0000 100 0000 0 2500 0 2500 0 1 0000 1 0000
  • 优先连接,Matlab 中的复杂网络

    大家好 我现在正在 MATLAB 中研究优先附件模型 在理解以下内容时遇到一些困难 假设我一开始有 4 个节点 连接如下 time 0 1 lt gt 2 3 lt gt 4 在下一个时间步骤中 我添加一个节点和 4 个连接 然后添加另一个
  • 考虑预分配速度[重复]

    这个问题在这里已经有答案了 我正在做以下事情 for i 1 m index 0 for j 1 n index index values i j 2 j 1 if j 1 symbol chip chip values index 1 e
  • 拟合具有扭曲时基的正弦波

    我想知道在 Matlab 中拟合具有扭曲时基的正弦波的最佳方法 时间失真由 n 阶多项式 n 10 给出 其形式为t distort P t 例如 考虑失真t distort 8 12t 6t 2 t 3 这只是幂级数展开 t 2 3 这将
  • 如何在Matlab中将图像从笛卡尔坐标更改为极坐标?

    我正在尝试将图像的像素从 x y 坐标转换为极坐标 但我遇到了问题 因为我想自己编写该函数 这是我到目前为止所做的代码 function newImage PolarCartRot read and show the image image
  • matlab中优先级队列的实现方法

    matlab中有没有提供minpriorityqueue功能的库 import java util PriorityQueue import java util public class MyQueue Comparator
  • 如何在matlab中使矩阵图平滑

    就像上图一样 怎样才能让画面更流畅呢 或者缩小y轴的范围 数据来自二维矩阵 然后我用plot data 请随意提出任何想法 平滑线条的一种方法涉及样本点之间数据的非线性插值 当你这样做时plot x y o http www mathwor
  • 计算向量的导数

    我有以下函数 维维亚尼曲线 Phi t cos t 2 cos t sin t sin t 只需检查它是否有效 s linspace 0 T 1000 plot3 cos s 2 cos s sin s sin s 如何推导函数Phi 可能
  • matlab中简单正弦波的傅里叶变换

    我尝试显示简单正弦波的频谱 因为我们知道具有固定频率的单个正弦波必须在其频谱中出现峰值我编写了这段代码 但我无法得到这个峰值我的代码中有什么问题 clc nsteps 200 number of signal elements in tim

随机推荐

  • linux mknod命令解析【转】

    转自 https blog csdn net a1010256340 article details 83088870 linux系统中设备管理的基本知识 我们的linux操作系统跟外部设备 如磁盘 光盘等 的通信都是通过设备文件进行的 应
  • linux qcom串口下载,qcom 跨平台的串口调试工具 PKGBUILD

    Id PKGBUILD 2013 06 26 GunsNRose Maintainer GunsNRose Contributor GunsNRose pkgname qcom git pkgname pkgname git pkgver
  • Vue,点击文字更换文本

    div div
  • elasticsearch简介与基本操作

    是什么等 废话后置 1 elasticsearch 分为3个部分 index mapping setting 1 1 index 相当于MySQL的表 elasticsearch 没有库的概念 也没有用户的权限区分概念 所以做好 备份 每个
  • android和harmonyos对比,HarmonyOS和Android深度对比

    HarmonyOS APP 工程结构 HarmonyOS应用发布形态为APP Pack Application Package 简称APP 它是由一个或多个HAP HarmonyOS Ability Package 包以及描述APP Pac
  • k8s Failed to create pod sandbox错误处理

    错误信息 Failed to create pod sandbox rpc error code Unknown desc failed to get sandbox image k8s gcr io pause 3 2 failed to
  • 华为机试 统计字符串中最长的数字串及统计字符串中字母出现最多的次数

    不多说 上代码 package com it thread import java util public class SoftTest public static void main String args Scanner sc new
  • 无法验证驱动程序的签名_无法安装最新版NVIDIA显卡驱动,从技术角度该怎么办?...

    一定会有众多网友 饱受无法更新NVIDIA驱动的困扰 你们一定也很奇怪 我凭实力从正规渠道购买的NVIDIA板卡 凭什么无法及时安装NVIDIA官网提供的驱动程序呢 因为无法更新到413以后的版本 一定也有众多因驱动程序 过时 而被 战地五
  • ACM-Java输入输出基本操作

    一 Java之ACM注意点 1 类名称必须采用public class Main方式命名 2 在有些OJ系统上 即便是输出的末尾多了一个 程序可能会输出错误 所以在我看来好多OJ系统做的是非常之垃圾 3 有些OJ上的题目会直接将OI上的题目
  • Framework层Android4.4锁屏流程分析

    前段时间刚接触到锁屏 我们自己做的锁屏时通过底层通过反射调过去的 所以还是得从framewoke层的启动和加载开始分析 所以画了一下这样的两个图 前面一个图是系统开机调到锁屏的一个流程 后面一个图我分开来画了 一个是按power键灭屏和亮屏
  • 【翻译】#拥抱行动和心理安全--思考根本原因而非根本人物

    本杰明 富兰克林曾经说过 生命中唯一的两个确定性是死亡和税收 但是 如果他是一名工程师 他可能会在这个名单上加上另一个 即故障 脸书的工程师们无疑会同意最近的故障 似乎是由于运行一个命令 无意中关闭了他们骨干网络的所有连接 不仅关闭了脸书
  • 【今日CV 计算机视觉论文速览 第149期】Tue, 30 Jul 2019

    今日CS CV 计算机视觉论文速览 Tue 30 Jul 2019 Totally 77 papers 上期速览 更多精彩请移步主页 Interesting MaskGAN人脸属性操作的新方法 为了克服先前方法受限于预定义的有限人脸特征操作
  • flutter 插件

    一 简介 Flutter 中调用这些能力就必须和原生平台进行通信 目前Flutter 已经支持 iOS Android Web macOS Windows Linux等众多平台 要调用特定平台 API 就需要写插件 插件是一种特殊的包 和纯
  • LeetCode234:回文链表

    题目描述 题目链接 请判断一个链表是否为回文链表 示例 1 输入 1 gt 2 输出 false 示例 2 输入 1 gt 2 gt 2 gt 1 输出 true 进阶 你能否用 O n 时间复杂度和 O 1 空间复杂度解决此题 解题思路
  • 贪吃蛇实验报告

    贪吃蛇实验报告 第一次写博客 这是中山大学软件工程导论的项目之一 对初学者可能有点难度 分享出来做参考 使用的C语言 如果你喜欢的话可以使用 就这样 直接上代码 智能蛇部分也发上来 include
  • 实现二维数组或多维数组排序得方法

    例 对数组 3 2 6 2 3 6 3 4 5 3 进行排序 方法一 import numpy as np a np array 3 2 6 2 3 6 3 4 5 3 ind np lexsort a 1 a 0 print a ind
  • Linux- 文件夹相关的常用指令

    1 统计文件夹下的文件数量 在 Linux 下 有几种方法可以统计文件夹下的文件数量 使用 ls 和 wc 命令 这种方式可以统计目录下的直接子文件 不包括子目录里的文件 ls l lt 目录路径 gt wc l 注意 这将也统计目录自身
  • Hugging Face PEFT 调优实战附代码

    Hugging Face PEFT 调优实战附代码 PEFT调优大模型 Hugging Face PEFT 调优实战附代码 使用Hugging Face PEFT Library 先快速上手使用PEFT LoRA详解 实际应用 Kaggle
  • 常见的Web漏洞——命令注入

    目录 命令注入简介 命令注入原理 漏洞利用 漏洞防范 总结 命令注入简介 命令注入漏洞和SQL注入 XSS漏洞很相似 也是由于开发人员考虑不周造成的 在使用web应用程序执行系统命令的时候对用户输入的字符未进行过滤或过滤不严格导致的 常发生
  • RBF网络的matlab实现

    一 用工具箱实现函数拟合 参考 http blog csdn net zb1165048017 article details 49407075 1 newrb 该函数可以用来设计一个近似径向基网络 approximate RBF 调用格式