机器学习系列4---RVM(相关向量机)MATLAB实现
上期主要介绍了相关向量机的提出及主要计算过程,本期主要介绍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实现相关推荐
- 【项目实战】Python实现RVM相关向量机回归模型(RVR算法)项目实战
说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 相关向量机(Relevance Vector Machine,简 ...
- Python机器学习16——相关向量机(RVM)
本系列基本不讲数学原理,只从代码角度去让读者们利用最简洁的Python代码实现机器学习方法. 背景介绍 学机器学习的应该都知道支持向量机(SVM),这个方法在深度学习兴起之前算是很热门的分类方法,在机 ...
- 【RVM预测】基于相关向量机RVM实现数据预测附matlab代码
1 简介 目前常用的一些基本的故障诊断,故障预测方法都将大样本数据作为基础,但在实际问题中常常能得到的故障数据都属于小样本类型.传统的故障诊断,故障预测方法已不适于用来解决小样本类型的故障问题.相关向 ...
- 【机器学习系列】之支持向量回归SVR
作者:張張張張 github地址:https://github.com/zhanghekai [转载请注明出处,谢谢!] [机器学习系列]之SVM硬间隔和软间隔 [机器学习系列]之SVM核函数和SMO ...
- 【RVM预测】基于粒子群算法优化相关向量机RVM实现数据回归预测附matlab代码
1 简介 由于进出口贸易额波动较大,影响因素较多,一般预测算法难以得到较为准确的预测结果.针对该问题,提出基于PSO优化混合RVM模型的贸易预测方法.该方法首先找出影响进出口贸易的指标并通过主成分分析 ...
- 相关向量机(RVM)
下面是文章中的约定: 为了使该描述尽可能地明确(在数学意义上),介绍一些将要使用的符号: P(A | B,C)是给定B和C的A的概率.请注意,使用这种表示法,参数的不同表示不会改变该概率,例如P(A ...
- 【机器学习系列】之SVM核函数和SMO算法
作者:張張張張 github地址:https://github.com/zhanghekai [转载请注明出处,谢谢!] [机器学习系列]之SVM硬间隔和软间隔 [机器学习系列]之SVM核函数和SMO ...
- 【机器学习系列】之SVM硬间隔和软间隔
作者:張張張張 github地址:https://github.com/zhanghekai [转载请注明出处,谢谢!] [机器学习系列]之SVM硬间隔和软间隔 [机器学习系列]之SVM核函数和SMO ...
- Matlab:基于Matlab实现人工智能算法应用的简介(SVM支撑向量机GA遗传算法PSO粒子群优化算法)、案例应用之详细攻略
Matlab:基于Matlab实现人工智能算法应用的简介(SVM支撑向量机&GA遗传算法&PSO粒子群优化算法).案例应用之详细攻略 目录 1.SVM算法使用案例 1.1.Libsvm ...
最新文章
- Java学习总结:26
- 判断一个list集合是否为空,用isEmpty 还是 null?
- NeurIPS 2021 | 港中文周博磊组:基于实例判别的数据高效生成模型
- PHP对抗web扫描器的脚本技巧
- python wpf教程_WPF使用IronPython库的简单Demo
- voyage java_GitHub - yezilong9/voyage: 采用Java实现的基于netty轻量的高性能分布式RPC服务框架...
- Java中JVM、JRE和JDK三者有什么区别和联系?
- SAP中方会计凭证打印解决方案
- 如何不运用第三方变量实现两个数的交换
- 群体智能优化算法之和声搜索(Harmony Search,HS)-附源码
- xshell中svn命令整理
- ie html保存为pdf文件,IE浏览器怎么将网页保存为pdf文档?将网页保存为pdf文档的方法说明...
- 电子面单打印通用解决方案(PHP代码示例)
- quickchm乱码问题
- python ttk style,如何改变ttk.progressBar颜色在python
- 当你经历人生最大的困难,要如何正确走出来?
- java费切罗_细数目前主流的十二个自行车种类
- LDPC编码原理概述
- 基于Java+SpringBoot+Thymeleaf+Mysql在线电子书阅读系统学习系统设计与实现
- 阿里云403(Forbidden)Access to XMLHttpRequest at ‘‘ fromorigin ‘‘ has been blocked by CORS policy:Respon