|
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+ |
|
|