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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
close all;
8 S+ O+ I$ r( _clear;
" [' j! B( H) E& ]clc;% g  y9 L, b" Q4 x: p
format compact;! e$ H2 D6 A& H) F
# B8 i3 g/ d7 F+ j, B! a( G
% 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量
6 S  j+ P' }( d& B; Sload chapter12_wine.mat;: `* }) g( P' @! P0 U

4 c0 O9 C; @8 \" e% 画出测试数据的box可视化图
: o/ p4 c9 @5 s* Rfigure;: Q2 F  v7 v7 B- C6 z8 O
boxplot(wine,'orientation','horizontal','labels',categories);
0 Y3 ]7 |0 k6 |0 J3 ~3 ^. ktitle('wine数据的box可视化图','FontSize',12);
$ d7 l3 N! m& T0 w% |xlabel('属性值','FontSize',12);
# B, ?% V8 U' R# y2 O4 ?grid on;
9 R" \5 @1 w' r" G! E/ n
  P2 H( T: b) _0 M% ^4 q  j7 z% 画出测试数据的分维可视化图
5 m0 L- @: y1 a! L" N  Pfigure# c- |  d6 W2 _) K8 ~
subplot(3,5,1);& S6 U0 b5 ]- C- ]$ ?+ Y0 Q  a& c
hold on
5 s- |- }3 g. |* a& O+ u# Q3 y4 mfor run = 1:1780 B6 _% s8 m7 d( x0 P: K- E% `& H
    plot(run,wine_labels(run),'*');
# _4 S! R( f  |$ ~  Lend
" I/ c0 }4 e0 C  k2 Txlabel('样本','FontSize',10);' f* j$ j* X1 w% D, G8 W6 o: ?2 s: g
ylabel('类别标签','FontSize',10);; f/ q# ?* _4 S% P/ w0 X, I
title('class','FontSize',10);6 D6 j( V  a& p4 Q1 m
for run = 2:14
# {3 [: e" x9 z+ I( k    subplot(3,5,run);
- u: e' \3 r. B  i2 b( Q( e+ p    hold on;3 U0 ?, T- ?: m" x' E. [6 c
    str = ['attrib ',num2str(run-1)];: L) E  O0 o. k7 V/ w( E! p
    for i = 1:178. L  @$ N3 a! a
        plot(i,wine(i,run-1),'*');
  E) C0 p6 B8 x& O& s    end
& g& M/ X1 w9 y; `2 U    xlabel('样本','FontSize',10);( g6 H' G) m' k) O# E/ q
    ylabel('属性值','FontSize',10);6 Y0 l% o% |/ ~* f2 J6 p; U
    title(str,'FontSize',10);
. k5 I+ u' z6 G9 p5 }# i/ Iend: ?" |$ u: M4 l$ ]  y
  l: `$ E: I6 A4 Q: H+ R
% 选定训练集和测试集
3 @3 k8 \7 s* h; G# q2 J1 A3 P' d
$ ]- n8 \, @/ P* R; e% 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集. |& K# ]& g3 [8 ~
train_wine = [wine(1:30,;wine(60:95,;wine(131:153,];" Q  h* R, g) `# p8 Q
% 相应的训练集的标签也要分离出来: D/ U1 }( N" X  U$ K/ O
train_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];
" e4 T8 B0 i: I5 ]  c8 ~5 E  Y7 O% 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集
& W! j9 s, `. K' _" Z/ `test_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];
; H! R% j- i; L$ n% 相应的测试集的标签也要分离出来
3 E3 t' g1 d: Qtest_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];' u  R3 M; F& T3 ?0 q
' [; a" M' J: g0 q- W7 b0 b5 x
[mtrain,ntrain] = size(train_wine);
! U. P4 C+ T  h2 g[mtest,ntest] = size(test_wine);8 @& @. Z+ ]9 u$ o3 T. k

  B3 e( v7 t* H# e, Edataset = [train_wine;test_wine];
& x; m+ D7 d6 M4 u% mapminmax为MATLAB自带的归一化函数! @' d, `! f' e- w5 w. x7 A; z- i
[dataset_scale,ps] = mapminmax(dataset',0,1);5 n, R9 H' T8 h$ K& E& Z
dataset_scale = dataset_scale';
$ o- J2 h* E$ l  C+ N4 _# C5 o# }5 ?+ B# a6 C* p
train_wine = dataset_scale(1:mtrain,:);
. h" I; y1 Z* Htest_wine = dataset_scale( (mtrain+1)mtrain+mtest),: );
: z/ E3 f( z& _# O, V4 U%SVM网络训练
$ f  b5 _* [* O) y) W: m3 Xmodel = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');7 ]$ F3 q8 K; ~4 U8 @
%SVM网络预测
. `* j/ C; a  _[predict_label, accuracy] = svmpredict(test_wine_labels, test_wine, model);
; j$ f" s; Z2 T) l$ \" b: w! l+ o0 z/ f& I% m
% 测试集的实际分类和预测分类图% 通过图可以看出只有一个测试样本是被错分的figure;hold on;plot(test_wine_labels,'o');5 S% S0 s% j) r. M4 T
plot(predict_label,'r*');xlabel('测试集样本','FontSize',12);
/ g9 [4 c0 ~6 ^9 ?0 Jylabel('类别标签','FontSize',12);legend('实际测试集分类','预测测试集分类');3 L6 v- t. N3 g% _3 a/ Z
title('测试集的实际分类和预测分类图','FontSize',12);grid on;7 R. v( Z; S9 {& \0 h
$ ?; R) V! e6 S" ]+ q

+ a- o8 n( j2 Q3 T【运行出现的问题】
( S/ B. L" Q7 M% ]??? Error using ==> svmtrain at 172
. G) f2 }1 V, f1 PGroup must be a vector.
$ \, g+ G% |3 Y+ y8 E$ M# \- wError in ==> chapter12 at 60
( Z$ |( X. T% fmodel = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');
7 p; g/ d9 d4 a8 W* F. x( S* `# {
% P' p7 f( F) j6 M0 r( r

该用户从未签到

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

该用户从未签到

3#
发表于 2021-3-12 15:05 | 只看该作者
在命令行下面输入:6 `9 W' K. G8 d2 g0 w3 M/ L; V: c1 H

4 F: h/ y- z' r* O. ^# |whos train_wine_labels1 {9 h! @) X, H& m: V
) t1 O1 T; g" ]
whos train_wie3 g- s* E1 E% {  i
" h* s+ A7 t: c1 V# F( W
这样你可以知道参数的类别,该错误信息提醒你参数必须为向量才可以。

该用户从未签到

4#
发表于 2021-3-12 16:03 | 只看该作者
载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量
8 I8 F3 c6 C  m( T$ F* Q% ~* G: I1 B. ]& N. e
因为原始数据wine是矩阵,而不是向量 所以运行whos train_wine后如下显示
' _; m$ R$ H% m0 e7 B3 y2 ]) x>> whos train_wine3 R& o8 q4 D' p/ I; x
  Name             Size            Bytes  Class     Attributes& w; ]" \7 @: e$ {8 y) A7 ]. {, e

2 T) G% a) ]" q( r9 z$ b% c  train_wine      89x13             9256  double   
( u4 t: _1 J4 s! N- X9 M9 T( H8 s2 I( L
那么此例中的svmtrain函数就不能应用了么??必须要改原始数据吗??
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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