上期主要介绍了相关向量机的提出及主要计算过程,本期主要介绍MATLAB实现RVM,并就相关分析结果展开讨论。相关论文及代码下载网站:miketipping.com :: Sparse Bayesian Models (and the RVM);RVM分为定量和定性分析两种类型,首先介绍定量分析:定量分析通过随机产sinc函数数据点进行稀疏表示学习,然后将拟合结果和真实数据进行对比,计算RMSE判定分析性能。

1.RVM定量分析MATLAB代码

%% Set verbosity of output (0 to 4)
setEnvironment('Diagnostic','verbosity',3);
% Set file ID to write to (1 = stdout)
setEnvironment('Diagnostic','fid',1);%% 设置模型和数据参数
useBias = true;
randn('state',1)
if nargin==0N     = 100;noise        = 0.1;kernel_  = 'gauss';width      = 3;maxIts = 1200;
end
monIts      = round(maxIts/10);%% 产生sinc数据
x   = 10*[-1:2/(N-1):1]';
y   = sin(abs(x))./abs(x);
t   = y + noise*randn(N,1);%% 设置绘图参数
COL_data    = 'k';
COL_sinc    = 'g';
% COL_sinc  = 0.5*ones(1,3);
COL_rv      = 'r';
COL_pred    = 'r';% 绘制sinc数据
figure(1)
whitebg(1,'w')
clf
h_y = plot(x,y,'--','LineWidth',3,'Color',COL_sinc);
hold on
plot(x,t,'.','MarkerSize',16,'Color',COL_data)
box = [-10.1 10.1 1.1*[min(t) max(t)]];
axis(box)
set(gca,'FontSize',12)
drawnow%% 设置超参数初始值
initAlpha   = (1/N)^2;
epsilon     = std(t) * 10/100; % Initial guess of 10% noise-to-signal
initBeta    = 1/epsilon^2;%% 产生RVM 模型[weights, used, bias, marginal, alpha, beta, gamma] = ...SB1_RVM(x,t,initAlpha,initBeta,kernel_,width,useBias,maxIts,monIts);%% 模型测试
PHI = SB1_KernelFunction(x,x,kernel_,width);
y_rvm   = PHI(:,used)*weights + bias;%% 对比分析结果
h_yrvm  = plot(x,y_rvm,'-','LineWidth',3,'Color',COL_pred);
h_rv    = plot(x(used),t(used),'o','LineWidth',2,'MarkerSize',10,...'Color',COL_rv);
legend([h_y h_yrvm h_rv],'sinc function','RVM predictor','RVs')
hold off
title('Sparse Bayesian regression with noisy ''sinc'' data','FontSize',14)SB1_Diagnostic(1,'Sparse Bayesian regression test error (RMS): %g\n', ...sqrt(mean((y-y_rvm).^2)))
SB1_Diagnostic(1,'Estimated noise level: %.4f (true: %.4f)\n', ...sqrt(1/beta), noise)

2. RVM定量分析结果

超参数分析结果:

1.非零参数: 6 (全部:100);

2.似然函数最小最大值:  -0.13/1.91;

3.RMSE: 0.0424557;

4.噪声估计: 0.0933 (真实值: 0.1000)。

3. RVM定性分析MATLAB代码

