查看: 3649|回复: 10|关注: 1

[已答复] 求助,SVM回归-自定义核函数-交叉验证结果始终为0

[复制链接]

新手

5 麦片

财富积分


050


4

主题

10

帖子

0

最佳答案
  • 关注者: 3
发表于 2016-4-25 18:45:49 | 显示全部楼层 |阅读模式
本帖最后由 Daud 于 2016-4-25 18:55 编辑
function m=ObjectFunction(train_label,train,trainmax,trainmin,basenum,x,y)

[mtrain,ntrain] = size(train);

%% 自定义多项式核函数1

% 即ploynomial核:K(ui,vj) = (gamma*ui*vj + coef0)^degree

% 参数g:gamma

% 参数coef0

% 参数d:degree


g = y;
coef0 = 1;

d = 2;

ktrain1 = g*(train*train')+coef0;

for i = 1:mtrain

   for j = 1:mtrain

       ktrain1(i,j) = ktrain1(i,j)^d;

   end
end

Ktrain1 = [(1:mtrain)',ktrain1];



%% 自定义核RBF核函数2

% 即RBF核:k(ui,vj) = exp(-gamma*||ui-vj||^2)

% g:gamma


ktrain2 = zeros(mtrain,mtrain);

g = y;

for i = 1:mtrain

   for j = 1:mtrain

      ktrain2(i,j) = exp(-g*norm(train(i,:)-train(j,:))^2);

   end

end

Ktrain2 = [(1:mtrain)',ktrain2];

%% 混合核函数

%即 RBF核与ploynomial核

% 参数la = lamda 该参数以及上述多项式核参数d和RBF参数gamma可以用PSO或GA算法进行优化,以下是任意取得的参数


la = 0.34;

Ktrain3 = la*Ktrain1+(1-la)*Ktrain2;
% Ktest3 = la*Ktest1+(1-la)*Ktest2;

cmd=['-c ',num2str( basenum^x ),'-v 5 -t 4 -s 3 -p 0.01'];


m= svmtrain(train_label,Ktrain3,cmd); %MSE
m=sqrt(m)*(trainmax-trainmin)/(2*trainmax)*100; %EEP

m= svmtrain(train_label,Ktrain3,cmd); %MSE 这个始终为0,不随gamma和C变化。

核函数为多项式+RBF
回复主题 已获打赏: 0 积分

举报

新手

5 麦片

财富积分


050


4

主题

10

帖子

0

最佳答案
  • 关注者: 3
 楼主| 发表于 2016-4-26 12:32:34 | 显示全部楼层
已解决,注意 svmtrain的参数输入有误:)
回复此楼 已获打赏: 0 积分

举报

新手

11 麦片

财富积分


050


1

主题

13

帖子

0

最佳答案
发表于 2016-10-27 16:58:49 | 显示全部楼层
请问lz用的这个组合核函数,是在matlab自带的svm工具箱中改的还是libsvm?lz说参数有误,请问正确的程序应该是什么样的?在研究组合核svm,还请指教!
回复此楼 已获打赏: 0 积分

举报

新手

10 麦片

财富积分


050


2

主题

41

帖子

0

最佳答案
  • 关注者: 1
发表于 2016-10-27 20:13:12 | 显示全部楼层
也一起学习学习了
回复此楼 已获打赏: 0 积分

举报

新手

9 麦片

财富积分


050


2

主题

18

帖子

0

最佳答案
发表于 2016-12-12 19:58:39 | 显示全部楼层
楼主 请问 g y d coef0这些参数都是怎么得来的,la我用循环从0.01跑到1找出最佳,其他参数用你给的g y d这些参数用heart_scale数据做实验,精度才只有百分之五六十啊?
回复此楼 已获打赏: 0 积分

举报

新手

5 麦片

财富积分


050


4

主题

10

帖子

0

最佳答案
  • 关注者: 3
 楼主| 发表于 2017-3-6 13:46:21 | 显示全部楼层
本帖最后由 Daud 于 2017-3-6 13:52 编辑
木头yanbo 发表于 2016-12-12 19:58
楼主 请问 g y d coef0这些参数都是怎么得来的,la我用循环从0.01跑到1找出最佳,其他参数用你给的g y d这 ...

这个是混合核函数,RBF核+多项式核函数,分别对应libsvm里的g d r c 。
  -d degree:核函数中的degree设置(针对多项式核函数)(默认3)
  -g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)(默认1/ k)
  -r coef0:核函数中的coef0设置(针对多项式/sigmoid核函数)((默认0)
  -c cost:设置C-SVC,e -SVR和v-SVR的参数(损失函数)(默认1)
回复此楼 已获打赏: 0 积分

举报

新手

9 麦片

财富积分


050


2

主题

18

帖子

0

最佳答案
发表于 2017-3-7 19:29:55 | 显示全部楼层
Daud 发表于 2017-3-6 13:46
这个是混合核函数,RBF核+多项式核函数,分别对应libsvm里的g d r c 。
  -d degree:核函数中的degree ...

多谢了!学习了!
回复此楼 已获打赏: 0 积分

举报

新手

10 麦片

财富积分


050


1

主题

8

帖子

0

最佳答案
发表于 2018-1-22 19:52:37 | 显示全部楼层
木头yanbo 发表于 2017-3-7 19:29
多谢了!学习了!

请问这个在程序里怎么写
回复此楼 已获打赏: 0 积分

举报

新手

5 麦片

财富积分


050


0

主题

4

帖子

0

最佳答案
发表于 2019-5-4 04:36:56 | 显示全部楼层
请教楼主:
1.正确的程序是怎样的?
2.trainmax 和 trainmin是指的什么?
3.如能分享代码不胜感激:81094704@qq.com
谢谢
回复此楼 已获打赏: 0 积分

举报

新手

5 麦片

财富积分


050


1

主题

2

帖子

0

最佳答案
发表于 2020-7-16 19:48:59 | 显示全部楼层
你好 楼主能问下你的svmtrain怎么改的吗?
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表