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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
close all;) a  A; q0 H6 A8 Z% \$ @& z7 G
clear;
2 I7 n3 p0 t8 gclc;- f8 X+ R% I8 E& F$ @
format compact;3 }. S; K/ F. r* s0 [
1 e( V& x6 Z" ^. K3 @; }! w8 [- \
% 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量
: I/ u' {8 @2 O4 C, {8 w: u+ Xload chapter12_wine.mat;
/ X' U6 O- x9 B) a$ k
, L0 v& f" Q2 ?0 K% 画出测试数据的box可视化图# S* Z- y& `! M$ y& H: f$ Q- J
figure;! e9 m( m. a% H0 A3 R& \
boxplot(wine,'orientation','horizontal','labels',categories);
9 ^5 d, _# W) B/ h* Ktitle('wine数据的box可视化图','FontSize',12);/ f5 n) ~& Q. _! {- }: }
xlabel('属性值','FontSize',12);
7 Z4 I1 \$ f# bgrid on;, D- Y7 o6 C; Q% W
5 Z# y; v* j. Z
% 画出测试数据的分维可视化图) B* L/ v$ H5 y2 q% c- S$ R
figure
4 h) n; H( N; D+ X7 `( p; Y1 T+ M0 E, Usubplot(3,5,1);
8 k1 Y  S8 C) C, ]5 Bhold on
% k# m# n# ]' R! T+ `# G! m5 cfor run = 1:178; D" Q5 t5 B7 n$ m! r* h
    plot(run,wine_labels(run),'*');- e! l8 a  ~* i; q" J) a
end
5 v) X- J3 s7 s; ~3 d$ Wxlabel('样本','FontSize',10);
0 ~2 i4 I5 ?. vylabel('类别标签','FontSize',10);7 C) |7 b+ Z9 }' E9 U. D! |; m- n
title('class','FontSize',10);' V0 |1 c9 _6 T0 S4 X
for run = 2:147 N" p! ?5 u1 x
    subplot(3,5,run);- P3 t4 s2 Q! H
    hold on;
8 W! l' k' S  Q/ d    str = ['attrib ',num2str(run-1)];- c: {& J. z& x1 C4 R, k
    for i = 1:1783 }# n9 t4 Z$ S$ [& ^
        plot(i,wine(i,run-1),'*');
6 G# h6 m- D# x# W  R    end
* U. t3 r) h2 ~! U. z: }! A    xlabel('样本','FontSize',10);
  T. U( _/ j- S7 S2 I    ylabel('属性值','FontSize',10);
+ k& C1 p$ H. S% S/ ?3 @1 Q, N    title(str,'FontSize',10);
" T, f, M  O' J7 V4 M* Send! G/ y' t' M* q2 @6 ~' w+ S
0 [$ W5 X$ i9 F- V( V- C
% 选定训练集和测试集
6 Y& ]( p5 {' e" n& Y2 ?* k  y% t3 z5 ?4 v; k. A
% 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集$ i; E0 A6 h/ I( J
train_wine = [wine(1:30,;wine(60:95,;wine(131:153,];
9 j8 b1 z  M# Z  h% 相应的训练集的标签也要分离出来% }' F. ~$ c3 k, q8 |2 y( l
train_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];
: C: d, ?* w( W# h, V% F, b% 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集
- w4 S0 }* g( l9 mtest_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];4 U! j2 g) J3 H- q# Q% {7 d6 I& }0 ?
% 相应的测试集的标签也要分离出来
) j1 I' v' n/ i% P$ O  f  }+ \test_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];
0 q0 L% d2 m9 P% h5 `( d) {, f
# X0 Z. }! @9 t5 y9 d( K[mtrain,ntrain] = size(train_wine);
' V1 J9 N9 e+ b[mtest,ntest] = size(test_wine);
. f; Y* J* C9 W/ [& Z0 x0 t0 [0 x/ A* u2 y- }; t( s5 _
dataset = [train_wine;test_wine];) V3 G! q! a1 F% l9 Y( k0 K
% mapminmax为MATLAB自带的归一化函数
+ e2 J3 m! ~% q0 N[dataset_scale,ps] = mapminmax(dataset',0,1);: l2 C* d$ x' P- E8 ?5 B
dataset_scale = dataset_scale';6 {  u1 G, l# {; @. S) Y- [/ G" O

$ s6 M6 X9 B  ~train_wine = dataset_scale(1:mtrain,:);# |, ?/ r6 z' ~
test_wine = dataset_scale( (mtrain+1)mtrain+mtest),: );/ |* I# `; b. Y8 l9 K" i8 Y
%SVM网络训练, l( T- r; Z% r- `, z* B3 A
model = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');
0 Y; ~+ @. H/ w0 F; i, g%SVM网络预测
6 W! F/ Y5 Q" b  `- i[predict_label, accuracy] = svmpredict(test_wine_labels, test_wine, model);
# t. j& X! Z; w3 Z1 d+ h- F
7 {' v, c# {' \4 ?% 测试集的实际分类和预测分类图% 通过图可以看出只有一个测试样本是被错分的figure;hold on;plot(test_wine_labels,'o');7 c& ?' Y( `  M7 s5 A' p8 B0 T( g
plot(predict_label,'r*');xlabel('测试集样本','FontSize',12);& T* m& H% p5 L- A
ylabel('类别标签','FontSize',12);legend('实际测试集分类','预测测试集分类');6 J% f/ J9 {! t" z, F
title('测试集的实际分类和预测分类图','FontSize',12);grid on;/ E: Z! y  |5 o/ x
1 H2 }4 {7 s  d2 i
6 P& e. i& n5 V. P6 B
【运行出现的问题】, T. y/ H5 J" [
??? Error using ==> svmtrain at 172
2 q0 Y- A+ h! F' KGroup must be a vector.$ ^& l% L  G7 u! B) E) {1 U( f
Error in ==> chapter12 at 60- q' A' J: H* O2 h) o
model = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');
- S- b3 e; n( h/ `' s# ?4 R
! l/ X0 P2 k+ |

该用户从未签到

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

该用户从未签到

3#
发表于 2021-3-12 15:05 | 只看该作者
在命令行下面输入:
2 d* e; E8 {; B6 Y, U4 d) x* R
4 y0 I9 C, K5 Ywhos train_wine_labels8 b; G. y4 I/ }, _- v0 |& ~# N
9 A4 U% U: u& h( ?+ s* v: R: J
whos train_wie
1 F: F# X) D6 t1 W$ K! ]9 J) m6 [9 d( G; ?) `
这样你可以知道参数的类别,该错误信息提醒你参数必须为向量才可以。

该用户从未签到

4#
发表于 2021-3-12 16:03 | 只看该作者
载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量9 r8 C6 o" Q- j8 y" f, d
* v; L1 k& e, {' {4 k& _: @4 [
因为原始数据wine是矩阵,而不是向量 所以运行whos train_wine后如下显示9 k, t- G; b# e9 _2 W' ]: _( p$ P  v/ r
>> whos train_wine
" v8 D8 S" M! f9 G! l" d  Name             Size            Bytes  Class     Attributes
+ Q+ {+ `* @  P2 K2 u5 v9 b
. `/ ?0 g, _! R& t$ n& x1 }  train_wine      89x13             9256  double   
; e( }. F  }, ]
- D$ o( F& @) O) @, @那么此例中的svmtrain函数就不能应用了么??必须要改原始数据吗??
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-3 05:41 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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