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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
close all;% l' x0 K+ v% R
clear;
5 O) k; c/ v$ }clc;
% @+ E0 L! q+ E1 N5 k) U" Aformat compact;
9 D: }9 C- {! U0 H3 ?
% e4 T1 C$ G* ]: t% 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量1 R  [7 R; j5 ]9 ?) W" Y
load chapter12_wine.mat;
- ?# L# D: Y7 \: q6 A0 Z6 z1 X  z% [
% 画出测试数据的box可视化图- ~! E5 @" q  Q$ C2 ]! W( V
figure;! J2 A, y% j9 A  O5 P/ C# Z
boxplot(wine,'orientation','horizontal','labels',categories);1 N/ r) B5 n6 s; u( G5 \( s$ W
title('wine数据的box可视化图','FontSize',12);  h: i7 j4 b, i4 C9 p0 `
xlabel('属性值','FontSize',12);5 v/ g0 X3 k: a! D- v, R
grid on;! F5 s' v# W6 L3 x0 H; v( n/ e

% @6 m! g8 X! k( b9 r% 画出测试数据的分维可视化图$ {# i4 |8 L- I4 W
figure4 H& c" K4 U% K: t
subplot(3,5,1);& ?5 i1 ~! ]; m- q
hold on
! ~) B* R# d' V( kfor run = 1:178& z: w+ C6 B; h* c
    plot(run,wine_labels(run),'*');8 r* x+ s* m/ A. p% Z1 W5 U
end2 n1 O; Z$ h9 T. _2 i$ \" v& M7 h
xlabel('样本','FontSize',10);8 u8 k# |* m6 q% F1 G+ s3 U7 J+ }
ylabel('类别标签','FontSize',10);
/ W7 H" H2 D/ F2 V. O' h* v5 Ktitle('class','FontSize',10);1 |5 o* g$ T4 n/ ]6 ?9 N7 @6 W
for run = 2:14
5 N0 h4 A- M  n: r, ]. c0 k    subplot(3,5,run);* r8 S% `4 i/ N' `& s$ t+ t( F9 v
    hold on;/ v. r+ Y, |- b/ g
    str = ['attrib ',num2str(run-1)];
3 L: [  A* E  k    for i = 1:178) q* g: C: `, y9 N5 t, z) F) E8 \
        plot(i,wine(i,run-1),'*');
; H' j9 A- _: F# {5 N  y+ x3 w    end% m; V" `( Q" a' H2 @( U
    xlabel('样本','FontSize',10);* H1 y- ~  N4 V8 q
    ylabel('属性值','FontSize',10);
+ z* g5 j' ~: I9 b( ?: h: Z+ ?/ B    title(str,'FontSize',10);
$ B& k; `$ n* u/ E: s) kend
$ M1 H- V" R0 P4 u) W- p# @/ N; u4 B/ K
% 选定训练集和测试集5 }6 {2 E  d$ p# E, S; a2 Z

5 O: N. l8 W5 `7 j% 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集
- @! T; C& y! k, xtrain_wine = [wine(1:30,;wine(60:95,;wine(131:153,];
. P. J) W/ J; V3 \# B5 o% 相应的训练集的标签也要分离出来" ], f, m5 k( }. ^
train_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];
6 `& @" p" |2 P! E0 {( f: m- i% 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集
8 L- g* k: M1 {/ _test_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];0 k: t* p2 R; S' M" S
% 相应的测试集的标签也要分离出来
/ `( C$ }( I' z9 \2 l6 I) Wtest_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];
2 ^# q' n% N+ f( V& ^  ]1 R- _' [! u, O
[mtrain,ntrain] = size(train_wine);
, B- H# ^" j/ W( X" }[mtest,ntest] = size(test_wine);: n7 r1 k, `3 g4 p: k+ j9 E

4 ?; Z2 n" F- f4 S6 Jdataset = [train_wine;test_wine];
* r* B4 X7 w; j$ L2 c. ^% mapminmax为MATLAB自带的归一化函数
/ w$ P; E8 E" s7 c0 |+ c5 q[dataset_scale,ps] = mapminmax(dataset',0,1);7 k( V8 j: {( B/ q' |& X
dataset_scale = dataset_scale';4 T6 H7 I4 U2 c* h, K

7 N, ^5 T( h/ C4 @train_wine = dataset_scale(1:mtrain,:);
7 \; R* U7 |! ?+ A6 ^7 Stest_wine = dataset_scale( (mtrain+1)mtrain+mtest),: );  [: ^) V8 C: h' {& y  Z$ N
%SVM网络训练
! r/ e& e! f4 J# }$ u+ Ymodel = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');4 @/ P% G. u* w& N4 G8 E
%SVM网络预测4 h7 w/ O& r" X1 K
[predict_label, accuracy] = svmpredict(test_wine_labels, test_wine, model);
" E! Z% f6 I* M, b* t; K
. a3 Q4 j! p4 N6 P1 }, _9 P0 \% 测试集的实际分类和预测分类图% 通过图可以看出只有一个测试样本是被错分的figure;hold on;plot(test_wine_labels,'o');# z& _5 L1 R1 b+ h' @' P
plot(predict_label,'r*');xlabel('测试集样本','FontSize',12);9 n8 k$ x" o* ?" b, `) J+ R% v
ylabel('类别标签','FontSize',12);legend('实际测试集分类','预测测试集分类');3 W4 u# m2 p; _3 N) G
title('测试集的实际分类和预测分类图','FontSize',12);grid on;% X$ n0 P& }( X: O6 X2 B+ \# w$ B

% G5 n0 L, b( V5 K; u

# M& ]- a+ h7 v$ C- {0 F【运行出现的问题】! e: B7 v, J1 V8 K
??? Error using ==> svmtrain at 1724 B! t+ @: @+ p/ V- m- o. j" _
Group must be a vector.
$ J3 M3 J  R: X- D9 @Error in ==> chapter12 at 60
3 ?8 G" c* d" Y9 K  Hmodel = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');

8 O0 F  h( d# g4 D3 ?0 \9 ?, L# C% ^3 c

该用户从未签到

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

该用户从未签到

3#
发表于 2021-3-12 15:05 | 只看该作者
在命令行下面输入:- U( r2 Q: Z' X8 s

! B( H& l; |. fwhos train_wine_labels' n' Z' Q/ C3 F- U$ H
: o' t* m! t7 f) s
whos train_wie
2 m+ O# I8 r1 R) E( i
& Q: y# j6 ]2 l+ `& f% i- W这样你可以知道参数的类别,该错误信息提醒你参数必须为向量才可以。

该用户从未签到

4#
发表于 2021-3-12 16:03 | 只看该作者
载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量/ z$ h, ^- F# _! [! r6 B( G0 G5 O  O3 \

; k4 F! _! X$ g8 f4 ~) O因为原始数据wine是矩阵,而不是向量 所以运行whos train_wine后如下显示
0 M2 ^* }0 Y+ T+ o: v1 o>> whos train_wine+ N- ?8 o) t. y2 B9 \' A9 b, {
  Name             Size            Bytes  Class     Attributes' }8 A- H4 W/ T. q/ [# A( x' D. r
4 {" Y/ B0 V2 j; E
  train_wine      89x13             9256  double   
! i* f  Y: f3 s; M/ h1 p3 I
% t4 \. u3 u% ?4 w& P1 r那么此例中的svmtrain函数就不能应用了么??必须要改原始数据吗??
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 01:13 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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