找回密码
 注册
关于网站域名变更的通知
查看: 622|回复: 3
打印 上一主题 下一主题

关于SVM神经网络中svmtrain函数的一个小问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-3-12 13:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
close all;
; I5 J+ u( d; {4 U7 Vclear;
  u" e( ?% F1 s! jclc;
8 D- f) b, X. H- {3 Iformat compact;
. B1 b4 A# Y+ C: ~7 M# s, L
% m2 U4 d- T- `7 A: f+ D  T9 Y$ A% 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量; I3 K/ v2 N7 W" A
load chapter12_wine.mat;
; U6 @2 Y4 w& s* U
: m2 ^, M0 w+ w, V' y& r/ w% 画出测试数据的box可视化图
/ D9 @; l& ?7 u, e& ]- tfigure;3 y# t; }0 Z! K4 k; H4 o) l8 L
boxplot(wine,'orientation','horizontal','labels',categories);  g5 b8 U, ]  p
title('wine数据的box可视化图','FontSize',12);4 O# h- j2 \& o- n
xlabel('属性值','FontSize',12);4 X7 z: {( k5 F8 X
grid on;6 t  h* \  m) W; I7 y
9 b! j2 @0 W, Z; q( c! B1 V
% 画出测试数据的分维可视化图0 s# R- l$ b( ?  Z: O
figure
) v% @3 e6 n7 Z4 |+ [6 G  \subplot(3,5,1);( X$ Z1 X% D1 Z/ y. i/ H$ ], m4 U
hold on# C, N( d, }& A" G6 P3 c
for run = 1:178
' W% E9 b2 t2 r& Y& B    plot(run,wine_labels(run),'*');
. x3 E; T' p  a( B' H: Z% v/ Pend
2 O9 _" l, S$ j, I- Vxlabel('样本','FontSize',10);+ ~# r; J9 w5 J# A* C
ylabel('类别标签','FontSize',10);6 l; h2 u6 v; P5 T3 v  C1 }
title('class','FontSize',10);/ h- \* |& }# f7 {$ L- S$ E$ R( M
for run = 2:144 H# |* ~' b" v8 @1 v
    subplot(3,5,run);
2 v0 h0 o6 K* }: c# c    hold on;5 [+ O2 g! p5 m9 A6 K
    str = ['attrib ',num2str(run-1)];9 F  Z- g! z; @: W; k
    for i = 1:1781 S0 `, h* ~7 ^  R% z$ M9 u2 _+ g3 X
        plot(i,wine(i,run-1),'*');
6 u9 O) q% W. @" F0 d    end) A' K& ]3 v, ^$ V  M- Q
    xlabel('样本','FontSize',10);; J0 p# o. q' I, L
    ylabel('属性值','FontSize',10);  \  ^" z- L8 h8 J
    title(str,'FontSize',10);3 X% w; H8 E5 G( ?+ |
end7 S+ C8 w- b6 @& u
9 M1 |- S, k! E& @
% 选定训练集和测试集
1 W: a2 K& o) D( V" [; A3 t
) `( Y5 }/ S7 Q+ S% 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集
9 A. n. x& D0 j3 ftrain_wine = [wine(1:30,;wine(60:95,;wine(131:153,];
* ~. J9 N7 ^9 t+ d% 相应的训练集的标签也要分离出来
  n  N1 o& B& Z8 M, r; O. ?train_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];: _: ^$ _* U, y
% 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集
! F/ r$ l2 ?  S) A2 b9 ctest_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];
/ Z- P- ?4 S. M* f' f- {% 相应的测试集的标签也要分离出来, B/ C2 K+ g/ B3 e
test_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];
$ D6 g0 x$ \2 ~& T  ^- J0 x
% m6 x" p' e# k$ _' D* `[mtrain,ntrain] = size(train_wine);8 x2 n3 O* @) u( J/ q0 C
[mtest,ntest] = size(test_wine);
! x4 Y' N9 P, e: o/ Y: E) c6 A% K! Q9 m, y$ m. ?
dataset = [train_wine;test_wine];
/ e( J& P9 [# |( r! I8 J7 N' A/ I; u% mapminmax为MATLAB自带的归一化函数
( R5 W$ S% D& h& c/ D' M+ ~( Y, C. U- B[dataset_scale,ps] = mapminmax(dataset',0,1);* U7 ]5 e, F$ s. M
dataset_scale = dataset_scale';. x1 A1 d* p0 }, y6 {/ `9 e

2 e' |% t! R! D0 {5 \& y! g) k  Strain_wine = dataset_scale(1:mtrain,:);/ t+ k% t9 \: Q7 R
test_wine = dataset_scale( (mtrain+1)mtrain+mtest),: );
( Y. O9 C: p% W1 l' O! W%SVM网络训练* e6 E; |/ j- y8 h1 u
model = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');" h. Y! j, u+ ~4 a
%SVM网络预测9 R8 X5 r! l! x- z! W1 x
[predict_label, accuracy] = svmpredict(test_wine_labels, test_wine, model);
4 |( T* F" B7 g  u4 v7 d4 f6 O$ `+ m6 J6 _
% 测试集的实际分类和预测分类图% 通过图可以看出只有一个测试样本是被错分的figure;hold on;plot(test_wine_labels,'o');
5 @  f5 m$ Q+ Y# A- }* |plot(predict_label,'r*');xlabel('测试集样本','FontSize',12);
& j% [; X  j& F* ?4 W5 I; ^  Pylabel('类别标签','FontSize',12);legend('实际测试集分类','预测测试集分类');
$ w6 P2 Q0 l( G, [) @title('测试集的实际分类和预测分类图','FontSize',12);grid on;, }( v5 E, |' e$ G
; z2 \7 N% C5 R1 w( V

  }; Q0 k3 e" A/ U* {& X$ a【运行出现的问题】7 [' j! o9 D$ d! P6 e8 [' G# Y3 R4 k
??? Error using ==> svmtrain at 172
! z! |! H! N1 UGroup must be a vector.
/ H! `' N1 o" H9 M* R8 OError in ==> chapter12 at 609 H6 F  D& X( R' H
model = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');
: |1 `$ a* R/ [& k

5 L# {$ J; U& i* \8 d

该用户从未签到

2#
 楼主| 发表于 2021-3-12 14:36 | 只看该作者
蹲一个大神

该用户从未签到

3#
发表于 2021-3-12 15:05 | 只看该作者
在命令行下面输入:
& o; ?3 G; g) c! M0 B! I
$ Y; o6 `! G* g$ `2 T0 h/ k. `whos train_wine_labels/ i; z. B& l4 l( K4 j0 o2 F  k

4 K5 k# v( u- h5 B1 ]3 g' Lwhos train_wie2 R. E& b' G6 [
0 ?1 C0 n' x7 v7 C  a) y) z
这样你可以知道参数的类别,该错误信息提醒你参数必须为向量才可以。

该用户从未签到

4#
发表于 2021-3-12 16:03 | 只看该作者
载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量; \! E/ t4 Q- g0 M7 b) s3 C! ^

( f2 }1 `# |' T9 D因为原始数据wine是矩阵,而不是向量 所以运行whos train_wine后如下显示8 A' @1 j' A' I, w  \# t6 R/ [& l
>> whos train_wine
: L! f( T  M% _* S1 e  Name             Size            Bytes  Class     Attributes3 s4 V+ V8 O9 B' x9 \8 P2 V
- u/ P( [' q2 {3 P* n, u
  train_wine      89x13             9256  double   " @: l9 \& [. l, a$ W6 y% n
0 e% \5 O- e7 {  T3 Z# f4 u2 O4 w
那么此例中的svmtrain函数就不能应用了么??必须要改原始数据吗??
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-30 23:33 , Processed in 0.140625 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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