qqaaq134679 发表于 2020-4-19 13:06 你好。RVM的输入x和输出y是一一对应的,即个数一致。不太明白你所说的“十项分数通过 rvm 得出一个综合的分数”是什么意思,感觉不太适合用RVM算法。RVM的应用一般是分类和回归。 |
iqiukp 发表于 2020-4-19 13:16 楼主抱歉,可能是我表达的不太准确。我是参考这篇文章的,第四部分的实例分析里就是得到了一个评价结果,如果按照这篇文章里的数据集的话,x和y应该如何编写? |
2020-4-19 14:02 上传
点击文件名下载附件
804.3 KB, 下载次数: 11
qqaaq134679 发表于 2020-4-19 14:32 你好。看这部分的实验数据: 只要保证输入X的行方向为样本个数,列方向为特征个数就行。Y就是对应的得分,是一个一维向量。 |
iqiukp 发表于 2020-4-18 19:27 感谢楼主的答疑 |
iqiukp 发表于 2020-4-18 19:27 请问楼主是否有已经发表的研究论文,想进行借鉴和学习。 此外,在撰写文章时进行引用。 |
涉远飞高 发表于 2020-4-19 18:34 才疏学浅,略懂皮毛:lol |
楼主好,在使用RVM的过程中发现了这么一个问题。 以楼主1.3工具包中提供的初始案例为例,使用Gauss核参数,那么需要调整width参数。 当width取得越小,Figure 1中的相关向量就越多,同时训练集的精度也就越高,反之测试集的精度也就越低。比如取width为0.011,训练的精度为:training CD = 0.9869,测试为predicted CD = 0.1269。 存在这么一个问题,机器学习中通常是利用训练集训练模型,以训练集的精度为模型优化过程中检验模型的标准。此时,在RVM模型中,当width取得很小时可以获得很好的训练集精度,按照以上理论,这就是最好的预测模型。然后拿预测集一算,结果很差很差,明显不符合要求。 求教楼主,对于这种现象,有什么好对策或者能解释一下这种现象么? |
涉远飞高 发表于 2020-4-22 10:50 你好。 1. 实验结果的解释 从相关向量的占比来看(demo中width的值取0.011时,占比通常达90%以上),这是一种过拟合现象,泛化性能差,即训练集的预测精度很高,测试集的预测精度很低。事实上这种情况应该尽量避免的,在回归任务中,训练集的精度不是主要核心目标,泛化性能才是需要更多注意的地方。 2. 解决方法 在rvm-1.3里面的模型构建过程中使用了所有训练样本,模型评价时也是使用了所有训练样本。实际上可以把训练集拆分为训练集+验证集,通过评价验证集的预测精度去反映模型精度。通常的模型评估方法有:"留出法"(hold-out)、交叉验证法(k折法、“留一法”)、和自助法等等。 |
iqiukp 发表于 2020-4-22 11:42 感谢楼主。 我将尝试把k折法运用到程序里。:handshake:handshake:handshake |
楼主您好,刚学习相关向量机,有问题想请教一下,看楼上您说的多核相关向量机的修改方法,按要求修改成高斯与多项式混合的核函数。最后提供的demo里为何相关向量只有一个,预测值是一条平滑曲线呢?这是什么问题呀 rvm_train中:
|
阿濠 发表于 2020-4-25 16:32 你好。可以换其他数据集试试,这个sinc函数的数据集对核函数比较敏感,之前也出现过类似情况。近期我会发布2.0版本的代码,集成混合核函数功能,到时候可以关注一下。 |
iqiukp 发表于 2020-4-25 18:08 哦哦哦好的,我试一下。期待新版本:D |
本帖最后由 iqiukp 于 2020-5-27 12:35 编辑 2020.4.28更新(V2.0) 源代码 2020-5-27 12:34 上传
点击文件名下载附件
如果该代码能为您提供一点帮助,请点一下左下方的 “支持”,谢谢;若代码存在错误的地方,请及时指出。 更新说明 1. 添加了混合核函数的支持 混合形式: K = w1*K1+w2*K2+...+wn*Kn 2. 添加了参数优化模块 利用MATLAB内置的粒子群算法和遗传算法来优化核函数的参数以及混合核函数的权重 * 注意:应合理设置优化算法的参数,避免模型过拟合或欠拟合 3. 添加了多个应用示例 (1). demo_kernel_function.m:6种核函数的使用方法 (2). demo_singel_kernel.m:单一核函数的例子 (3). demo_hybrid_kernel.m:混合核函数的例子 (4). demo_kernel_optimization.m:参数优化(核函数参数) (5). demo_kernel_weight_optimization.m:参数优化(混合核函数参数和混合权重) 4. 添加了模型输出说明(如下所示)
特别说明 1. 核函数的设置 (1) 单一核函数
(2) 混合核函数
2. 参数优化(单一核函数的参数) 多个核函数的权重默认是1,如果要指定不同核函数的权重,如kernel = a*kernel_1+b*kernel_2只需在parameter后面加上键值对:‘weight’, [a, b]
(1) 不优化核函数的常量偏置 (2) 优化方法为MATLAB自带的粒子群算法(Particle Swarm Optimization, PSO)和遗传算法(Genetic Algorithm, GA)。 具体的算法介绍和参数设置请在命令行中输入“help particleswarm” 和 “help ga”查看对应的帮助文档。优化算法的参数修改在RvmOptimization.psoOptimize函数和RvmOptimization.gaOptimize函数中。 (3) 'target'为需要优化的核函数 (4) ‘lb’和‘ub’分别为参数的下边界和上边界 (5) 'numVariable'为需要优化的参数个数 (6) 'maxIter'为最大的迭代次数 (7) 'Kfolds'为交叉验证方法(可选) 3. 参数优化(混合核函数的参数)
注意'target', 'lb’, 'ub'是一一对应的 4. 参数优化(混合核函数的权重)
注意‘weight’的个数是与核函数的个数一致的。 5. 参数优化(混合核函数的参数与权重)
kernel_1有1个核参数,kernel_2有1个核参数,'weight'对应这两个核函数的权重,因此'numVariable',为1+1+2 = 4,‘lb’和‘ub’分别有4个元素 历史版本
|
本帖最后由 涉远飞高 于 2020-4-28 08:51 编辑 楼主好,感谢您提供的程序代码。 基于一些自身的需要,我将您V1.3的代码进行了修改,主要是将一个矩阵P加入到了rvm_test和rvm_train中进行混合核函数计算,修改后程序变成了model = rvm_train(P, x, y, varargin) 及 result = rvm_test(P,model, xt, yt),但修改程序报错: Parameters of rvm_train should be pairs。 后来我认识到是由于程序输入变量数量变化了产生了影响, 因此我将如下代码注释掉了。 % nargin: number of function input arguments. if nargin < 3 warning('Please input the real value of the test data') end 但后面的代码看不太懂: numParameters = nargin/2-1; for n =1:numParameters parameters = varargin{(n-1)*2+1}; value = varargin{(n-1)*2+2}; switch parameters % case 'kernel' kernel = value; % case 'option' option = value; end end % numSamples = size(x, 1); 想请教楼主,如果只想加这个P加进去,然后再函数中能够正常使用,而不影响rvm_train和rvm_test的正常功能,请问还有什么地方需要修改的么? PS:我也看到了您刚提供的2.0版本代码,但因为我这个程序已经基本改完了,所以还是希望能够用我修改的这个程序。后期我也会对您的2.0版本代码进行学习。感谢 以下为我修改后的rvm_train 和 rvm_test 代码。
|
iqiukp 发表于 2020-4-28 03:12 看楼主之前也做过鲸鱼算法,是否也做了与相关向量机的结合?二者需要哪些地方进行修改,方便将代码分享一下吗 |
本帖最后由 iqiukp 于 2020-4-28 12:39 编辑 涉远飞高 发表于 2020-4-28 08:39 你好。 1. 代码解释
首先看V1.3中,rvm_train的传参形式:
因此,上述代码块实现的功能是:判断不定传参是哪个变量的键值对('kernel'或者'option'),然后把键值对的值赋给该参数。 可以结合matlab的文档了解一下varargin,nargin的用法,一般是为了实现函数传参的灵活性。 2. 代码修改 如果把rvm_train的传参形式改为:
然后在rvm_test以model.P的形式调用。 |
王镇_zVnvQ 发表于 2020-4-28 12:28 你好。抱歉没有做WOA与RVM的结合。关于两者结合的代码修改,主要在RvmOptimization.m修改,部分说明如图所示: 在RVM2.0中,优化算法的实现封装到RvmOptimization类中,建议先阅读这个代码,然后再考虑添加WOA算法。 |
iqiukp 发表于 2020-4-28 12:35 感谢楼主的答疑。 楼主的MATLAB功底不一般,向楼主学习:handshake:handshake |
1246078874 发表于 2020-4-28 17:20 你好。帖子中的图是用另外的数据集跑出来的,sinc函数,为了方便可视化。 demo中用的数据是UCI里面的一个数据集。 |
iqiukp 发表于 2020-4-28 12:50 好的,谢谢楼主 |
楼主你好,谢谢你的分享,我最近在用你发布的v1.3做寿命预测方面的内容,数据是随周期下降,呈退化趋势,对数据进行标准化后输入到训练和测试中后在测试中得到的预测结果是一条上升曲线且正好与真实值轴对称,请教一下楼主哪出问题了,该怎么弄啊,万分感谢 |
楼主,有个问题想问一下,换上自己编的数据(输入80*15,输出80*1)后。建立模型时显示相关向量是79个。。。再做预测出来的值就是一条直线了。是因为数据是编的所以不能用么:( |
阿濠 发表于 2020-5-5 09:36 嗯有可能。这种情况是过拟合了。去找些标准数据集来测试测试吧。 |
Powered by Discuz! X3.4
© 2001-2024