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