% The MATLAB demo for RVMclassificaion
% first version: 2020/5/01
clc;clear;
%%
% Set verbosity of output (0 to 4)
setEnvironment('Diagnostic','verbosity',3);
% Set file ID to write to (1 = stdout)
setEnvironment('Diagnostic','fid',1);%% Set default values for data and model
useBias = true;
rand('state',1)
% Some acceptable defaults
N       = 100;
kernel_ = 'gauss';
width       = 0.5;
maxIts  = 1000;
monIts      = round(maxIts/10);
N       = min([250 N]); % training set has fixed size of 250
Nt      = 1000;
%% Load Ripley's synthetic training data (see reference in doc)
load synth.tr
synth   = synth(randperm(size(synth,1)),:);
X   = synth(1:N,1:2);
t   = synth(1:N,3);
%%
COL_data1   = 'k';
COL_data2   = 0.75*[0 1 0];
COL_boundary50  = 'r';
COL_boundary75  = 0.5*ones(1,3);
COL_rv      = 'r';
% Plot the training data
figure(1)
whitebg(1,'w')
clf
h_c1    = plot(X(t==0,1),X(t==0,2),'.','MarkerSize',18,'Color',COL_data1);
hold on
h_c2    = plot(X(t==1,1),X(t==1,2),'.','MarkerSize',18,'Color',COL_data2);
box = 1.1*[min(X(:,1)) max(X(:,1)) min(X(:,2)) max(X(:,2))];
axis(box)
set(gca,'FontSize',12)
drawnow
%% Set up initial hyperparameters - precise settings should not be critical
initAlpha   = (1/N)^2;
% Set beta to zero for classification
initBeta    = 0;
% "Train" a sparse Bayes kernel-based model (relevance vector machine)
[weights, used, bias, marginal, alpha, beta, gamma] = ...SB1_RVM(X,t,initAlpha,initBeta,kernel_,width,useBias,maxIts,monIts);
%% Load Ripley's test set
load synth.te
synth   = synth(randperm(size(synth,1)),:);
Xtest   = synth(1:Nt,1:2);
ttest   = synth(1:Nt,3);
%% Compute RVM over test data and calculate error
PHI = SB1_KernelFunction(Xtest,X(used,:),kernel_,width);
y_rvm   = PHI*weights + bias;
errs    = sum(y_rvm(ttest==0)>0) + sum(y_rvm(ttest==1)<=0);
SB1_Diagnostic(1,'RVM CLASSIFICATION test error: %.2f%%\n', errs/Nt*100)
%% Visualise the results over a grid
gsteps      = 50;
range1      = box(1):(box(2)-box(1))/(gsteps-1):box(2);
range2      = box(3):(box(4)-box(3))/(gsteps-1):box(4);
[grid1 grid2]   = meshgrid(range1,range2);
Xgrid       = [grid1(:) grid2(:)];
%% Evaluate RVM
PHI     = SB1_KernelFunction(Xgrid,X(used,:),kernel_,width);
y_grid      = PHI*weights + bias;
% apply sigmoid for probabilities
p_grid      = 1./(1+exp(-y_grid));
% Show decision boundary (p=0.5) and illustrate p=0.25 and 0.75
[c,h05]     = ...contour(range1,range2,reshape(p_grid,size(grid1)),[0.5],'-');
set(h05, 'Color',COL_boundary50,'LineWidth',3);
[c,h075]    = ...contour(range1,range2,reshape(p_grid,size(grid1)),[0.25 0.75],'--');
set(h075,'Color',COL_boundary75,'LineWidth',2);% Show relevance vectors
h_rv    = plot(X(used,1),X(used,2),'o','LineWidth',2,'MarkerSize',10,...'Color',COL_rv);
legend([h_c1 h_c2 h05 h075(1) h_rv],...'Class 1','Class 2','Decision boundary','p=0.25/0.75','RVs',...'Location','NorthWest')
hold off
title('RVM Classification of Ripley''s synthetic data','FontSize',14)

4. RVM定性分析结果

分析结果:

1.非零变量:  4;

2.似然函数最小最大值:  -1.86/-0.99;

3.RVM 分类错误率: 8.60%。

通过上面的例子可以实现简单的RVM分析,具体的实际分析例子会后续更新。

写于2020.5.1

加油。

个人新建立的weixin公众号,光谱学与光谱分析,欢迎大家关注

