|  | 
 
| 
close all;
x
EDA365欢迎您登录!您需要 登录 才可以下载或查看,没有帐号?注册  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
 
 | 
 |