查看: 1789|回复: 1|关注: 0

[已解决] SVM过度训练问题

[复制链接]

新手

7 麦片

财富积分


050


1

主题

3

帖子

0

最佳答案
使用 libsvm 3.22 进行回归预测
训练集结果很好 预测集效果很差 应该是出现了过度拟合的问题
请教这种问题应该怎样处理?


程序如下:

[pn_train,ps1] = mapminmax(p_train');  
pn_train = pn_train';  
pn_test = mapminmax('apply',p_test',ps1);  
pn_test = pn_test';  

[tn_train,ps2] = mapminmax(t_train');  
tn_train = tn_train';  
tn_test = mapminmax('apply',t_test',ps2);  
tn_test = tn_test';  


bestcv = 0;
bestc = 0;  
bestg = 0;   

for log2c = -5 : 5,   
    for log2g = -5 : 5,        
        cmd = ['-v 5 -c ',num2str(2^log2c),' -g ',num2str(2^log2g ),' -s 3 -p 0.1 '];
        cv = svmtrain(tn_train,pn_train, cmd);        
        if (cv >= bestcv),            
            bestcv = cv;            
            bestc = 2^log2c;            
            bestg = 2^log2g;        
        end
       fprintf('%g %g %g (best c=%g, g=%g, rate=%g)\n', log2c, log2g, cv, bestc, bestg, bestcv);   
    end
end

cmd = [' -t 2',' -c ',num2str(bestc),' -g ',num2str(bestg),' -s 3 -p 0.01'];  

model = svmtrain(tn_train,pn_train,cmd);

[Predict_1,error_1,dec_values_1] = svmpredict(tn_train,pn_train,model);  
[Predict_2,error_2,dec_values_2] = svmpredict(tn_test,pn_test,model);


untitled0.jpg
untitled.jpg
回复主题 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

入门

234 麦片

财富积分


50500


5

主题

269

帖子

52

最佳答案
  • 关注者: 6
发表于 2018-6-28 17:14:05 | 显示全部楼层 |此回复为最佳答案
过度拟合是个很普遍的问题啊,跟你的具体问题有关,比如你的训练样本60多个,如果变量有二三十个的话那肯定过拟合。原则上说一般变量数不要超过样本数的1/10或1/5,如果实在不行的话考虑把被训练参数的平方和乘以一个系数加在你的cost function上。

说的不一定全也不一定适合你的具体问题,楼主还是多参考下相关的文章吧。比如知乎上有篇叫:怎样消除机器学习中的过度拟合?但是发不了链接-_-
回复此楼 已获打赏: 0 积分

举报

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

本版积分规则

关闭

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

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