机器学习系列4---RVM(相关向量机)MATLAB实现相关推荐

  1. 【项目实战】Python实现RVM相关向量机回归模型(RVR算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 相关向量机(Relevance Vector Machine,简 ...

  2. Python机器学习16——相关向量机(RVM)

    本系列基本不讲数学原理,只从代码角度去让读者们利用最简洁的Python代码实现机器学习方法. 背景介绍 学机器学习的应该都知道支持向量机(SVM),这个方法在深度学习兴起之前算是很热门的分类方法,在机 ...

  3. 【RVM预测】基于相关向量机RVM实现数据预测附matlab代码

    1 简介 目前常用的一些基本的故障诊断,故障预测方法都将大样本数据作为基础,但在实际问题中常常能得到的故障数据都属于小样本类型.传统的故障诊断,故障预测方法已不适于用来解决小样本类型的故障问题.相关向 ...

  4. 【机器学习系列】之支持向量回归SVR

    作者:張張張張 github地址:https://github.com/zhanghekai [转载请注明出处,谢谢!] [机器学习系列]之SVM硬间隔和软间隔 [机器学习系列]之SVM核函数和SMO ...

  5. 【RVM预测】基于粒子群算法优化相关向量机RVM实现数据回归预测附matlab代码

    1 简介 由于进出口贸易额波动较大,影响因素较多,一般预测算法难以得到较为准确的预测结果.针对该问题,提出基于PSO优化混合RVM模型的贸易预测方法.该方法首先找出影响进出口贸易的指标并通过主成分分析 ...

  6. 相关向量机(RVM)

    下面是文章中的约定: 为了使该描述尽可能地明确(在数学意义上),介绍一些将要使用的符号: P(A | B,C)是给定B和C的A的概率.请注意,使用这种表示法,参数的不同表示不会改变该概率,例如P(A ...

  7. 【机器学习系列】之SVM核函数和SMO算法

    作者:張張張張 github地址:https://github.com/zhanghekai [转载请注明出处,谢谢!] [机器学习系列]之SVM硬间隔和软间隔 [机器学习系列]之SVM核函数和SMO ...

  8. 【机器学习系列】之SVM硬间隔和软间隔

    作者:張張張張 github地址:https://github.com/zhanghekai [转载请注明出处,谢谢!] [机器学习系列]之SVM硬间隔和软间隔 [机器学习系列]之SVM核函数和SMO ...

  9. Matlab:基于Matlab实现人工智能算法应用的简介(SVM支撑向量机GA遗传算法PSO粒子群优化算法)、案例应用之详细攻略

    Matlab:基于Matlab实现人工智能算法应用的简介(SVM支撑向量机&GA遗传算法&PSO粒子群优化算法).案例应用之详细攻略 目录 1.SVM算法使用案例 1.1.Libsvm ...

最新文章

  1. Java学习总结:26
  2. 判断一个list集合是否为空,用isEmpty 还是 null?
  3. NeurIPS 2021 | 港中文周博磊组:基于实例判别的数据高效生成模型
  4. PHP对抗web扫描器的脚本技巧
  5. python wpf教程_WPF使用IronPython库的简单Demo
  6. voyage java_GitHub - yezilong9/voyage: 采用Java实现的基于netty轻量的高性能分布式RPC服务框架...
  7. Java中JVM、JRE和JDK三者有什么区别和联系?
  8. SAP中方会计凭证打印解决方案
  9. 如何不运用第三方变量实现两个数的交换
  10. 群体智能优化算法之和声搜索(Harmony Search,HS)-附源码
  11. xshell中svn命令整理
  12. ie html保存为pdf文件,IE浏览器怎么将网页保存为pdf文档?将网页保存为pdf文档的方法说明...
  13. 电子面单打印通用解决方案(PHP代码示例)
  14. quickchm乱码问题
  15. python ttk style,如何改变ttk.progressBar颜色在python
  16. 当你经历人生最大的困难,要如何正确走出来?
  17. java费切罗_细数目前主流的十二个自行车种类
  18. LDPC编码原理概述
  19. 基于Java+SpringBoot+Thymeleaf+Mysql在线电子书阅读系统学习系统设计与实现
  20. 阿里云403(Forbidden)Access to XMLHttpRequest at ‘‘ fromorigin ‘‘ has been blocked by CORS policy:Respon

热门文章

  1. 想自考计算机 英语跟高数很,自考不用考高数和英语的专业有哪些
  2. ubuntu安装php扩展包
  3. python面向对象与装饰
  4. Adobe XD的使用入门
  5. 高斯脉冲流绘制(python)
  6. mysql支持表情输入_mysql支持emoji表情
  7. 什么是配置iptv服务器信息,请配置iptv服务器信息
  8. 戴尔外星人x17R1/R2原厂预装出厂系统 带Support Assist OS recovery恢复功能
  9. 7.2.4 导航实现04_路径规划
  10. 第二章 SYN6288语音合成模块的使用