24小时热门版块排行榜    

CyRhmU.jpeg
查看: 856  |  回复: 4

caucliushuai

银虫 (小有名气)

[求助] 关于 支持向量机的程序 总是出错,求大神指点已有1人参与

做一个支持向量机的分类问题, 有三类h,m,l (分别是mydata中的 1、2行,3、4行,5、6 行)   通过训练,识别 mydata中最后两行属于哪一类。
M文件如下:
clear
clc
mydata = [0.8 0.8 0.9 0.7 0.8 0.7 0.8 0.8 0.8 0.7 0.8 0.7 0.9 0.8 0.7 0.8 0.6;
          0.8 0.9 0.7 0.8 0.9 0.8 0.8 0.8 0.8 0.8 0.8 0.7 0.8 0.7 0.6 0.8 0.8;
          0.7 0.7 0.6 0.7 0.8 0.7 0.6 0.8 0.7 0.6 0.7 0.7 0.6 0.8 0.7 0.7 0.7;
          0.7 0.7 0.6 0.6 0.7 0.6 0.7 0.7 0.7 0.7 0.8 0.7 0.6 0.7 0.8 0.7 0.8;
          0.4 0.5 0.5 0.5 0.6 0.5 0.5 0.5 0.5 0.5 0.6 0.5 0.5 0.6 0.7 0.6 0.6;
          0.5 0.5 0.5 0.5 0.7 0.6 0.5 0.4 0.5 0.5 0.6 0.5 0.5 0.6 0.5 0.6 0.5;
          0.8 0.7 0.6 0.9 0.7 0.6 0.8 0.6 0.6 0.7 0.9 0.8 0.7 0.8 0.7 0.6 0.7;
          0.6 0.6 0.7 0.5 0.7 0.8 0.6 0.7 0.8 0.5 0.6 0.5 0.6 0.7 0.6 0.6 0.8;];
    h = mydata(1:2 ,;
    m = mydata(3:4 ,;
    l = mydata(5:6 ,;
    test = mydata(7:8 ,;
    num=nchoosek(1:3,2);
    Training={h,m,l}; SVM=cell(size(num,1),1);
    for  k = 1: size(num,1)
        t1=Training{num(k,1)}; t2=Training{num(k,2)};
        SVM{k}=svmtrain([t1,t2],[ones(size(t1,1),1);zeros(size(t2,1),1)],'kernel_function','polynomial','polyorder',1);
    end
   
    for kk = 1: size(test,1)
         for k = 1: length(SVM)
             result(k)=svmclassify(SVM{k},test(kk,);
             temp(k)=num(k,1).*result(k)+num(k,2).*~result(k);
         end
    results(kk)=mode(temp,2);
    end




运行总是显示以下文字
Error using svmtrain (line 253)
Y and TRAINING must have the same number of rows.

Error in Untitled2 (line 19)
        SVM{k}=svmtrain([t1,t2],[ones(size(t1,1),1);zeros(size(t2,1),1)],'kernel_function','polynomial','polyorder',1);


求大神指点
回复此楼
好好学习,天天向上。
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

caucliushuai

银虫 (小有名气)

由于 论坛格式, 其中有几句被识别成笑脸了,现在重新把那几句写好
    h = mydata(1:2 ,               ;
    m = mydata(3:4 ,             ;
    l = mydata(5:6 ,               ;
    test = mydata(7:8 ,           ;


for kk = 1: size(test,1)
         for k = 1: length(SVM)
             result(k)=svmclassify(SVM{k},test(kk,)                      ;
             temp(k)=num(k,1).*result(k)+num(k,2).*~result(k);
         end
    results(kk)=mode(temp,2);
    end
好好学习,天天向上。
2楼2014-07-08 21:31:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dnp

荣誉版主 (知名作家)

小木虫浪子

优秀版主

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
caucliushuai: 金币+7, ★★★★★最佳答案, 一语道破,厉害。 2014-07-09 23:37:44
出错是因为这个语句:
CODE:
SVM{k}=svmtrain([t1,t2],[ones(size(t1,1),1);zeros(size(t2,1),1)],'kernel_function','polynomial','polyorder',1);

中的X(即[t1,t2])和y(即[ones(size(t1,1),1);zeros(size(t2,1),1)])的维数不对应,即X矩阵中的样本数和标签向量y的长度不一致
你的X是
CODE:
[t1,t2]

这个表示方法是将t1和t2两个矩阵横向排列,变成了2*(2*n)的矩阵,我想正确的应该是
CODE:
[t1;t2]

这样修改我想应该没有问题了~~
What would Jesus do?
3楼2014-07-08 22:22:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sherry89

木虫 (正式写手)

我印象中 matlab自带的svm分类是不是只能分两类的?
Dowhatyoulike,likewhatyoudo
4楼2014-07-09 10:28:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

caucliushuai

银虫 (小有名气)

引用回帖:
3楼: Originally posted by dnp at 2014-07-08 22:22:59
出错是因为这个语句:

SVM{k}=svmtrain(,,'kernel_function','polynomial','polyorder',1);

中的X(即)和y(即)的维数不对应,即X矩阵中的样本数和标签向量y的长度不一致
你的X是



这个表示方法是将t1和 ...

感谢。
好好学习,天天向上。
5楼2014-07-09 23:37:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 caucliushuai 的主题更新
信息提示
请填处理意见